とは言ったものの、サクッと出来る感じではなく、結構手順が面倒くさいです。
何故かと言うと、Vagrantで使われる仮想ディスクイメージはvmdk形式と言われるもので、一度作成したディスクのサイズを変更することが出来ない。
なので、一度変換可能な形式(vdi)に変換して、拡張してから元のvmdk形式に戻すという手順が必要になる。
また、注意点としてVirtualBoxでスナップショット等を使っていた場合、スナップショットで保存されている内容は一切移行出来ない。
(出来る方法があるのかもしれないが、現時点ではわからなかった)
VirtualBoxをインストールしたディレクトリ内に「VBoxManage.exe」というファイルがあるので、それを使って拡張する。
C:\Program Files\Oracle\VirtualBox\VBoxManage.exe
以下、拡張のための手順。
1.VirtualBoxマネージャーで拡張したいVMを選択し、設定画面を開く
拡張したいVMを選択し、右クリック押して、コンテキストメニューの中の設定をクリック。もしくは拡張したいVMを選択した状態で、設定ボタンを押す。
2.設定画面で拡張したいvmdkファイルの場所を調べる。
ストレージ → XXXXX.vmdk → 場所にマウスカーソルを合わせる。そうするとフルパスが出てくるので、それを確認する。場所を右クリックするとコピー出来る。
コピーした値は「C:\Users\UserName\VirtualBox VMs\jenkins-laravel\box-disk1.vmdk」とする。
3.コマンドプロンプトを立ち上げて下記のディレクトリへ移動
cd C:\Program Files\Oracle\VirtualBox\
4.VBoxManage.exeがあるか確認
C:\Program Files\Oracle\VirtualBox> dir VBoxManage.exe
5.仮想HDDのUUIDを調べる
先ほど確認したvmdkファイルのパスと、下記のリストの中のLocationが一致するものを探す。該当のvmdkファイルのUUIDの項目をコピーする。
C:\Program Files\Oracle\VirtualBox> VBoxManage.exe list hdds
UUID: 6e50fc33-ab05-4ca5-9740-ad708e335e11 ← これをコピーする
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\UserName\VirtualBox VMs\jenkins-laravel\box-disk1.vmdk
Storage format: VMDK
Capacity: 30720 MBytes
UUID: acd294ea-6844-4121-b66f-85f848bcecec
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\UserName\VirtualBox VMs\jenkins-laravel-2\box-disk1.vmdk
Storage format: VMDK
Capacity: 30720 MBytes
6.vmdk形式からvdi形式にしてコピーする
vmdkファイルと同じ内容の仮想ディスクをvdi形式で作成する。$ VBoxManage.exe clonehd "C:\Users\UserName\VirtualBox VMs\jenkins-laravel\box-disk1.vmdk" "C:\Users\UserName\VirtualBox VMs\jenkins-laravel\clone.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'vdi'. UUID: 152e5d9f-e66a-4212-84d6-dbe05c1f8ceb
7.vdi形式の仮想ディスクのサイズを変更する。100GBにしたい場合は下記の通り。単位はMB
$ VBoxManage.exe modifyhd "C:\Users\UserName\VirtualBox VMs\jenkins-laravel\clone.vdi" --resize 102400
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
8.拡張したvdi形式をvmdk形式にしてコピーする
$ VBoxManage clonehd "C:\Users\UserName\VirtualBox VMs\jenkins-laravel\clone.vdi" "C:\Users\UserName\VirtualBox VMs\jenkins-laravel\box-disk1.vmdk" --format vmdk
※上書きするのが怖い場合は別名にして保存し、VirtualBox上でストレージを変更することで対応出来る。
仮想ハードディスクファイルの選択をクリックして、新しく作ったvmdkファイルを選択することで、過去のファイルを残した状態で拡張出来る。
もし拡張したvmdkファイルに何か不都合があった場合は、元の仮想ハードディスクファイルに戻せば元の状態に戻る。
9.vdiファイルをVBoxManger上の管理から外す
ここに記載しているUUIDはvdi形式のファイルのUUID。$ VBoxManage closemedium disk 152e5d9f-e66a-4212-84d6-dbe05c1f8ceb
ここまでで、vmdkファイルのディスク拡張作業は完了。
ここからは拡張したディスクを使用できるようにする。
10.拡張したVMにログインして、現状を確認する
使用出来る容量は変わっていない事を確認。# df -h
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/vg_vagrantcentos64-lv_root
28G 1.8G 24G 7% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
vagrant 459G 358G 102G 78% /vagrant
11.VMWareを立ち上げて状態を確認
ディスク容量自体が増えていることを確認する# fdisk -l
ディスク /dev/sda: 107.4 GB, 107374182400 バイト
ヘッド 255, セクタ 63, シリンダ 13054
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00054ab8
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 1 64 512000 83 Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2 64 3917 30944256 8e Linux LVM
ディスク /dev/mapper/vg_vagrantcentos64-lv_root: 29.6 GB, 29569843200 バイト
ヘッド 255, セクタ 63, シリンダ 3594
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
ディスク /dev/mapper/vg_vagrantcentos64-lv_swap: 2113 MB, 2113929216 バイト
ヘッド 255, セクタ 63, シリンダ 257
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
12.パーティションを作成する
先ほど、fdiskコマンドで出てきた「ディスク /dev/sda」と書かれているところの「/dev/sda」の部分を入れる。(青文字の部分)# fdisk /dev/sda
警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
強く推奨します。 and change display units to
sectors (command 'u').
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本パーティション (1-4)
p
パーティション番号 (1-4): 3
最初 シリンダ (3917-13054, 初期値 3917): Enter
初期値 3917 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (3917-13054, 初期値 13054): Enter
初期値 13054 を使います
コマンド (m でヘルプ): t
パーティション番号 (1-4): 3
16進数コード (L コマンドでコードリスト表示): 8e ← fdiskコマンドの黄文字のとこの値を入れる
領域のシステムタイプを 3 から 8e (Linux LVM) に変更しました
コマンド (m でヘルプ): wq
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。新しいテーブルは
次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に
使えるようになるでしょう
ディスクを同期しています。
13.状態を再び確認
/dev/sda3が追加され、そこに空き容量が割り当てられていることを確認する# fdisk -l
ディスク /dev/sda: 107.4 GB, 107374182400 バイト
ヘッド 255, セクタ 63, シリンダ 13054
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00054ab8
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 1 64 512000 83 Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2 64 3917 30944256 8e Linux LVM
/dev/sda3 3917 13054 73398975 8e Linux LVM
ディスク /dev/mapper/vg_vagrantcentos64-lv_root: 29.6 GB, 29569843200 バイト
ヘッド 255, セクタ 63, シリンダ 3594
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
ディスク /dev/mapper/vg_vagrantcentos64-lv_swap: 2113 MB, 2113929216 バイト
ヘッド 255, セクタ 63, シリンダ 257
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
14.リブートもしくはpartprobeを実行する
今回はrebootで反映させる。# reboot
15.物理ボリュームを作成する
# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
16.既存のボリュームグループ(VG) に新しいパーティションを追加する
# vgextend vg_vagrantcentos64 /dev/sda3
Volume group "vg_vagrantcentos64" successfully extended
17.既存の論理ボリューム(LV) を追加したパーティションの分を拡張する
既存のLV は lvdisplay で確認。「lv_root」が既存で、LSizeが既存のディスク容量# lvdisplay -C
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv_root vg_vagrantcentos64 -wi-ao--- 27.54g
lv_swap vg_vagrantcentos64 -wi-ao--- 1.97g
18.拡張できるサイズを確認する
# vgdisplay
--- Volume group ---
VG Name vg_vagrantcentos64
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 99.50 GiB
PE Size 4.00 MiB
Total PE 25473
Alloc PE / Size 7554 / 29.51 GiB
Free PE / Size 17919 / 70.00 GiB
VG UUID f4eZwV-24wK-49T7-oERF-da3e-cwoW-gPtAdu
19.指定したサイズにディスクを拡張する
[PE Size] * [Free PE] の値が拡張できるサイズとなるので、4MB * 17919 = 71676MiB を拡張する。# lvextend -L +71676MiB /dev/vg_vagrantcentos64/lv_root
Extending logical volume lv_root to 97.54 GiB
Logical volume lv_root successfully resized
20.ファイルシステムを拡張する
ディスク容量が大容量になると時間が掛かる。# resize2fs /dev/vg_vagrantcentos64/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_vagrantcentos64/lv_root is mounted on /; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 7
Performing an on-line resize of /dev/vg_vagrantcentos64/lv_root to 25568256 (4k) blocks.
The filesystem on /dev/vg_vagrantcentos64/lv_root is now 25568256 blocks long.
※CentOS7では「resize2fs」は利用出来ないので、「xfs_growfs」を使う。
# xfs_growfs /dev/vg_vagrantcentos64/lv_root
21.容量が増えていることを確認する
# df -h
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/vg_vagrantcentos64-lv_root
97G 1.8G 90G 2% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot