Help us understand the problem. What is going on with this article?

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

More than 3 years have 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% /

参考資料:

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away