はじめに
VMDK形式のストレージが容量いっぱいで困ったので拡張しました。
いろいろググったのですが、情報がちりばめられていたため、まとめることに。
正直、このあたりはそんなに知識もなかったので、検索ワードとかも悩んで迷いました。
バージョン
- Windows 10 の VirtualBoxのバージョンは 5.2.12 r122591 (Qt5.6.2)
- 仮想マシンのOSは CentOS Linux release 7.3.1611 (Core)
状態
/ が狭くて何かするのが辛い。
/dev/mapper/cl-rootを増やしたい。
[root@localhost ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/cl-root 6.2G 6.0G 225M 97% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 182M 833M 18% /boot
tmpfs 380M 0 380M 0% /run/user/0
容量拡張
大きく分けて3つの手順を行うことで容量拡張ができました。各所のポイントでそれぞれ悩みました。
1. VBoxManage コマンドを使って拡張
最初、対象の仮想マシンをシャットダウンします。
対象の仮想マシンに割り当てられているストレージを確認し、vmdk形式のファイルの保存場所を確認します。
次にコマンドプロンプトを開いてVBoxManageコマンドがある場所に移動します。
> cd C:\Program Files\Oracle\VirtualBox
現状のvmdk形式ファイルをvdi形式にしてクローンします。(--format vdi
オプションを使います)
> VBoxManage clonehd "D:\VirtualBox VMs\xxxx\xxxx-disk001.vmdk" "D:\VirtualBox VMs\xxxx\xxxx-disk001_resize.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
クローンしたvdi形式ファイルのリサイズを行います。(8Gを20Gに拡張)
> VBoxManage modifyhd "D:\VirtualBox VMs\scp_dev\scp_dev-disk001_resize.vdi" --resize 20480
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
リサイズしたvdi形式をvmdk形式に戻します。
> VBoxManage clonehd "D:\VirtualBox VMs\xxxx\xxxx-disk001_resize.vdi" "D:\VirtualBox VMs\xxxx\xxxx-disk001_resize.vmdk" --format vmdk
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vmdk'. UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
それから、仮想メディアマネージャーを起動してハードディスクのタブを見てみると、クローンしたvdi形式とvmdk形式のファイルが追加され、仮想サイズが20Gに増えたものが確認できます。その後、対象の仮想マシンの設定にある「ストレージ」を選択し、容量を拡張したxxxx-disk001_resize.vmdk
に変更します。容量の小さいほうは「-」を押して、マウントを外すだけでいいです。(なぜなら、ミスったとき元に戻れなくなるので)
ちなみに仮想メディアマネージャーで容量変更を試みると。。
VBOX_E_NOT_SUPPORTEDというようなエラーが出力されます。
Resizing to new size 17179869184 is not yet supported for medium 'D:\VirtualBox VMs\xxxxxx\xxxxxx-disk001.vmdk'.
容量変更ができません。ここで出来ればすぐ終わる話なのに....
2. 「GNOME Partition Editor」を使って容量再割り当て
さて、入れ物の大きさは20Gに調整しました。しかし、これでは既存のパーティション/dev/mapper/cl-root
は6.2Gのままです。これを器いっぱいにしたいので、「GNOME Partition Editor」というもので広げます。
GNOME Partition Editorのダウンロードはこちらで行います。
「GNOME Partition Editor」
Stable Releasesにある「Download gparted-live-0.32.0-1-i686.iso」をダウンロードします。
落として来たら仮想マシンの設定にある「ストレージ」を選択し、光学ドライブの「空」にgparted-live-0.32.0-1-i686.isoをセットします。セットしたら、仮想マシンの電源を入れて、通常起動を行います。通常起動したらCD扱いのisoを読み込むために急いでF12キーをおしてcd-romを選択すると次のような画面が表示されるので、「GParted Live」を選択。
- don't touch keymap を選択
- Loading language settings を 15に
- Continue to start X to use GParted automatically を選択(そのままEnterで)
増やしたいボリュームをクリックして「リサイズ/移動」を選択し新しいサイズを表示されている最大サイズに変更し、後方の空き領域を0にします。
「リサイズ」ボタンを押して、サイズを変更します。しかしまだ確定されていません。
上のほうにある「Apply」ボタンを押して本当の確定になります。
容量がでっかくなりました。もう、ここに用は無いので、この後いったんこの仮想マシンを閉じます。(仮想マシンの電源オフ)
3. lvextend コマンドで論理ボリュームを拡張する
まずは、仮想マシンを通常起動します。
さて、これでもまだ容量は広くありません。
[root@localhost ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/cl-root 6.2G 6.0G 224M 97% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 182M 833M 18% /boot
tmpfs 380M 0 380M 0% /run/user/0
[root@localhost ~]#
lvdisplayでみると/dev/mapper/cl-rootは次のように6.20Gです。(/dev/cl/rootとう場所みたい。)
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/cl/swap
LV Name swap
VG Name cl
LV UUID xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-07-03 13:12:20 +0900
LV Status available
# open 2
LV Size 820.00 MiB
Current LE 205
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/cl/root
LV Name root
VG Name cl
LV UUID xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-07-03 13:12:20 +0900
LV Status available
# open 1
LV Size 6.20 GiB
Current LE 1586
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
vgdisplayというコマンドで見てみると19Gあるけど7G使ってます。。的な雰囲気を感じ取れます。
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 1791 / 7.00 GiB
Free PE / Size 3072 / 12.00 GiB
VG UUID xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1
今回は確保した12Gすべてを(トータル約20G)割り当てたいのでパーセンテージ指定で実行します。
ずばりの容量指定や、+〇G追加とかもできます。
では、100%指定でlvextendコマンドを実行します。
> lvextend -l +100%FREE /dev/cl/root
Size of logical volume cl/root changed from 6.20 GiB (1586 extents) to 18.20 GiB (4658 extents).
Logical volume cl/root successfully resized.
これでサイズ変更は完了しました!そこでdfコマンドで見てみると
[root@localhost ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/cl-root 6.2G 6.0G 224M 97% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 182M 833M 18% /boot
tmpfs 380M 0 380M 0% /run/user/0
まだでっかくなっていません。。正しく適用するためにxfs_growfsコマンドを実行します。(centos7以降のコマンドみたいです。)
data blockが変更され容量確保が行われます。
[root@localhost ~]# xfs_growfs /dev/cl/root
meta-data=/dev/mapper/cl-root isize=512 agcount=4, agsize=406016 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1624064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1624064 to 4769792
拡張結果
再度dfコマンドで容量確認します。
[root@localhost ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/cl-root 19G 6.0G 13G 33% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 182M 833M 18% /boot
tmpfs 380M 0 380M 0% /run/user/0
無事容量確保できました。とても長い道のりでした。
まとめ
そんなに難しいことではないにしても、知らない事ばかりで不安でしたがなんとか容量確保できました。
この手の情報は時間の経過とともにやり方が変わっていくので、せめて1年おきに再確認が必要かもしれませんね。