hero_picture

Vagrantのboxサイズを拡張する

提供されているboxが8GBしかなかったので拡張したのですが、結構大変だったのでメモします。

ディスクの拡張

boxから普通にインスタンスを作成。
インスタンスを作成したらシャットダウンして作業を行います。

VirtualBoxではディスクサイズが可変のタイプは .vdiなのですが、
Vagrantのboxとできるディスクタイプはvmdkとなります。
まずは、現在のvmdkディスクをクローンしてvdi形式のディスクを作成します。

その後、カレントディレクトリを作成した仮想サーバのディスクがある所まで移動して

1VBoxManage clonehd "box-disk1.vmdk" "clone-box-disk1.vdi" --format vdi

クローンしたディスクの容量を拡張します。ここでは20GBにしたいと仮定して20480を設定しています。
(20(GB) * 1024(MB) = 20480)

1VBoxManage modifyhd clone-box-disk1.vdi --resize 20480

次に、ディスク拡張されたvdiをvmdkにクローンします。

1VBoxManage clonehd "clone-box-disk1.vdi" "box-disk2.vmdk" --format vmdk

拡張したディスクを差し替えます。
この作業は、
VirtualBoxから行ってもいいかもしれません。

–port 0 –device 0 の部分はbox-disk1.vmdkが入っていたものを指定します。
ちなみに、server_default_1448874918650_80404 は仮想サーバー名です。

1VBoxManage storageattach server_default_1448874918650_80404 --storagectl "SATA" --port 0 --device 0 --type hdd --medium box-disk2.vmdk

この設定を行った後、起動してみて無事に起動すればOKです。
確認できたら、またまたシャットダウンします。

パーティション操作

現在ディスクは20GBに拡張しましたが、パーティションは8GBまでしか使用されていない状態です。
パーティションを操作して、8GBを20GBに拡張します。

新たに作成された box-disk2.vmdk を適当な仮想サーバにアタッチします。
アタッチ後、lsblkコマンドでディスクの様態をチェック。

1# lsblk
2NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
3sda    202:65   0   8G  0 disk /
4└ sda1 202:145  0   1G  0 part
5└─sda2 202:145  0   8G  0 part
6sdb    202:144  0  20G  0 disk
7└ sdb1 202:145  0   1G  0 [SWAP]
8└─sdb2 202:145  0   8G  0 part

今回くっつけたものはsdbとして認識されていました。
partedで
パーティション操作を行っていきます。

ない場合は、 yum install parted か apt-get install partedでインストールします。

1# parted /dev/sdb
2GNU Parted 2.1
3/dev/sdb を使用
4GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。

表記をセクターに変更します。

1(parted) unit s

現在の情報を表示します。

1(parted) print
2Model: ATA VBOX HARDDISK (scsi)
3Disk /dev/sda: 41943040s
4Sector size (logical/physical): 512B/512B
5Partition Table: msdos
6Number  Start     End        Size       Type     File system     Flags
71      2048s     1953791s   1951744s   primary  linux-swap(v1)
82      1953792s  15988735s  15986688s  primary   ext4            boot

この情報はあとで使用するため、メモしておきましょう。
今回は、特にNumber2の行が重要になります。

次に、パーティションを削除します。

1(parted) rm 2

パーティションを作成します。

1(parted) mkpart
2Partition name? []?
3File system type? [ext2]? ext4
4Start? 1953792s
5End? 100%

パーティションサイズ以外は、元のパーティションと同じになるように修正します。

1(parted) set 2 boot on
2(parted) set 2 LBA off

ここまでできたら、EndとSize以外は元と同じになっているか確認します。

1(parted) print
2Model: ATA VBOX HARDDISK (scsi)
3Disk /dev/sda: 41943040s
4Sector size (logical/physical): 512B/512B
5Partition Table: msdos
6Number  Start     End        Size       Type     File system     Flags
71      2048s     1953791s   1951744s   primary  linux-swap(v1)
82      1953792s  41943039s  39989248s  primary  ext4            boot

終了!

1(parted) quit

20GBに拡張されていることを確認します。

1# lsblk
2NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
3sda    202:65   0   8G  0 disk /
4└ sda1 202:145  0   1G  0 part
5└─sda2 202:145  0   8G  0 part
6sdb    202:144  0  20G  0 disk
7└ sdb1 202:145  0   1G  0 [SWAP]
8└─sdb2 202:145  0  19G  0 part

念のため、ディスクチェックをかけましょう。

1e2fsck -f /dev/sdb2

ここまでできたら、適当な仮想サーバをシャットダウンしてディスクを外します。

パーティション拡張したディスクで起動

インスタンスを起動します。

1resize2fs /dev/sda2

ここで、サイズが20GBに拡張されたら完了です。

box作成

あとはVagrantfileがあるディレクトリでboxを作成して終了です。

1vagrant package