VirtualBox Vagrantの容量の割当増加(拡張)と圧縮手順のまとめ[Windows]

Windows VirtualBox Vagrantの仮想環境で容量が足りなくなってきましたので増やしたいと思います。また、古いファイルは削除しても減らなく圧縮する必要があるようなので、合わせてやりたいと思います。

  • Vagrantの容量の割当増加
  • Vagrantの古いファイルの圧縮(消すだけでは減らない)
スポンサーリンク

空き容量をzero詰めする

vagrant内で以下コマンド

[vagrant@localhost ~]$ dd if=/dev/zero of=zero bs=4k; \rm zero

vagranを停止する

$ vagrant halt

VirtualBoxの構成ファイル(.vmdk)をクローンして.vdi形式にする

コマンドプロンプトで以下フォルダに移動(windowsで以下フォルダを開き、shift右クリックで「コマンドウィンドウをここで開く」(Win8.1)でも可能)

C:\Program Files\Oracle\VirtualBox

コマンドプロンプトで以下を実行

C:\Program Files\Oracle\VirtualBox> VBoxManage.exe clonehd "C:\ユーザ\VirtualBox VMs\対象フォルダ\対象ファイル.vmdk" "C:\ユーザ\VirtualBox VMs\対象フォルダ\clone.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'vdi'. UUID: xxx-xxx-xxx-xxx-xxx

上記のUUIDを控えておきます。.vdiのUUIDです。

.vdiファイルを圧縮する

先ほど控えた.vdiのUUIDを以下コマンドで指定して圧縮をかけます。

C:\Program Files\Oracle\VirtualBox> VBoxManage.exe modifyhd xxx-xxx-xxx-xxx-xxx --compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

.vdiファイルの割当容量を増やす

以下コマンドで実行します。(ex. 100GBに増やす場合、1024MB*100=102400)

C:\Program Files\Oracle\VirtualBox> VBoxManage.exe modifyhd "C:\ユーザ\VirtualBox VMs\対象フォルダ\clone.vdi" --resize 102400
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

.vdiを.vmdkに逆変換する

元のファイル名とは変えて(ex. ファイル名最後尾に100gbと付加)以下コマンドでクローンし直します。

C:\Program Files\Oracle\VirtualBox> VBoxManage.exe clonehd "C:\ユーザ\VirtualBox VMs\対象フォルダ\clone.vdi" "C:\ユーザ\VirtualBox VMs\対象フォルダ\対象ファイル_100gb.vmdk" --format vmdk
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vmdk'. UUID: yyy-yyy-yyy-yyy-yyy
[/php]

一時的に使用したcloneのUUIDを管理対象外にする

以下コマンドでclone.vdiのUUIDを確認します。

C:\Program Files\Oracle\VirtualBox> VBoxManage.exe list hdds

物理ファイルは最後に削除します。

以下コマンドでclone.vdiのUUIDを管理対象外にします。

C:\Program Files\Oracle\VirtualBox> VBoxManage.exe closemedium disk xxx-xxx-xxx-xxx-xxx

切り替え作業

VirtualBoxの[設定]>[ストレージ]で変更前の.vmdkファイルから変更後の.vmdkに指定しなおします。-ボタンと+ボタン

パーテーション設定・ファイルシステム拡張

$ vagrant upしてrootユーザになって作業します。

[root@localhost ~]# 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
ディスク識別子: 0x0004bcca

デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 1 64 512000 83 Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2 64 5222 41430016 8e Linux LVM

ディスク /dev/mapper/VolGroup-lv_root: 41.4 GB, 41448112128 バイト
ヘッド 255, セクタ 63, シリンダ 5039
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000


ディスク /dev/mapper/VolGroup-lv_swap: 973 MB, 973078528 バイト
ヘッド 255, セクタ 63, シリンダ 118
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
[root@localhost ~]# fdisk /dev/sda

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
 強く推奨します。 and change display units to
 sectors (command 'u').

コマンド (m でヘルプ): n
コマンドアクション
 e 拡張
 p 基本パーティション (1-4)
p
パーティション番号 (1-4): 3
最初 シリンダ (5222-13054, 初期値 5222):
初期値 5222 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (5222-13054, 初期値 13054):
初期値 13054 を使います

コマンド (m でヘルプ): t
パーティション番号 (1-4): 3
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 3 から 8e (Linux LVM) に変更しました

コマンド (m でヘルプ): wq
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。

警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。新しいテーブルは
次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に
使えるようになるでしょう
ディスクを同期しています。
[root@localhost ~]# 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
ディスク識別子: 0x0004bcca

デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 1 64 512000 83 Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2 64 5222 41430016 8e Linux LVM
/dev/sda3 5222 13054 62913215 8e Linux LVM

ディスク /dev/mapper/VolGroup-lv_root: 41.4 GB, 41448112128 バイト
ヘッド 255, セクタ 63, シリンダ 5039
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000


ディスク /dev/mapper/VolGroup-lv_swap: 973 MB, 973078528 バイト
ヘッド 255, セクタ 63, シリンダ 118
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000
[root@localhost ~]# reboot

Broadcast message from vagrant@localhost.localdomain
 (/dev/pts/0) at 18:04 ...

The system is going down for reboot NOW!
[root@localhost ~]# pvcreate /dev/sda3
 Physical volume "/dev/sda3" successfully created
[root@localhost ~]# vgextend VolGroup /dev/sda3
 Volume group "VolGroup" successfully extended
[root@localhost ~]# lvdisplay -C
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 lv_root VolGroup -wi-ao---- 38.60g
 lv_swap VolGroup -wi-ao---- 928.00m
[root@localhost ~]# vgdisplay
 --- Volume group ---
 VG Name VolGroup
 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 10114 / 39.51 GiB
 Free PE / Size 15359 / 60.00 GiB
 VG UUID zzz-zzz-zzz-zzz-zzz

[PE Size]*[Free PE]=4MB*15359=61436MiB を拡張する。

[root@localhost ~]# lvextend -L +61436MiB /dev/VolGroup/lv_root
 Size of logical volume VolGroup/lv_root changed from 38.60 GiB (9882 extents) to 98.60 GiB (25241 extents).
 Logical volume lv_root successfully resized

※ここで以下のエラーになる場合もありましたのでリンク貼っておきます。

http://normalblog.net/system/vagrant/vagrantlogical-volume-lv_root-not-found-in-volume-group-volgroup/

[root@localhost ~]# resize2fs /dev/VolGroup/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 3, new_desc_blocks = 7
Performing an on-line resize of /dev/VolGroup/lv_root to 25846784 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 25846784 blocks long.

確認

以下コマンドで約100GBになった事を確認

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
 97G 1.6G 91G 2% /
tmpfs 230M 0 230M 0% /dev/shm
/dev/sda1 477M 56M 396M 13% /boot

色々動かしてみて移行が問題ないようでしたら物理ファイルの削除をします。

これで、拡張は出来たのですが、

圧縮については効果が見えませんでした。何故でしょう。また追記するかもです。

追記です。拡張は出来たけど圧縮されなかったのはMySQLのログファイルが原因でした。

以下記事に記録しました。

http://normalblog.net/system/vagrant/binarylog/

参考サイト様の通りにやったら出来ました。ありがとうございます!

http://gyagya1111.blogspot.jp/2015/06/vagrantbox.html

http://vboxmania.net/content/%E4%BB%AE%E6%83%B3%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E5%9C%A7%E7%B8%AE

http://www.skyarch.net/blog/?p=1096