KVM ゲストのディスクサイズ変更

Bymosaos

KVMゲストの用途によっては最初に作成したディスクでは容量が足りなくなる事が時々あります。 CPUやメモリリソースに関しては、一旦再起動が必要ですが比較的簡単に変更可能です ( KVMホスト のリソースで制約は受ける )。

ディスクに関してもNFS等で外部のディスクをマウントしている場合は柔軟に設定変更が可能ですが、イメージ自体のディスク容量を変更する場合にはそれなりの作業が必要になり、どこかに書いておかないと忘れる系なので、手順を書いておきます。

環境

環境は以下になります。

  • KVMホストOS : Rocky9
  • KVMゲストOS : Linux系 ( LVM 利用 )

私はイメージファイルのフォーマットは qcow2 形式となっているので qcow2 での手順になります。

手順

※ 作業をはじめる前に、ディスク容量を変更するKVMゲストはシャットダウンし、必要に応じて イメージのバックアップ を取りましょう。
※ コマンド操作を失敗した場合最悪起動不能になるため、バックアップする事をお勧めします。

先ずは KVMホスト上で作業します。

KVMイメージのチェック

KVMイメージのフォーマットとサイズをチェックします。

qemu-img info /var/lib/libvirt/images/<イメージファイル名>

ファイル容量の拡張

qemu-img resize -f qcow2 <イメージファイル名> +10G

※ +10G の部分はリサイズする量に合わせて適宜変更して下さい。

実行後は qemu-img info を再実行し、サイズが正しく変更されている事を確認しましょう。

これ以降は、KVMゲストでの操作になります。

fdisk による操作

容量を増やしたイメージでKVMゲストを起動します。
fdisk を実行して、ディスクを切り直します。

※ デバイス名は環境に併せて適宜変更して下さい。
※ 途中で説明入ってますが、q 入力までは fdisk コマンドでの操作になります。

fdisk /dev/vda

状態を確認します。

コマンド (m でヘルプ): p
( 中略 )

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/vda1  *        2048  2099199  2097152     1G 83 Linux
/dev/vda2        2099200 41943039 39843840    19G 8e Linux LVM

/dev/vda2 の LVMをリサイズします。

一旦削除して、

コマンド (m でヘルプ): d
パーティション番号 (1,2, 規定値 2): 2

作成しなおし。
基本パーティションの2 を削除しているので基本パーティションの2を作成しなおします。
セクタ数を入力する部分は既定値(リターンのみ)でOKです。
( 空き容量をすべて使う形で作成される )

コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (1-4)
   e   拡張領域
選択 (既定値 p): p
パーティション番号 (2-4, 既定値 2): 2
最初のセクタ (2099200-41943039, 既定値 2099200):
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2099200-41943039, 既定値 41943039):

新しいパーティション 2 をタイプ Linux、サイズ 19 GiB で作成しました。
パーティション #2 には LVM2_member 署名が書き込まれています。

署名を削除しますか? [Y]es/[N]o: N

Linux LVM にタイプ変更

作り直したパーティションタイプは Linux なので Linux LVM に変更します。

コマンド (m でヘルプ): t
パーティション番号 (1,2, 既定値 2): 2
16 進数コード (L で利用可能なコードを一覧表示します): 8e

パーティションのタイプを 'Linux' から 'Linux LVM' に変更しました。

変更後の状態を確認し、

コマンド (m でヘルプ): p
(中略)
デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/vda1  *        2048  2099199  2097152     1G 83 Linux
/dev/vda2        2099200 41943039 39843840    19G 8e Linux LVM

想定している状態 ( サイズ, パーティションタイプ ) に変更されていたら、書き込み、fdisk を終了します。

コマンド (m でヘルプ): w
コマンド (m でヘルプ): q

現行のOS ( Redhat7以降 ) ならば partprobe で再起動不要かと思います。
※ OSによっては再起動が必要かもしれません。
※ partprobe すら不要かも。

partprobe

物理ボリュームのサイズ変更

LVMを利用している場合、PV(物理ボリューム), LV(論理ボリューム) を変更する必要があります。

先ず PV ( PhysicalVolume ) をリサイズします

現在の状態を確認し、

pvdisplay

リサイズします。
fdiskで変更したサイズ全てを利用するように変更が行われます。

pvresize /dev/vda2

サイズ変更後は pvdisplay 再実行して変更確認しておきましょう。

論理ボリュームのサイズ変更

論理ボリュームをリサイズします。

現在の状態を確認し、

lvs
lvdisplay

リサイズします。

lvextend -l +100%FREE /dev/cl/root

最後にファイルシステムを拡張。

 xfs_growfs /dev/cl/root

※ Ubuntu の場合 resize2fs /dev/ubuntu-vg/ubuntu-lv とかに変える必要があるかもしれません。

サイズ確認

df
evtmpfs                                     912992         0     912992    0% /dev
tmpfs                                        930236         0     930236    0% /dev/shm
tmpfs                                        930236      8796     921440    1% /run
tmpfs                                        930236         0     930236    0% /sys/fs/cgroup
/dev/mapper/cl-root                        17811456   8021136    9790320   46% /
/dev/vda1                                    999320    262420     668088   29% /boot
tmpfs                                        186044         0     186044    0% /run/user/1000

容量が拡張されていれば成功です。