Nutanix AHV上で動作しているRocky Linux 9のディスク容量が不足したため、仮想ディスクを拡張しました。
Nutanix側で仮想ディスクを50GBから100GBへ変更しても、それだけではLinuxの/の容量は増えません。
Linux側でも、
仮想ディスク
↓
パーティション
↓
LVM Physical Volume(PV)
↓
Logical Volume(LV)
↓
XFSファイルシステム
という順番で拡張する必要があります。
この記事では、実際にNutanix AHV上のRocky Linux 9で行った作業を例に、ディスク容量を拡張する方法を解説します。

- 今回の環境
- 作業前にスナップショットを取得する
- 現在のディスク構成を確認する
- 1.Nutanix AHV側で仮想ディスクを拡張する
- AHV側でディスクを増やしただけでは/は増えない
- 2.growpartでパーティションを拡張する
- growpartコマンドがない場合
- 3.pvresizeでLVMのPhysical Volumeを拡張する
- 4.lvextendでルート論理ボリュームを拡張する
- 5.xfs_growfsでXFSファイルシステムを拡張する
- 6.df -Thで最終確認する
- 今回実際に行ったコマンド
- lvextend -rを使う方法もある
- XFSは縮小できないので注意
- ディスクを増やしたのにdfで増えない場合
- KVMの場合も基本的な考え方は同じ
- まとめ
- 参考情報
今回の環境
今回作業したのは、Nutanix AHV上で稼働しているRocky Linux 9の仮想マシンです。
実際に2台の仮想マシンで作業しました。
- VM1:50GB → 100GB
- VM2:50GB → 150GB
Linux側はLVM+XFSの構成です。
/dev/sda
├─ /dev/sda1 /boot
└─ /dev/sda2 LVM
├─ rl-root /
└─ rl-swap
環境によってデバイス名、パーティション番号、VG/LV名は異なります。
そのままコマンドをコピーするのではなく、必ずlsblkやpvs、lvsなどで自分の環境を確認してください。
作業前にスナップショットを取得する
ディスクやパーティション、LVMを変更する作業なので、作業前にNutanix側でスナップショットなどの復旧手段を確保しておくと安心です。
特にgrowpartでパーティションを変更する前に取得しておくのがよいでしょう。
また、重要なサーバーではスナップショットだけをバックアップの代わりにせず、通常のバックアップや復旧方法も確認してから作業します。
Nutanix AHVでVMスナップショットを取得する具体的な手順については、以下の記事で解説しています。
▶ Nutanix AHVでVMスナップショットを取得・復元する方法【Prism Element】
現在のディスク構成を確認する
最初に現在の状態を確認します。
lsblk
さらにファイルシステムの容量を確認します。
df -Th
LVMを使用している場合は、次のコマンドも確認しておきます。
pvs
vgs
lvs
今回の環境では、50GBの仮想ディスク/dev/sdaに、/dev/sda1と/dev/sda2が存在し、/dev/sda2がLVMとして使用されていました。
1.Nutanix AHV側で仮想ディスクを拡張する
まずNutanix側で対象仮想マシンの仮想ディスク容量を増やします。
今回の1台目では、
50GB
↓
100GB
へ拡張しました。
もう1台では、
50GB
↓
150GB
へ拡張しています。
Nutanix側で拡張したあと、Rocky Linuxからディスクサイズを確認します。
lsblk
例えば100GBへ拡張した場合、ディスク本体は次のように100GBと認識されます。
NAME SIZE TYPE MOUNTPOINTS
sda 100G disk
├─sda1 1G part /boot
└─sda2 49G part
├─rl-root 45.1G lvm /
└─rl-swap 3.9G lvm [SWAP]
ここで重要なのは、/dev/sdaは100GBになっていても、/dev/sda2やrl-rootはまだ元のサイズという点です。
AHV側でディスクを増やしただけでは/は増えない
これはNutanixの問題ではありません。
仮想ディスク自体は拡張されていますが、Linux側のパーティション・LVM・ファイルシステムは自動的には拡張されていないためです。
/dev/sda 100GB ← 拡張済み
/dev/sda2 49GB ← まだ
PV 49GB ← まだ
rl-root 45.1GB ← まだ
XFS / 約45GB ← まだ
ここからLinux側を順番に拡張していきます。
2.growpartでパーティションを拡張する
今回LVMに使用されているパーティションは/dev/sda2です。
次のコマンドを実行しました。
growpart /dev/sda 2
注意したいのは、
growpart /dev/sda2
ではなく、
growpart /dev/sda 2
とディスク名とパーティション番号を分けて指定することです。
実行後、再度確認します。
lsblk
100GBへ拡張したVMでは、/dev/sda2が約49GBから約99GBへ拡張されました。
150GBへ拡張したVMでは、約149GBになりました。
growpartコマンドがない場合
Rocky Linux 9環境によっては、growpartがインストールされていないことがあります。
今回の環境でも最初は利用できなかったため、cloud-utils-growpartをインストールしました。
dnf install cloud-utils-growpart
インストール後、再度実行します。
growpart /dev/sda 2
3.pvresizeでLVMのPhysical Volumeを拡張する
パーティションを拡張しただけでは、LVMは追加領域をまだ利用できません。
次にPhysical Volume(PV)を拡張します。
pvresize /dev/sda2
確認します。
pvs
または、
pvdisplay
で確認できます。
これで拡張した領域がVolume Groupから利用できるようになります。
4.lvextendでルート論理ボリュームを拡張する
次にLogical Volume(LV)を拡張します。
今回の環境ではルートファイルシステムが、
/dev/mapper/rl-root
でした。
VGの空き領域をすべてルートLVへ割り当てる場合は、次のように実行できます。
lvextend -l +100%FREE /dev/mapper/rl-root
実行後に確認します。
lvs
100GBへ拡張したVMでは、rl-rootが約45.1GBから約95.1GBへ拡張されました。
150GBへ拡張したVMでは、約145.1GBまで拡張されました。
+100%FREEはVolume Groupの未使用領域をすべて対象LVへ割り当てる指定です。
他のLV用に空き領域を残したい場合は、安易に+100%FREEを使用せず、必要なサイズだけ割り当てます。
5.xfs_growfsでXFSファイルシステムを拡張する
LVを拡張しても、XFSファイルシステムはまだ元のサイズです。
最後にXFSを拡張します。
xfs_growfs /
Red Hatの公式ドキュメントでも、XFSはマウントした状態でxfs_growfsを使用して拡張できます。
-Dなどでサイズを指定しなければ、基盤となるデバイスが利用できる最大サイズまで拡張されます。
6.df -Thで最終確認する
最後に容量を確認します。
df -Th
実際に100GBへ拡張したVMでは、最終的にルートLVが約95GBになりました。
Filesystem Type Size Mounted on
/dev/mapper/rl-root xfs 96G /
150GBへ拡張したVMでは、ルートLVが約145GBになりました。
Filesystem Type Size Mounted on
/dev/mapper/rl-root xfs 146G /
仮想ディスクの100GBや150GBすべてが/になるわけではありません。
/bootやswapなどでも容量を使用するためです。
今回実際に行ったコマンド
今回の構成では、Linux側で主に次の順序で作業しました。
lsblk
df -Th
pvs
vgs
lvs
growpart /dev/sda 2
pvresize /dev/sda2
lvextend -l +100%FREE /dev/mapper/rl-root
xfs_growfs /
lsblk
pvs
lvs
df -Th
流れを整理すると、
Nutanix AHV
仮想ディスクを拡張
↓
growpart
パーティション拡張
↓
pvresize
Physical Volume拡張
↓
lvextend
Logical Volume拡張
↓
xfs_growfs
XFS拡張
↓
df -Th
確認
となります。
lvextend -rを使う方法もある
Red Hatのドキュメントでは、lvextendの--resizefs(-r)を利用してLVとファイルシステムをまとめて拡張する方法も案内されています。
例えば環境に応じて、
lvextend -r -l +100%FREE /dev/mapper/rl-root
のような方法もあります。
今回は処理を一段階ずつ確認するため、
lvextend
↓
xfs_growfs
を分けて実行しました。
トラブル時にどのレイヤーまで拡張できているのか確認しやすいため、仕組みを理解するうえでも分けて実行すると分かりやすいです。
XFSは縮小できないので注意
Red Hatのドキュメントでは、XFSファイルシステムは拡張できますが、現在縮小には対応していません。
そのため、
50GB → 150GB
へ拡張したあと、単純に同じ手順を逆にして50GBへ戻すことはできません。
必要以上に大きくしないよう、拡張サイズは事前に検討しておくことをおすすめします。
ディスクを増やしたのにdfで増えない場合
Nutanix AHV側でディスクを拡張したのに、
df -h
の容量が変わらない場合は、どの段階まで拡張されているか確認します。
ディスク自体が増えているか
lsblk
パーティションが増えているか
lsblk
PVが増えているか
pvs
VGに空きがあるか
vgs
LVが増えているか
lvs
XFSが増えているか
df -Th
このように上のレイヤーから順番に確認すると、どこで拡張が止まっているのか判断しやすくなります。
KVMの場合も基本的な考え方は同じ
KVM仮想マシンでも、仮想ディスクを拡張したあとLinux側でパーティション、LVM、ファイルシステムを拡張するという考え方は同じです。
KVMでqcow2ディスクを拡張した実例については、こちらの記事で解説しています。
まとめ
Nutanix AHVでLinux仮想マシンの仮想ディスクを拡張しても、Linuxのルートファイルシステムが自動的に拡張されるとは限りません。
今回のRocky Linux 9+LVM+XFS環境では、
1. Nutanix AHVで仮想ディスク拡張
2. growpart
3. pvresize
4. lvextend
5. xfs_growfs
6. df -Thで確認
という手順で、実際に50GBから100GB、および50GBから150GBへ拡張できました。
重要なのは、ディスク・パーティション・PV・LV・ファイルシステムを別々のレイヤーとして確認することです。
容量が増えない場合も、lsblk、pvs、vgs、lvs、df -Thを順番に確認すると、問題箇所を切り分けやすくなります。


コメント