◆ VM の HDD のサイズを増やします
◆ LVM の pv と lv のサイズも増やします
◆ VDI (仮想HDD) リサイズ・パーテーションリサイズ・(pv リサイズ)・lv リサイズ・ファイルシステムリサイズ

VM のHDD容量を増やそうと思います
環境は VirtualBox で VM の OS は Linux です
割り当てた分は別の HDD としてマウントするのじゃなく LVM ですでにマウントされてると領域を大きくします

VM の HDD サイズを増やす

VirtualBoxでは使える HDD の種類がいっぱいありますが 最初に決めたサイズから変更できるのは VDI とVHD の 2 つだけみたいです
この 2 つ以外を使っていたらまず VDI 形式に変換(コピー)しないとダメです

vmhdd
○ VDI: VirtualBox 用の形式。これだから特別に早いってほどでもないらしい
○ VMDK: VMware で使われてる形式。VBox でも完全サポートらしい
○ VHD: Microsoft が使ってる形式。 VBox でも完全サポートらしい
○ HDD: 古いバージョン(2)はサポートしてるけど新しい 3 や 4 は未対応らしい
  でも 新しいバージョンを 2 に変換すれば使えるとか。macで使われてるらしい
○ QED: ↓より早いものらしい
○ QCOW: コピーオンライトを使ってるらしい

変換は VirtualBox で ファイル>仮想メディアマネージャー から ハードディスクを選択して「コピー」からできます


とりあえず VDI のハードディスクだとします
仮想ハードディスクのリサイズは GUI じゃできないようなので
vboxmanage modifyhd --resize 65536 vm.vdi
とコマンドをコマンドプロンプトで入力します
vboxmanage と vm.vdi のパスは適切なのに置き換えないとダメです
普通にインストールしてると vboxmanage は "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" にいるはず

resize の後の 65536 が変更後のサイズですが 単位は MiB なのでこの例では 64GiB です

これでハードディスクのサイズが増えたわけです
ハード的な部分が終わって 次はソフト的なところなので VM での操作になります

パーテーションサイズを変更する

VMを立ち上げたら parted や gparted を使って HDD に未割り当て領域が増えてることを確認します

確認できたらそのまま 未割り当ての分を LVM のパーテーションへ拡張します
単純に 別のパーテーション作ってマウントしたいならそれでOKですし その場合は あとはフォーマットしてマウントだけなので これ以降はしなくて済みます

LVM のリサイズ

HDD のパーテーションとしては 全部割り当て済みですが df コマンドで見てもわかるようにサイズは増えてません

LVM

LVM が何するものでどうなっているのかは最初に使い始めた頃はよくわからなかったのですが もう一度調べてみると 意外とわかりやすいものだったので簡単に説明しておきます


lvm

↑のイメージです
複数の HDD のパーテーションをまとめて その中で複数に分割したものを パーテーションのように扱える仕組みです
1 つの HDD の最大サイズを超えたサイズでも仮想的にパーテーションとして扱えるところがいいところですね

普通は HDD が 1 つで使うことが多いのであまりメリットはないし pv と vg で違いがよくわからない 同じようなの 2 つもいるの? と思うかもしれませんが 上の図だと分かりやすいと思います

pv は物理ボリュームというもので HDD のパーテーションです
/dev/sda2 とかそういうのです

vg はボリュームグループのというもので pv を vg に所属させます
デフォルトの設定でインストールすると pv が 1 つで vg も 1 つで同じだと思いがちですが vg は複数の pv をまとめることができます

lv は論理ボリュームというもので vg を切り出したものです
vg を 1 つの HDD と考えて パーテーション を区切ると考えるとわかりやすいです

pvscan
vgscan
lvscan
pvdisplay
vgdisplay
lvdisplay

というコマンドでそれぞれのステータスを確認できます

サイズ変更

LVM の仕組みがわかったところでサイズの変更に入ります

parted か gparted でパーテーションを広げたので pv のサイズはすでに大きくなっています
vg は pv をまとめただけなので vg のサイズも大きくなっています
なので lv だけを広げればおっけいです

LVM のサイズを変更する gparted みたいな GUI ソフトに system-config-lvm というのがあるようですが 古い OS でしか使えないみたいで 最近の fedora などでは使えないです

ということでコマンドで変更します
lvresize --size +25G /dev/mapper/fedora-root
--size のオプションに + や - があると相対値で指定できます

リサイズした後はファイルシステムの方もリサイズしないと使えるサイズは増えません
resize2fs /dev/mapper/fedora-root
ファイルシステムをリサイズしたいパーテーションを指定すれば自動で最大まで広げてくれます

サイトによっては resize2fs じゃなくて ext2online と書かれてるところもありましたがこれは古いやつらしいので resize2fs にします
たぶん最近のだと こっちしかインストールされてないと思います

最近の fedora だと ファイルシステムが XFS になっていることもあります
XFS だと resize2fs がエラーになるので 代わりに xfs_growfs コマンドを使います

完了

これで完成です
df コマンドでみてみると空き容量が増えてると思います

ところで VM の手順は LiveCD 使う必要なくて 起動中に / をマウントしたパーテーションの拡張をしても問題なかったです
縮小じゃなくて拡張なので途中でどこにデータが書き込まれても困らないからだと思います

縮小したいとき

逆にサイズを小さくしたいときは 逆の順番ですればいいです
ファイルシステムのサイズを縮小するときはマウント解除した状態でやらないといけないと思います
/ などマウント解除できないなら LiveCD 使ったりデュアルブートで別OSからやります

e2fsck (ファイルシステム縮小のための準備)

resize2fs (ファイルシステム縮小)

lvreduce (lv 縮小)

pvresize (pv 縮小)

vboxmanage (VDI 縮小)

という流れになります