KVMの仮想ストレージ拡張
Ubuntu22.04 on KVM on Ubuntu22.04 の環境において仮想ストレージサイズを拡張する。
QEMU diskの拡張
QEMU/KVMを管理するホスト側で操作する。
QEMU/KVMが仮想ディスクとして利用しているQEMU diskのサイズを拡張する。
仮想マシン名 linuxvm
のデフォルト仮想ディスクは /var/lib/libvirt/images/linuxvm.qcow2
なのでこれを指定してサイズ拡張する。
以下は確認も含めてVMが停止した状態で実行する必要がある。
$ sudo qemu-img info /var/lib/libvirt/images/linuxvm.qcow2
image: /var/lib/libvirt/images/linuxvm.qcow2
file format: qcow2
virtual size: 25 GiB (26843545600 bytes)
disk size: 5.36 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
このストレージに対して25GB追加するコマンドは以下の通り。
$ sudo qemu-img resize -f qcow2 /var/lib/libvirt/images/linuxvm.qcow2 +25G
Image resized.
これで無事ストレージサイズが50GBとなる。
$ sudo qemu-img info /var/lib/libvirt/images/linuxvm.qcow2
image: /var/lib/libvirt/images/linuxvm.qcow2
file format: qcow2
virtual size: 50 GiB (53687091200 bytes)
disk size: 5.36 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
パーティションの拡張
以下はゲストVM側で操作する。
操作前の構成は以下の通り。
/dev/vda3
が拡張対象のルートファイルシステムで、ubuntu-vg
および ubuntu-lv
というデフォルトのVGおよびLVが切られている。
現時点では /dev/vda
が50GiBと認識されたいるが、 /vda3
には反映されていない。
また、GPT PMBR size mismatch
の警告が出力されるようになっている。
$sudo fdisk -l
...
GPT PMBR size mismatch (52428799 != 104857599) will be corrected by write.
The backup GPT table is not on the end of the device.
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 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: C5E473E5-FB30-4587-A9A5-A176906195C0
Device Start End Sectors Size Type
/dev/vda1 2048 4095 2048 1M BIOS boot
/dev/vda2 4096 4198399 4194304 2G Linux filesystem
/dev/vda3 4198400 52426751 48228352 23G Linux filesystem
...
$ sudo pvdisplay -C
PV VG Fmt Attr PSize PFree
/dev/vda3 ubuntu-vg lvm2 a-- <23.00g 0
$ sudo vgdisplay -C
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <23.00g 0
$ sudo lvdisplay -C
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <23.00g
これを以下の通り修正する。
parted
コマンドprintすると修正を促されるのでfixを指定して修正する。これにより警告が解消される。
その後、同じくparted
プロンプト内にてresizepart 3
と拡張したいパーティションを指定し、拡張サイズに 100%
を入力する。
これによりパーティションNumber3のサイズが51.5GBに拡張される
$ sudo parted /dev/vda
GNU Parted 3.4
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Warning: Not all of the space available to /dev/vda appears to be used, you can fix the GPT to use all of the space (an extra 52428800 blocks) or continue with the current setting?
Fix/Ignore? fix
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 2150MB 2147MB ext4
3 2150MB 26.8GB 24.7GB
(parted) resizepart 3
End? [26.8GB]? 100%
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 2150MB 2147MB ext4
3 2150MB 53.7GB 51.5GB
これにより、 /dev/vda3
には50GBの容量が付与される。一方で、PVやLVには拡張が反映されていない。
$ sudo fdisk -l
...
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 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: CF748271-DBE6-4FBF-A296-179AB6C3EBFC
Device Start End Sectors Size Type
/dev/vda1 2048 4095 2048 1M BIOS boot
/dev/vda2 4096 4198399 4194304 2G Linux filesystem
/dev/vda3 4198400 104857566 100659167 48G Linux filesystem
...
$ sudo pvdisplay -C
PV VG Fmt Attr PSize PFree
/dev/vda3 ubuntu-vg lvm2 a-- <23.00g 0
$ sudo vgdisplay -C
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <23.00g 0
$ sudo lvdisplay -C
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <23.00g
PV/LVの拡張
PV(Physical Volume)やLV(Logical Volume)にストレージ拡張を反映する。
PVへの容量拡張のため、pvresize
を利用する
$ sudo pvresize /dev/vda3
Physical volume "/dev/vda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
これにより、PVの空き容量が認識されるようになる。
$ sudo pvdisplay -C
PV VG Fmt Attr PSize PFree
/dev/vda3 ubuntu-vg lvm2 a-- <48.00g 25.00g
$ sudo vgdisplay -C
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <48.00g 25.00g
$ sudo lvdisplay -C
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <23.00g
続いてLV領域の拡張のため、lvextend
を利用する
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <23.00 GiB (5887 extents) to <48.00 GiB (12287 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
これによりLVのサイズも拡張されることが確認できる。
$ sudo pvdisplay -C
PV VG Fmt Attr PSize PFree
/dev/vda3 ubuntu-vg lvm2 a-- <48.00g 0
$ sudo vgdisplay -C
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <48.00g 0
$ sudo lvdisplay -C
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <48.00g
ファイルシステムの拡張
ここまでの操作でLVレベルでの容量増加が反映された。
最後にファイルシステムとして反映させる。
現時点ではルートファイルシステムとしてext4を利用しており、容量は25GBしか認識できていない。
$ mount -l | grep /dev/mapper/ubuntu--vg-ubuntu--lv
/dev/mapper/ubuntu--vg-ubuntu--lv on / type ext4 (rw,relatime)
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 23G 5.0G 17G 23% /
resize2fs
コマンドを利用し、ファイルシステムの容量変更を反映する
$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 6
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 12581888 (4k) blocks long.
以上によりファイルシステムのサイズ拡張が完了する。
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 48G 5.0G 41G 11% /
Discussion