Posted at

VirtualBoxのゲスト CentOS 7 のVDIディスクとLVMを拡張

More than 1 year has passed since last update.

何番煎じか分かりませんが、VirtualBoxのゲストOS CentOS7 のディスクが容量不足になり、ようやくお鉢が回ってきました。

環境:

VirtualBox Host : Windows 10 (x86_64)

VirtualBox : 5.1.6
VirtualBox Guest : CentOS 7 (x86_64)
※ディスクはVDI形式, 8GB, 可変サイズ

拡張作業前:こんな感じで、8GBのVDI中に /boot で500MB, LVMで残り使っててその中にswapとrootが入ってました。

# df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 6.7G 6.5G 209M 97% /
...
/dev/sda1 497M 301M 197M 61% /boot


VDIディスクイメージの拡張

まずディスクを拡張します。参考資料通り、VBoxManage modifyhd (VDIファイル) --resize (MB単位) で一発です。32GBまで拡張してみました。

c:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd "C:\(...)\xxxx.vdi" --resize 32768

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

参考資料:


LVMパーティションの拡張

作業用にCentOSのLiveDVD isoを準備します。

https://www.centos.org/download/ -> ミラーを選んで、近場から CentOS-7-x86_64-LiveGNOME-1511.iso をDLします。

DLしたら、ゲストVMの設定でストレージのIDEに光学ドライブとして設定し、Live CD/DVD にチェックを入れ、VMを起動します。

LiveDVDが立ち上がったら、Terminalを開いて sudo su - してrootになります。

lsblk コマンドでブロックデバイスの一覧を確認すると、/dev/sda2 としてパーティションが認識され、VG名やLV名もそのまま認識できてました。

20160916_extends_vid_xfs01.png

/sbin/parted (デバイス名) で GNU Parted を起動します。unit MiB で表示/サイズ指定単位を1048576バイト = 1MB単位に揃えます。(参考 : https://www.gnu.org/software/parted/manual/html_node/unit.html )

print free で空き状況も含めたパーティション一覧を表示してみると、以下のように7.6GBのLVMの後ろに、32GBの終わりまで空き容量が追加されていました。

20160916_extends_vid_xfs02.png

ではLVMのパーティションを拡張します。今回使用した GNU Parted 3.1 では、一旦 rm コマンドで削除した後、mkipart コマンドで作り直します。以下の例では、終端を 100% として指定することで、ディスクの終わりまで全て使い切ります。LVMパーティションの場合は、さらに set (partition) lvm on でLVMフラグをONにします。

20160916_extends_vid_xfs03.png

一度VMを再起動し、fdisk -l /dev/sda でパーティションを確認すると、以下のようにLVMパーティションが期待通りに拡張されたことを確認できました。

20160916_extends_vid_xfs04.png


GNU Parted の resize コマンドについて

今回GNU Partedでのパーティションリサイズ方法を調べていたら、resize コマンドで変更できるよ、という記事が複数見つかりました。

しかし、GNU Parted 2.4 以降では resize コマンドは削除されたようです。実際、今回使ったバージョンは 3.1 でしたので、最初これを知らずに resize コマンドを実行したらヘルプが表示されてしまい、困惑しました。調査の結果、上記の通り rm -> mkpart による作り直しで対応できました。

resizeコマンドの使用例 : CentOS6/RHEL6 まではこれが使えたらしい:

GNU Parted 2.4 以降でresizeコマンドが使えなくなった:


PV, LV, ファイルシステム(XFS)の拡張

LVMのパーティションが拡張できましたので、続いてPhysical Volume(PV)を拡張します。今回はPVが一個しか無いので何も考えずに pvresize /dev/sda2 で一気に拡張してます。

20160916_extends_vid_xfs05.png

続いてその中の /dev/centos/root Logical Volume(LV) を拡張します。これもまぁ、他にswapしか無いし、LVなんで、何も考えず lvextend -l +100%FREE /dev/centos/root で一気に拡張してます。

20160916_extends_vid_xfs06.png

ここまでくれば、後はファイルシステムの拡張です。XFSの場合、マウント中に xfs_growfs で拡張します。ということで、以下のように一度適当な空ディレクトリ(今回は /mnt )にマウントしてから、拡張してます。

20160916_extends_vid_xfs07.png

あとは念のため、xfs_repair コマンドでファイルシステムにエラーが無いかチェックしておきます。こっちはマウントしてたら使えないので、アンマウントしてます。

# umount /mnt

# xfs_repair -n /dev/centos/root

-n オプションでdry-runになりますが、特にエラーメッセージは出てませんでした。

これで完了です。VMをシャットダウンし、LiveDVDのisoを外して起動します。本来のディスクで起動した後、lsblkdfコマンドを確認すると、以下のように無事ディスクサイズの拡張に成功してました。

$ lsblk /dev/sda

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 31.5G 0 part
├─centos-root 253:0 0 30.7G 0 lvm /
└─centos-swap 253:1 0 820M 0 lvm [SWAP]

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 31G 6.4G 25G 21% /

参考資料: