VirtualBox: CentOS 仮想ディスクの容量拡張について
VirtualBox で立てた Docker ホストの中でコンテナを作り続けていたら、いつしか仮想ディスクの容量が
full になってしまっていた。
VirtualBox のゲストOSで使っているストレージ容量を増やす手順をメモしておく。
環境
- ホストOS: Mac OS X 10.9 (Mavericks)
- VirtualBox: 4.3.6
- ゲストOS: CentOS 6.5
こちらの Dockerfile で構築した CentOS (ベースは opscode 提供イメージ) のディスクを
40GB から 80GB へ拡張する。
尚、物理ディスクの空き容量は十分にあるものとする。
手順
こちらのブログポストの内容に従って作業。
(1) 仮想OS の停止
$ vagrant halt
(2) フォーマット変換
ストレージが VMDK 形式の場合、VBoxManage コマンドで直接その容量を変えることはできない。(※1)
いったん VDI 形式のクローンを作ってから、その容量を拡張する。
以下は packer-centos-6.5-x86_64-disk1 というストレージの場合の例。
$ cd ~/VirtualBox\ VMs/ゲストOSの名前 $ VBoxManage clonehd packer-centos-6.5-x86_64-disk1.vmdk packer-centos-6.5-x86_64-disk1.vdi --format VDI 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone hard disk created in format 'VDI'. UUID: 32e9d2f1-d30c-4dfc-84dd-24ba96e3be31 $ VBoxManage modifyhd packer-centos-6.5-x86_64-disk1.vdi --resize 81920 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
clonehd コマンドの所要時間は実ディスクの使用量やI/O性能に依存。数十分かかる場合もある。
変換し終わったらVMDK形式のファイルは削除してよいが、バックアップとして暫く残しておくことをお勧めする。
(3) ストレージ差し替え
VirtualBox の GUI 上で作業した。
設定画面を開いて、IDE Controller 配下の Primary Master ディスクを VDI 形式のものに付け替え。
(4) 仮想OS の起動
$ Vagrantfileのあるディレクトリ $ vagrant up $ vagrant ssh
fdisk コマンドで 80GB (+α) が認識されていることを確認。
$ sudo fdisk -l |head -20 ディスク /dev/sda: 85.9 GB, 85899345920 バイト ヘッド 255, セクタ 63, シリンダ 10443 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x0004a286 デバイス ブート 始点 終点 ブロック 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
(5) パーティションの拡張
fdisk または parted で実行。以下は parted の例。
最初に unit cyl でシリンダ単位で操作するようにしている。ハイライトした行が parted 内での入力。
$ sudo parted (parted) unit cyl (parted) p モデル: ATA VBOX HARDDISK (scsi) ディスク /dev/sda: 10443cyl セクタサイズ (論理/物理): 512B/512B BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63. 1シリンダは 8225kB。 パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 0cyl 63cyl 63cyl primary ext4 boot 2 63cyl 5221cyl 5157cyl primary lvm (parted) rm 2 警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です). As a result, it may not reflect all of your changes until after reboot. (parted) p モデル: ATA VBOX HARDDISK (scsi) ディスク /dev/sda: 10443cyl セクタサイズ (論理/物理): 512B/512B BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63. 1シリンダは 8225kB。 パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 0cyl 63cyl 63cyl primary ext4 boot (parted) mkpart primary 63 10443 警告: 63cyl から 10443cyl までのパーティションを指定されました。 可能な中で最も近いものは 63cyl から 10443cyl になります。 それでもかまいませんか? はい(Y)/Yes/いいえ(N)/No? y 警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です). As a result, it may not reflect all of your changes until after reboot. (parted) p モデル: ATA VBOX HARDDISK (scsi) ディスク /dev/sda: 10443cyl セクタサイズ (論理/物理): 512B/512B BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63. 1シリンダは 8225kB。 パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 0cyl 63cyl 63cyl primary ext4 boot 2 63cyl 10443cyl 10379cyl primary (parted) set 2 lvm on 警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です). As a result, it may not reflect all of your changes until after reboot. (parted) p モデル: ATA VBOX HARDDISK (scsi) ディスク /dev/sda: 10443cyl セクタサイズ (論理/物理): 512B/512B BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63. 1シリンダは 8225kB。 パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 0cyl 63cyl 63cyl primary ext4 boot 2 63cyl 10443cyl 10379cyl primary lvm (parted) q 通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
設定が終わったら、ssh から抜けてリブート(vagrant halt; vagrant up)する。
(6) LVM 物理ボリューム (physical volume) サイズの拡張
pvscan で確認、pvresize で変更。
$ sudo pvscan PV /dev/sda2 VG VolGroup lvm2 [39.51 GiB / 0 free] Total: 1 [39.51 GiB] / in use: 1 [39.51 GiB] / in no VG: 0 [0 ] $ sudo pvresize /dev/sda2 Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized $ sudo pvscan PV /dev/sda2 VG VolGroup lvm2 [79.51 GiB / 40.00 GiB free] Total: 1 [79.51 GiB] / in use: 1 [79.51 GiB] / in no VG: 0 [0 ]
vgdisplay コマンドで状態を確認。
$ sudo vgdisplay --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 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 1 Act PV 1 VG Size 79.51 GiB PE Size 4.00 MiB Total PE 20354 Alloc PE / Size 10114 / 39.51 GiB Free PE / Size 10240 / 40.00 GiB VG UUID Iv3nnF-GabP-gmv5-sU9W-iGtb-y5yg-9MA68g
Total PE 20354 に対して、Alloc PE が 10114 であることがわかった。
(7) LVM 論理ボリューム (logical volume) サイズの拡張
lvdisplay で確認、lvextend で変更。
空き領域を全て使用する場合には -l +100%FREE オプションが便利だ。
$ sudo lvdisplay --- Logical volume --- LV Path /dev/VolGroup/lv_root (略) LV Size 38.60 GiB (略) $ sudo lvextend -l +100%FREE /dev/VolGroup/lv_root Extending logical volume lv_root to 78.60 GiB Logical volume lv_root successfully resized $ sudo lvdisplay --- Logical volume --- LV Path /dev/VolGroup/lv_root (略) LV Size 78.60 GiB (略)
(8) ファイルシステムのサイズ拡張
最後に、resize2fs で対象のファイルシステムのサイズを変更。
$ sudo 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 = 5 Performing an on-line resize of /dev/VolGroup/lv_root to 20604928 (4k) blocks. The filesystem on /dev/VolGroup/lv_root is now 20604928 blocks long. $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 78G 38G 36G 52% /
無事、ファイルシステム上で使えるディスク容量を 40GB 増やすことに成功した。
※1 現バージョンでは対応していないフォーマットだと表示される。
$ VBoxManage modifyhd packer-centos-6.5-x86_64-disk1.vmdk --resize 81920 0%... Progress state: VBOX_E_NOT_SUPPORTED VBoxManage: error: Resize hard disk operation for this format is not implemented yet!
0 件のコメント:
コメントを投稿