KVMでLinux-VMのディスク拡張方法を紹介します。
作業履歴みたいになっています。
コマンドメモ 大まかな流れ
50GB → 50GB+200GB に変更します
1.ホスト側作業
対象のVMを停止
virsh shutdown XXXXX
拡張予定のVMの状態を確認
qemu-img info /vm-image/XXXXX.qcow2
#KVMのゲストOSのディスクサイズを拡張 +400GB
qemu-img resize -f qcow2 /vm-image/XXXXX.qcow2 +400G
拡張予定のVMの状態を確認
qemu-img info /vm-image/XXXXX.qcow2
2.ゲストVMの作業
ゲストをVM起動
# virsh start XXXXX
ゲストOSにログインして
・パーティションの拡張
parted -l
parted /dev/sda ★システムで/dev/xxxは変わる
(parted) p
(parted) resizepart XX ★XX:拡張するパーティション番号
終了? [53.7GB]? 100% ★「100%」を入力
(parted)q
parted -l
・PV/LVの拡張
PV(Physical Volume)やLV(Logical Volume)にストレージ拡張を反映する。
pvdisplay -C
lvdisplay
lvdisplay -C
PVの容量拡張
pvresize /dev/sda2
pvdisplay -C
lvdisplay
lvdisplay -C
LV領域の拡張
lvextend -l +100%FREE /dev/rl/root
*LV Pathがたまに違う
ファイルシステムの拡張
xfs_growfs /dev/mapper/rl-root
*moutポイントもたまに違う
サイズ確認
df -h
詳細な流れ
KVMホスト側の作業
QEMU diskを拡張します。
物理ファイルの大きさを確認。 50GB。
# [/vm-image]# ls -lh -rw-------+ 1 qemu qemu 51G 10月 26 2023 RockyLinux92-S4.qcow2 -rw-------+ 1 root root 51G 10月 19 10:50 rockylinux8-XXX.qcow2 -rw-------+ 1 root root 51G 10月 19 10:36 rockylinux8-2.qcow2 -rw-------+ 1 root root 51G 5月 30 13:36 rockylinux92.qcow2
作成時のパラメータは以下。50GBで作成しています。
–name=rockylinux8-XXX \
–location=/download/Rocky-8.8-x86_64-dvd1.iso \
–disk path=/vm-image/rockylinux8-XXX.qcow2,size=50,format=qcow2 \
–vcpus=4 –ram=4096 \
–graphics none \
–extra-args=”console=tty0 console=ttyS0,115200n8″
QEMU/KVMを管理するホスト側で操作します。
まず、QEMU/KVMが仮想ディスクとして利用しているQEMU diskのサイズを拡張します。
VMのディスクの箱を大きくするようなイメージです。
VMが停止した状態で実行します。
(qemu-img info はVMの停止は不要)
# [/vm-image]# qemu-img info rockylinux8-2.qcow2 image: rockylinux8-2.qcow2 file format: qcow2 virtual size: 50G ★virt-install size=で指定したサイズ disk size: 5.4G ★ゲストOS側で利用しているサイズ cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true
# [/vm-image]# qemu-img info RockyLinux92-S2.qcow2 image: RockyLinux92-S2.qcow2 file format: qcow2 virtual size: 50G (53687091200 bytes) disk size: 46G ★ゲストOS側で利用しているサイズ cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true
このディスクに対して50GBを追加するコマンドは以下。
qemu-img resize -f qcow2 /vm-image/rockylinux8-XXX.qcow2 +200G
これでディスサイズが 50GB + 200GB = 250GBとなる。
# #qemu-img resize -f qcow2 /db2/vm-image/rockylinux8-2.qcow2 +200G Image resized. # ls -lh root root 51G 10月 26 2023 rockylinux8-2.qcow2 ★まだ、50GB
# # qemu-img info /vm-image/rockylinux8-XXX.qcow2 qemu-img info rockylinux8-2.qcow2 image: rockylinux8-2.qcow2 file format: qcow2 virtual size: 250G ★50GB → 250GB disk size: 5.4G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true
ゲストVM側の作業
VMの起動を起動します。
# virsh start rockylinux8-2
パーティションの拡張
操作前の構成は以下の通り。
# # df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.8G 0 1.8G 0% /dev/shm tmpfs 1.8G 8.5M 1.8G 1% /run tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup /dev/mapper/rl-root 46G 4.9G 41G 11% / ★ /dev/sda1 1014M 223M 792M 22% /boot tmpfs 367M 0 367M 0% /run/user/0
# fdisk -l
★/dev/sda は拡張前の50GBのまま。
# [root@rockylinux8-2 ~]# fdisk -l ディスク /dev/sda: 250 GiB, 268435456000 バイト, 524288000 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xa26550cf デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM ★ ディスク /dev/mapper/rl-root: 45 GiB, 48360325120 バイト, 94453760 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク /dev/mapper/rl-swap: 4 GiB, 4248829952 バイト, 8298496 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
★parted -l で確認すると /dev/sda が268GBになっています。
# # parted -l モデル: ATA QEMU HARDDISK (scsi) ディスク /dev/sda: 268GB ★ セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos ディスクフラグ: 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 53.7GB 52.6GB primary vm ★250GBでない parted -l モデル: ATA QEMU HARDDISK (scsi) ディスク /dev/sda: 268GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos ディスクフラグ: 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 53.7GB 52.6GB primary lvm
parted /dev/sda
p 入力
番号 2 の50GBを拡張したいので、
resizepart 2
拡張したいパーティションを指定し、拡張サイズに 100%を入力。
これによりパーティション番号 2のサイズが50GB→250GBに拡張されます。
# # parted /dev/sda GNU Parted 3.2 /dev/sda を使用 GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。 (parted) p ★「p」で表示 モデル: ATA QEMU HARDDISK (scsi) ディスク /dev/sda: 268GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos ディスクフラグ: 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 53.7GB 52.6GB primary lvm (parted) resizepart 2 終了? [53.7GB]? 100% ★「100%」を入力 (parted) p ★「p」で表示 モデル: ATA QEMU HARDDISK (scsi) ディスク /dev/sda: 268GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos ディスクフラグ: 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 268GB 267GB primary lvm ★250GBになっている (parted)q
# # parted -l モデル: ATA QEMU HARDDISK (scsi) ディスク /dev/sda: 268GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos ディスクフラグ: 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 268GB 267GB primary lvm
# # fdisk -l ディスク /dev/sda: 250 GiB, 268435456000 バイト, 524288000 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xa26550cf デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 524287999 522188800 249G 8e Linux LVM
PV/LVの拡張
PV(Physical Volume)やLV(Logical Volume)にストレージ拡張を反映します。
実行するコマンドは以下の流れ。
どこでうまく行かなかったが分からなくなるので、「pvdisplay」「lvdisplay」で実行前後のサイズを確認します。
pvdisplay -C
lvdisplay
lvdisplay -C
PVの容量拡張
pvresize /dev/sda2
pvdisplay -C
lvdisplay
lvdisplay -C
LV領域の拡張
lvextend -l +100%FREE /dev/rl/root
ファイルシステムの拡張
xfs_growfs /dev/mapper/rl-root
# [root@rockylinux8-2 ~]# pvdisplay -C PV VG Fmt Attr PSize PFree /dev/sda2 rl lvm2 a-- <49.00g 0 [root@rockylinux8-2 ~]# lvdisplay --- Logical volume --- LV Path /dev/rl/swap LV Name swap VG Name rl LV Write Access read/write LV Status available # open 2 LV Size <3.96 GiB Current LE 1013 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/rl/root LV Name root VG Name rl LV Write Access read/write LV Status available # open 1 LV Size <45.04 GiB Current LE 11530 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
PVの容量拡張
pvresize /dev/sda2
# [root@rockylinux8-2 ~]# lvdisplay -C LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rl -wi-ao---- <45.04g swap rl -wi-ao---- <3.96g [root@rockylinux8-2 ~]# pvresize /dev/sda2 ★ Physical volume "/dev/sda2" changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized
# [root@rockylinux8-2 ~]# pvdisplay -C PV VG Fmt Attr PSize PFree /dev/sda2 rl lvm2 a-- <249.00g 200.00g [root@rockylinux8-2 ~]# lvdisplay --- Logical volume --- LV Path /dev/rl/swap LV Name swap VG Name rl LV Write Access read/write LV Status available # open 2 LV Size <3.96 GiB Current LE 1013 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/rl/root LV Name root VG Name rl LV Write Access read/write LV Status available # open 1 LV Size <45.04 GiB Current LE 11530 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
LV領域の拡張
lvextend -l +100%FREE /dev/rl/root
# [root@rockylinux8-2 ~]# lvdisplay -C LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rl -wi-ao---- <45.04g swap rl -wi-ao---- <3.96g [root@rockylinux8-2 ~]# lvextend -l +100%FREE /dev/rl/root ★ Size of logical volume rl/root changed from <45.04 GiB (11530 extents) to <245.04 GiB (62730 extents). Logical volume rl/root successfully resized.
# [root@rockylinux8-2 ~]# pvdisplay -C PV VG Fmt Attr PSize PFree /dev/sda2 rl lvm2 a-- <249.00g 0 [root@rockylinux8-2 ~]# lvdisplay --- Logical volume --- LV Path /dev/rl/swap LV Name swap VG Name rl LV Write Access read/write LV Status available # open 2 LV Size <3.96 GiB Current LE 1013 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/rl/root LV Name root VG Name rl LV Write Access read/write LV Status available # open 1 LV Size <245.04 GiB Current LE 62730 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
# [root@rockylinux8-2 ~]# lvdisplay -C LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rl -wi-ao---- <245.04g swap rl -wi-ao---- <3.96g [root@rockylinux8-2 ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.8G 0 1.8G 0% /dev/shm tmpfs 1.8G 8.5M 1.8G 1% /run tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup /dev/mapper/rl-root 46G 4.9G 41G 11% / ★ /dev/sda1 1014M 223M 792M 22% /boot tmpfs 367M 0 367M 0% /run/user/0
ファイルシステムの拡張
OSのファイルシステムを拡張します。
# $ mount -l | grep root $ more /etc/fstab /dev/mapper/rl-root / xfs defaults 0 0 UUID=XXXXXXXXXS /boot xfs defaults 0 0 /dev/mapper/rl-swap none swap defaults 0 0
resize2fs /dev/mapper/rl-root
resize2fs /dev/rl/root
「Couldn’t find valid filesystem superblock.」でエラーになります。
# # resize2fs /dev/mapper/rl-root resize2fs 1.45.6 (20-Mar-2020) resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rl-root Couldn't find valid filesystem superblock. # resize2fs /dev/rl/root resize2fs 1.45.6 (20-Mar-2020) resize2fs: Bad magic number in super-block while trying to open /dev/rl/root Couldn't find valid filesystem superblock.
RHEL 7系OS からは標準ファイルシステムが ext → xfs に変更になりました。
その関係で、ファイルシステム操作系コマンドもxfs_系使う必要があります。
xfsファイルシステムの拡張は xfs_growfs コマンドで行う。
# $ mount -l /dev/mapper/rl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) # xfs_growfs /dev/mapper/rl-root meta-data=/dev/mapper/rl-root isize=512 agcount=4, agsize=2951680 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=11806720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=5765, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 11806720 to 64235520 # df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.8G 0 1.8G 0% /dev/shm tmpfs 1.8G 8.5M 1.8G 1% /run tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup /dev/mapper/rl-root 246G 6.3G 239G 3% / ★246GB /dev/sda1 1014M 223M 792M 22% /boot tmpfs 367M 0 367M 0% /run/user/0
# parted -l モデル: ATA QEMU HARDDISK (scsi) ディスク /dev/sda: 268GB ★ セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos ディスクフラグ: 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 268GB 267GB primary lvm ★ ls -lh -rw-------+ 1 qemu qemu 51G 10月 26 2023 rockylinux8-2.qcow2
まだ、ホスト側の物理ファイルサイズはそのままです。
[ホスト側で]virtual sizeは、すでに拡張済みなので変化なし。
「disk size」は、VM内で実施ディスクを使用すると使用量に応じて増えます。
# qemu-img info rockylinux8-2.qcow2
image: rockylinux8-2.qcow2
file format: qcow2
virtual size: 250G (268435456000 bytes)
disk size: 5.5G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
最後に
KVMホスト側でゲストVMのディスクの箱を大きくする作業以外は、ほとんどLinuxのOSでディスクを拡張する操作と同じです。