====== qemu-img による仮想ディスクの操作 ====== ===== 仮想ディスクの作成 ====
$ sudo qemu-img create -f qcow2 filename.qcow2 256G
Formatting 'filename.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=274877906944 lazy_refcounts=off refcount_bits=16
===== 仮想ディスクの容量表示 =====
$ sudo qemu-img info filename.qcow2
image: filename.qcow2 file format: qcow2 virtual size: 256 GiB (274877906944 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
===== 仮想ディスクの拡張 =====
$ sudo qemu-img resize filename.qcow2 +256G
Image resized.
仮想ディスクの容量確認
$ sudo qemu-img info filename.qcow2
image: filename.qcow2 file format: qcow2 virtual size: 512G (549755813888 bytes) disk size: 188G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
===== 仮想ディスクイメージの圧縮 ===== 仮想ディスクイメージの圧縮 (Shrink) とは、仮想ディスクイメージ内の使われなくなった領域を開放し、イメージサイズをコンパクトにして物理ディスク領域も開放する。\\
# ls -al
合計 30426336 -rw-------. 1 root root 274920112128 12月 2 16:18 Windows_10_Pro_x64.qcow2
# qemu-img info Windows_10_Pro_x64.qcow2
image: Windows_10_Pro_x64.qcow2 file format: qcow2 virtual size: 256 GiB (274877906944 bytes) disk size: 10.7 GiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: true refcount bits: 16 corrupt: false extended l2: false
==== スパースファイル (sparse file) ==== スパースファイル (英語: sparse file) とはファイルの一種で、部分的に空のファイルを実際のファイルシステム上で少ない消費容量で効率的に保存する仕組みである。実際にディスク上に空の領域を確保せずに、領域が空であることを示すメタデータを書きこむことで実現される。\\ [[wpjp>スパースファイル|スパースファイル - Wikipedia]]\\
# pwd
/var/lib/libvirt/images
# ls -l --block-size=g
合計 13G -rw-------. 1 root root 257G 12月 2 16:18 Windows_10_Pro_x64.qcow2 -rw-------. 1 root root 257G 12月 2 16:18 fedora35_minimal.qcow2 -rw-r--r--. 1 root root 1G 12月 3 00:11 filename.qcow2
# df -BG
ファイルシス 1G-ブロック 使用 使用可 使用% マウント位置 devtmpfs 8G 0G 8G 0% /dev tmpfs 8G 1G 8G 4% /dev/shm tmpfs 4G 1G 4G 1% /run /dev/sda3 476G 48G 428G 10% / /dev/sda3 476G 48G 428G 10% /home /dev/sda2 1G 1G 1G 28% /boot /dev/sda1 1G 1G 1G 3% /boot/efi tmpfs 8G 1G 8G 1% /tmp tmpfs 2G 1G 2G 1% /run/user/1000
# find . -type f -printf "%S\t%p\n" | gawk '$1 < 1.0 {print}'
0.0416002 ./Windows_10_Pro_x64.qcow2 0.00872493 ./fedora35_minimal.qcow2
# qemu-img info filename.qcow2 
image: filename.qcow2 file format: qcow2 virtual size: 256 GiB (274877906944 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
==== 圧縮方法 ====
# qemu-img convert -O qcow2 Windows_10_Pro_x64.qcow2 Windows_10_Pro_x64.qcow2_shrink
# ls -al
合計 30426336 -rw-------. 1 root root 274920112128 12月 2 16:18 Windows_10_Pro_x64.qcow2 -rw-r--r--. 1 root root 11280121856 12月 3 12:59 Windows_10_Pro_x64.qcow2_shrink
# qemu-img convert -O qcow2 -c Windows_10_Pro_x64.qcow2 Windows_10_Pro_x64.qcow2_shrink-c
# ls -al
合計 30426336 -rw-------. 1 root root 274920112128 12月 2 16:18 Windows_10_Pro_x64.qcow2 -rw-r--r--. 1 root root 11280121856 12月 3 12:59 Windows_10_Pro_x64.qcow2_shrink -rw-r--r--. 1 root root 6055723008 12月 3 13:22 Windows_10_Pro_x64.qcow2_shrink-c
===== イメージの移行 ===== VMware の vmdk から QEMU の qcow2 形式に変換するには、以下のコマンドを実行する。\\ ※ qcow2 形式は必要に応じて膨らむので、実際に使われている容量のファイルができあがる。\\
$ sudo qemu-img convert -O qcow2 filename.vmdk filename.qcow2
vmdk から raw イメージに変換するには、以下のコマンドを実行する。\\ ※ vmdk で定義されているディスク容量(使われていない領域を含む)の raw イメージができあがる。\\
$ sudo qemu-img convert -O raw filename.vmdk filename.img
===== Linux で qcow2 ディスクイメージをマウントする方法 ===== 参考: [[https://gist.github.com/shamil/62935d9b456a6f9877b5|How to mount a qcow2 disk image]]\\ ホスト上で NBD を有効にして、QCOW2 を NBD として接続する🤔\\
$ sudo modprobe nbd max_part=8
$ sudo qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/Windows_10_Pro_x64.qcow2
$ sudo fdisk /dev/nbd0 -l
Disk /dev/nbd0: 256 GiB, 274877906944 bytes, 536870912 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4ac41c2f

Device      Boot  Start       End   Sectors   Size Id Type
/dev/nbd0p1 *      2048    206847    204800   100M  7 HPFS/NTFS/exFAT
/dev/nbd0p2      206848 536868863 536662016 255.9G  7 HPFS/NTFS/exFAT
NBD を切断する🤔\\
$ sudo qemu-nbd --disconnect /dev/nbd0
/dev/nbd0 disconnected
$ sudo rmmod nbd
===== 参考文献 ===== [[https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%91%E3%83%BC%E3%82%B9%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB|スパースファイル - ArchWiki]]\\ [[https://pve.proxmox.com/wiki/Shrink_Qcow2_Disk_Files|Shrink Qcow2 Disk Files - Proxmox VE]]\\ [[https://unix.stackexchange.com/questions/612888/tell-if-a-file-is-a-sparse-file|There is an existing question for "Finding all sparse files", and I think I could use it, but the scripts were too complex to understand. I don't think the GUI of Ubuntu file manager prov...]]\\ [[https://superuser.com/questions/72152/windows-7-fails-to-install-on-kvm-with-qemu|ubuntu - Windows 7 fails to install on KVM with qemu - Super User]]\\ [[https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64|virtualization - Using virtio-win drivers with Win7 SP1 x64 - Ask Ubuntu]]\\ ==== 付録 ==== [[tw>tomoyan596/status/1465803218206617605|KVMの中で飼いならします🤤]]\\ [[tw>tomoyan596sp/status/1697355608306209081|スパースファイルの整理はこんなところにしてたのかぁ🤔記憶にはあるけど...どこに行ったかわからなくなってたり...😅]]\\