何番煎じか分かりませんが、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%
参考資料:
- VirtualBoxのゲストOSディスク拡張 - Qiita
- CentOS 7(XFS)でLVMディスク拡張でハマったこと - Qiita
- VirtualBox の仮想ディスクのサイズを変更する - Qiita
- VirtualBoxにおける仮想マシンの仮想ディスク容量を拡張するための手順
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名もそのまま認識できてました。
/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の終わりまで空き容量が追加されていました。
ではLVMのパーティションを拡張します。今回使用した GNU Parted 3.1 では、一旦 rm
コマンドで削除した後、mkipart
コマンドで作り直します。以下の例では、終端を 100%
として指定することで、ディスクの終わりまで全て使い切ります。LVMパーティションの場合は、さらに set (partition) lvm on
でLVMフラグをONにします。
一度VMを再起動し、fdisk -l /dev/sda
でパーティションを確認すると、以下のようにLVMパーティションが期待通りに拡張されたことを確認できました。
GNU Parted の resize コマンドについて
今回GNU Partedでのパーティションリサイズ方法を調べていたら、resize
コマンドで変更できるよ、という記事が複数見つかりました。
しかし、GNU Parted 2.4 以降では resize コマンドは削除されたようです。実際、今回使ったバージョンは 3.1 でしたので、最初これを知らずに resize
コマンドを実行したらヘルプが表示されてしまい、困惑しました。調査の結果、上記の通り rm -> mkpart
による作り直しで対応できました。
resizeコマンドの使用例 : CentOS6/RHEL6 まではこれが使えたらしい:
GNU Parted 2.4 以降でresizeコマンドが使えなくなった:
- linux - Parted has no 'resize' command available - Super User
- Parted User’s Manual: Command explanations
PV, LV, ファイルシステム(XFS)の拡張
LVMのパーティションが拡張できましたので、続いてPhysical Volume(PV)を拡張します。今回はPVが一個しか無いので何も考えずに pvresize /dev/sda2
で一気に拡張してます。
続いてその中の /dev/centos/root
Logical Volume(LV) を拡張します。これもまぁ、他にswapしか無いし、LVなんで、何も考えず lvextend -l +100%FREE /dev/centos/root
で一気に拡張してます。
ここまでくれば、後はファイルシステムの拡張です。XFSの場合、マウント中に xfs_growfs
で拡張します。ということで、以下のように一度適当な空ディレクトリ(今回は /mnt
)にマウントしてから、拡張してます。
あとは念のため、xfs_repair
コマンドでファイルシステムにエラーが無いかチェックしておきます。こっちはマウントしてたら使えないので、アンマウントしてます。
# umount /mnt
# xfs_repair -n /dev/centos/root
-n
オプションでdry-runになりますが、特にエラーメッセージは出てませんでした。
これで完了です。VMをシャットダウンし、LiveDVDのisoを外して起動します。本来のディスクで起動した後、lsblk
やdf
コマンドを確認すると、以下のように無事ディスクサイズの拡張に成功してました。
$ 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% /
参考資料: