仮想マシンとLinuxのディスクの拡張方法

1. はじめに

個人で使う分だとあまりディスクの拡張って意識しなくて、消して作り直すで十分だったりするんですが、時々環境消さずにディスク容量増やしたいなといったことがあるのでまとめておく
例によって忘れん坊なのでw

また、正直VMのGUIをうまく使えないんですよね…w
使えないというか、項目を見つけられなかったりするので…
よって、基本コマンドでやります

2. VirtualBox

2-1. 固定ディスクの場合

固定ディスクの場合は一旦可変ディスクに変更して領域を拡張したのち、再度固定ディスクに戻すといったことをしないといけない
可変ディスクを使っている場合はこの項目は飛ばして構いませんが、クローンを作成しておきたいなどの場合は作成するのもありかと

まず、元のディスクのクローンを作成

$ vboxmanage clonemedium --format {フォーマット} {対象ディスク} {変換後ディスク} [--variant Standard]

--variant Standard
は、デフォルトでStandard(可変ディスク)なので、指定しなくてもよい

以下、フォーマットがVDIで元の仮想ディスクをsource.vdi、クローンディスクをresizetarget.vdiとする場合の例

$ vboxmanage clonemedium --format VDI source.vdi resizetarget.vdi [--variant Standard]

2-2. 領域の拡張

以下のコマンドを実行(ディスク全体を32GBにしたい場合の例)

$ vboxmanage modifymedium resizetarget.vdi --resize 32768

2-3. 固定ディスクへ戻す

$ vboxmanage clonemedium --format VDI resizetarget.vdi update.vdi --variant Fixed

あとは、update.vdiを新しいディスクとして使用する

3. Proxmox

Proxmoxだと以下のコマンドでディスクを拡張

# qm resize {VMID} {ディスク} {ディスク容量}

+20G のように + を付けると現在のサイズに追加
40G のように + を付けない場合は、そのディスクの合計サイズを40Gにする指定
縮小は基本不可
例えば、VMIDが101、scsi0で20G拡張したいなら、

# qm resize 101 scsi0 +20G

4. ゲストOSへ反映

上記だけでは、仮想ディスクの容量が増えただけでゲストOSで使用できる領域が増えたわけではないため、ゲストOS側への反映を行う
但しディストリビューションやファイルシステム等によっても異なるため、以下に都度記述していくこととする

4-1. Arch Linux(ext4)

Arch Linuxで以下のような構成とする

$ sudo fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Device        Start      End  Sectors  Size Type
/dev/sda1      2048  2099199  2097152    1G EFI System
/dev/sda2   2099200 33556479 31457280   15G Linux filesystem
/dev/sda3  33556480 41940991  8384512    4G Linux swap

Disk /dev/sda 40GiB
となっているが、パーティションテーブル自体の合計は20GBしかない

この場合テーブルの最後(/dev/sda3)にswapがあるため、一旦この部分を削除して「/」の領域拡張を行い、再度swapを再作成する

まずは、swapをoffにする

$ sudo swapoff /dev/sda3

以下cfdiskの流れだと

swap領域を削除
↓
サイズ変更で、/dev/sda2の領域を増やす(swap分を引いた値に)
↓
swap領域を再度作成
↓
書き込み
↓
終了

となり、最終的に以下のようになっていればよいかと

                                 Disk: /dev/sda
               Size: 40 GiB, 42949672960 bytes, 83886080 sectors
          Label: gpt, identifier: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

   Device            Start          End     Sectors    Size Type
>>  /dev/sda1         2048      2099199     2097152       1G EFI System
    /dev/sda2      2099200      75499519    73400320      35G Linux filesystem
    /dev/sda3     75499520      83884031    8384512       4G Linux swap

ここまでできたら、一旦再起動
(再起動前に/etc/fstabのswap行を一旦コメントアウトしておくと、旧UUIDを探して待たされるのを避けられます)

$ sudo reboot

して

$ sudo resize2fs /dev/sda2
$ df -BG
Filesystem     1G-blocks  Used Available Use% Mounted on
/dev/sda2            35G   15G       18G  46% /

で、「/」が増えていることを確認

次にswapを再作成

$ sudo mkswap /dev/sda3
$ sudo swapon /dev/sda3

最後に、swap領域のUUIDを確認して、/etc/fstabにUUIDの値を書き換える

$ blkid /dev/sda3
$ sudo vim /etc/fstab

で、/dev/sda3の部分のUUIDをblkidでの値に書き換えて保存
再起動で問題がなければOK

← Back