VirtualBox
centos7

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% /

参考資料: