Mount and reszie qcow2 images of QEMU VMs.
我要調整一個Windows的QEMU/KVM虛擬機的容量大小。該虛擬機使用libvirt新增,虛擬硬碟以qcow2格式儲存。
為更輕鬆的調整硬碟分區,我以圖形程式Gparted操作,來增加/縮小qcow2大小。
後面示範如何掛載qcow2硬碟,存取裡面的資料。
以Ubuntu 22.04而言,要先安裝qemu-utils、Gparted套件:
sudo apt-get install qemu-utils gparted ntfs-3g
1. 增加qcow2虛擬硬碟容量#
- 找出qcow2位置,Libvirt所新增的虛擬機預設是位於
/var/lib/libvirt/images
$ ls /var/lib/libvirt/images
windows11.qcow2
- 用
qemu-img info
指令確認容量
$ qemu-img info windows11.qcow2
image: windows11.qcow2
file format: qcow2
virtual size: 128 GiB (137438953472 bytes)
disk size: 112 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: windows11.qcow2
protocol type: file
file length: 128 GiB (137460187136 bytes)
disk size: 112 GiB
- 如果有空間,先備份虛擬硬碟
sudo cp windows11.qcow2 windows11_old.qcow2
- 使用
qemu-img resize
增加容量
cd /var/lib/libvirt/images
sudo qemu-img resize windows11.qcow2 256G
# 或者用加的
sudo qemu-img resize windows11.qcow2 +128G
在那之後,開機進入Windows虛擬機,用磁碟工具「延伸磁碟區」的功能就完成擴容。
如果磁碟工具讀不到新分區,就得手動對虛擬硬碟的分區做進一步操作。將qcow2掛載為NBD網路硬碟:
sudo modprobe nbd max_part=10
sudo qemu-nbd -c /dev/nbd0 windows11.qcow2
- 以Gparted開啟
sudo gparted /dev/nbd0
這裡就可以用圖形界面編輯分區啦
例如將中間的磁區按右鍵,貼齊磁柱,拉到最右邊。再調整最大分區的拉桿,將空白的磁區填滿。這樣移的話會讓qcow2直接吃滿256GB的實體硬碟空間。按下綠色箭頭確認。
編輯完成後刪除NBD裝置
sudo qemu-nbd -d /dev/nbd0
- 用
qemu-img info windows11.qcow2
確認擴充後的大小。
2. 縮小qcow2虛擬硬碟容量#
本節步驟跟上節類似,不過過程是反過來。縮小硬碟可能會造成資料損失,且磁區後方必須是未使用磁區。
- 如果有空間,先備份虛擬硬碟
sudo cp windows11.qcow2 windows11_old.qcow2
- 掛載qcow2為NBD網路硬碟
sudo modprobe nbd max_part=10
sudo qemu-nbd -c /dev/nbd0 windows11.qcow2
- 以Gparted開啟掛載的硬碟
sudo gparted /dev/nbd0
拉動拉桿,將磁區縮小,最後方多出的灰色未使用磁區即為可縮小的範圍,按下綠色箭頭儲存
編輯好之後,才用qemu-img shrink縮小qcow2大小
sudo qemu-img resize windows11.qcow2 --shrink -128G
- 編輯完成後刪除NBD裝置
sudo qemu-nbd -d /dev/nbd0
- 用
qemu-img info windows11.qcow2
確認縮小後的大小。
3. 在Linux存取qcow2硬碟的檔案#
- 將qcow2掛載成NBD裝置
sudo modprobe nbd max_part=10
sudo qemu-nbd -c /dev/nbd0 windows11.qcow2
- 使用fdisk查看Windows虛擬硬碟內的分區
sudo fdisk /dev/nbd0 -l
- 接著再掛載,通常是掛載Microsoft basic data分區到Linux,以存取C槽資料。
sudo mount /dev/nbd0p3 /mnt/media/disk
- 使用完記得取消掛載
sudo umount /mnt/media/disk
- 編輯完成後刪除NBD裝置
sudo qemu-nbd -d /dev/nbd0