Vagrant (VirtualBox) のストレージ容量を拡張する (SCSI)

前提

  • Windows 7
  • SCSI

Vagrantfile が何らかの理由で編集できない場合の対処方法。
編集できる場合は vagrant-disksize を使った方が圧倒的に楽。

手順

1. VirtualBox の VM があるディレクトリに移動

cd C:\Users\%UserProfile%\VirtualBox VMs\vagrantd_default_1502348908788_78497\

2. vdi 形式でクローン

VBoxManage clonehd "box-disk002.vmdk" "clone-disk002.vdi" --format vdi

3. クローンした vdi のストレージサイズを確認

VBoxManage showhdinfo clone-disk002.vdi
	Capacity:       8192 MBytes

4. サイズを MB 単位で指定して変更

VBoxManage modifyhd clone-disk002.vdi --resize 20480

5. 再度ストレージサイズを確認

VBoxManage showhdinfo clone-disk002.vdi
	Capacity:       20480 MBytes

6. vmdk 形式に戻す

VBoxManage clonehd "clone-disk002.vdi" "box-disk003.vmdk" --format vmdk

7. 設定されている仮想ディスクの情報を確認

VBoxManage showvminfo vagrantd_default_1502348908788_78497
	SCSI (0, 0): C:\Users\%UserProfile%\VirtualBox VMs\vagrantd_default_1502348908788_78497\box-disk002.vmdk (UUID: f3a1ee32-bcfe-4987-aec4-cd73d9f72261)

8. 仮想ディスク差し替え

VBoxManage storageattach vagrantd_default_1502348908788_78497 --storagectl "SCSI" --port 0 --device 0 --type hdd --medium box-disk003.vmdk

9. 仮想ディスクが差し変わっている事を確認

VBoxManage showvminfo vagrantd_default_1502348908788_78497
	SCSI (0, 0): C:\Users\%UserProfile%\VirtualBox VMs\vagrantd_default_1502348908788_78497\box-disk003.vmdk (UUID: 47040d0c-1235-41ba-9b49-23217b539059)

10. Vagrant を起動してディスクサイズが変更されていることを確認する

vagrant up
df -h

11. 生成した vdi と変更前の vmdk を管理下から外して削除

VBoxManage closemedium clone-disk002.vdi
VBoxManage closemedium box-disk002.vmdk
del clone-disk002.vdi
del box-disk002.vmdk

12. ログインして root に切り替えて fdisk -l で現在の状態を確認

# fdisk -l
	デバイス ブート      始点        終点     ブロック   Id  システム
	/dev/sda1   *        2048     2099199     1048576   83  Linux
	/dev/sda2         2099200    16777215     7339008   8e  Linux LVM

13. /dev/sda3 (基本パーティション 3) を作成

# fdisk /dev/sda
	コマンド (m でヘルプ): n
	Partition type:
	   p   primary (2 primary, 0 extended, 2 free)
	   e   extended
	Select (default p): p
	パーティション番号 (3,4, default 3): 3
	最初 sector (16777216-41943039, 初期値 16777216):
	初期値 16777216 を使います
	Last sector, +sectors or +size{K,M,G} (16777216-41943039, 初期値 41943039):
	初期値 41943039 を使います
	Partition 3 of type Linux and of size 12 GiB is set

14. /dev/sda3 を Linux LVM に変更

	コマンド (m でヘルプ): t
	パーティション番号 (1-3, default 3): 3
	Hex code (type L to list all codes): 8e
	Changed type of partition 'Linux' to 'Linux LVM'
	
	コマンド (m でヘルプ): p
	
	Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
	Units = sectors of 1 * 512 = 512 bytes
	Sector size (logical/physical): 512 bytes / 512 bytes
	I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
	Disk label type: dos
	ディスク識別子: 0x000d6b77
	
	デバイス ブート      始点        終点     ブロック   Id  システム
	/dev/sda1   *        2048     2099199     1048576   83  Linux
	/dev/sda2         2099200    16777215     7339008   8e  Linux LVM
	/dev/sda3        16777216    41943039    12582912   8e  Linux LVM
	
	コマンド (m でヘルプ): w
	パーティションテーブルは変更されました!
	
	ioctl() を呼び出してパーティションテーブルを再読込みします。
	
	WARNING: Re-reading the partition table failed with error 16: デバイスもしくはリソースがビジー状態です.
	The kernel still uses the old table. The new table will be used at
	the next reboot or after you run partprobe(8) or kpartx(8)
	ディスクを同期しています。

15. シャットダウンして再度 vagrant up

vagrant up

16. /dev/sda3 を VolumeGroup (cl) に加える

# pvcreate /dev/sda3
# pvdisplay
	--- Physical volume ---
	PV Name               /dev/sda2
	VG Name               cl
	PV Size               7.00 GiB / not usable 3.00 MiB
	Allocatable           yes (but full)
	PE Size               4.00 MiB
	Total PE              1791
	Free PE               0
	Allocated PE          1791
	PV UUID               9bdX0L-5Pu0-8pZF-DRPq-WqTV-fswm-75Jed5
>
	"/dev/sda3" is a new physical volume of "12.00 GiB"
	--- NEW Physical volume ---
	PV Name               /dev/sda3
	VG Name
	PV Size               12.00 GiB
	Allocatable           NO
	PE Size               0
	Total PE              0
	Free PE               0
	Allocated PE          0
	PV UUID               Ql8OI1-9lf6-Feze-8AJU-RjK3-popX-sdWxSz

# vgextend cl /dev/sda3
	Volume group "cl" successfully extended

17. ルートファイルシステムを提供している論理ボリュームのデバイス名を確認

# df
	ファイルシス        1K-ブロック    使用  使用可 使用% マウント位置
	/dev/mapper/cl-root     6486016 5325048 1160968   83% /

18. /dev/mapper/cl-root のサイズを拡張

# lvextend -l +100%FREE /dev/mapper/cl-root

↓ pvcreate 分のメッセージ

	New size (1586 extents) matches existing size (1586 extents).

↓ vgextend 分のメッセージ

	Size of logical volume cl/root changed from 6.20 GiB (1586 extents) to 18.19 GiB (4657 extents).
	Logical volume cl/root successfully resized.

19. xfs ファイルシステムとしては拡張されていないことを確認

# df -h

20. xfs ファイルシステムを拡張

# xfs_growfs /
	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 4768768