この記事はopenSUSE Advent Calendar 2023 7日目の記事です。
openSUSEのダウンロードサイトには、様々なタイプのファイルがあります。
blog.geeko.jp
その中で、仮想マシンの用のイメージ "Minimal Virtual Machine" が存在します
openSUSE Leap 15.5 - Get openSUSE
Minimal Virtual Machineにも種類があり、x86環境では以下が選択できます。
今回はこの中で KVM and Xen image にフォーカスを当てたいと思います。
ダウンロードサイト上のファイルサイズが KVM and XEN image (250.4 MiB)
となっており小っさ!っとなりますが、
これはKVM and Xen image がスパース形式のqcow2ファイルで提供されているためです。
KVM and Xen image (以後KVMイメージ)の実容量は 約300MBですが、論理容量は24GB あります。
halni@SUSE-MZ32:~> ls -lsh openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 251M -rw-r--r-- 1 root root 251M Nov 1 02:45 openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 halni@SUSE-MZ32:~> qemu-img info openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 ...(略)... virtual size: 24 GiB (25769803776 bytes) ★ 論理容量 disk size: 250 MiB ★ 実際のファイルサイズ ...(略)... halni@SUSE-MZ32:~>
ゲスト側からはしっかり24GB分確認できます。
localhost:~ # fdisk -l Disk /dev/vda: 24 GiB, 25769803776 bytes, 50331648 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: gpt Disk identifier: 2032C12E-B8C7-437F-832D-60AEE47BC452 Device Start End Sectors Size Type /dev/vda1 2048 6143 4096 2M BIOS boot /dev/vda2 6144 73727 67584 33M EFI System /dev/vda3 73728 50331614 50257887 24G Linux filesystem localhost:~ # df -h | grep /$ /dev/vda3 24G 599M 23G 3% / ★ / に24GB割り当てられている localhost:~ # df -h | grep /$
ダウンロードしたKVMイメージは、KVMゲスト(仮想マシン)にアタッチすることで使用できます。
virt-managerやcockpit-machines、virt-install 等からゲストを新規作成して、KVMイメージを指定するだけでOK!
virt-install を使用して作成する場合はこんな感じ。
virt-install --name test --memory 4096 --vcpus 4 --disk KVMイメージのパス --import --os-variant opensuse15.5 --noautoconsole
halni@SUSE-MZ32:~> sudo virt-install --name SUSE-image-kvm --memory 4096 --vcpus 2 --disk /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 --import --os-variant opensuse15.5 --noautoconsole Starting install... Creating domain... | 0 B 00:00:00 Domain creation completed. halni@SUSE-MZ32:~> sudo virsh list --all | grep SUSE-image 76 SUSE-image-kvm running halni@SUSE-MZ32:~>
作成後、ゲストはKVMイメージを読んで立ち上がります
キーボードレイアウト、タイムゾーン、rootパスワードを設定するだけで立ち上がります。
この初回設定ウィザードには、jeos-firstboot が使用されています。
localhost:~ # systemctl status jeos-firstboot ● jeos-firstboot.service - SUSE JeOS First Boot Wizard Loaded: loaded (/usr/lib/systemd/system/jeos-firstboot.service; enabled; vendor preset: disabled) Active: active (exited) since Tue 2023-12-05 12:12:50 UTC; 1 day 15h ago
因みにKVMイメージにはシリアルコンソール設定が投入されているため、ホスト側からvirsh consoleで接続することも可能です。
halni@SUSE-MZ32:~> sudo virsh console SUSE-image-kvm Connected to domain 'SUSE-image-kvm' Escape character is ^] (Ctrl + ]) localhost login: root Password: Last login: Thu Dec 5 11:55:09 on tty1 Have a lot of fun... localhost:~ # cat /etc/default/grub ...(略)... GRUB_CMDLINE_LINUX_DEFAULT="rw systemd.show_status=1 console=ttyS0,115200 console=tty0 quiet" ★シリアルコンソール設定が投入されている ...(略)...
先ほどこのKVMイメージがスパース形式のqcow2ファイルと書きましたが、
スパース形式のため、ゲスト側でディスク領域を使用した分qcow2ファイルは肥大化していきます。
halni@SUSE-MZ32:~> qemu-img info /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 ...(略)... virtual size: 24 GiB (25769803776 bytes) disk size: 506 MiB ...(略)... ★ ゲスト側でディスクにファイル書き込み localhost:~ # df -h | grep /$ /dev/vda3 24G 590M 23G 3% / localhost:~ # dd if=/dev/zero of=/root/1G.img bs=1G count=1 1+0 records in 1+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.70161 s, 631 MB/s localhost:~ # df -h | grep /$ /dev/vda3 24G 1.6G 22G 7% / localhost:~ # ★ qcow2ファイルの実容量が増えている halni@SUSE-MZ32:~> qemu-img info /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 ...(略)... virtual size: 24 GiB (25769803776 bytes) disk size: 1.32 GiB ...(略)...
ゲスト側でファイルを削除しても、ホスト側から見てqcow2イメージの実容量が小さくなることはありません。
実容量を小さくしたい場合、qcow2イメージを圧縮することで小さくすることができます。
qemu-img -c -O qcow2 圧縮したいqcow2ファイル 圧縮後のqcow2ファイル名
localhost:~ # df -h | grep /$ /dev/vda3 24G 5.6G 18G 24% / localhost:~ # rm 5G.img localhost:~ # df -h | grep /$ /dev/vda3 24G 595M 23G 3% / ★ ゲスト側の使用量が500MB程度 halni@SUSE-MZ32:~> ls -lsh /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 5.4G -rw-r--r-- 1 root root 5.4G Dec 7 20:53 /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 halni@SUSE-MZ32:~> qemu-img info /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 ...(略)... virtual size: 24 GiB (25769803776 bytes) disk size: 5.35 GiB ★ 実容量は5GB程度消費している ...(略)... halni@SUSE-MZ32:~> sudo qemu-img convert -c -O qcow2 /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen.qcow2 /mn t/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen-shrink.qcow2 halni@SUSE-MZ32:~> halni@SUSE-MZ32:~> ls -lsh /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen-shrink.qcow2 252M -rw-r--r-- 1 root root 252M Dec 7 20:55 /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen-shrink.qcow2 halni@SUSE-MZ32:~> qemu-img info /mnt/vm/openSUSE-Leap-15.5-Minimal-VM.x86_64-kvm-and-xen-shrink.qcow2 ...(略)... virtual size: 24 GiB (25769803776 bytes) disk size: 252 MiB ★ 実容量を圧縮できた ...(略)... halni@SUSE-MZ32:~>
元々5GB程度まで肥大化していたqcow2イメージを、200MB程度まで小さくすることができました。