Vagrant on Mac上のCeontOS7のディスク容量を後から増やす
以下のような教材を作っている時に、Sparkブンブン回してHDFSでディスク食って大変なことになりました。
【分散型アーキテクチャを試してみる】第2章 〜Apache AmbariHadoop,YARN,Zookeeper,Spark編〜
AmazonEMRとか使えばいいじゃんとか、SparkStandAloneで動かせばいいじゃんと意見もごもっとも。
でも何より大事なのは、知見がないところに進むときには、なるべく同じ環境を想定して構築して、早い段階で痛い目にあってみるってことだと思う。
なんだかんだいって経験値がものをいう。
というわけで、今回はさくっとVagrant上で動かしているCentOS7のディスク容量を後から増やしてみるって内容でやります。
はじめからVagrantBoXのイメージをディスク容量増やしてから使えばよかったじゃんって話だったんだけど、Ansibleで構築してあるとはいえ、ノード3台のHadoopClusterを構築するってのは結構時間かかるので、既存のVMのディスクを増やす方向で対応したいなとおもった次第です。
でははじめましょう。
まずは仮想マシンを止めます
$ vagrant halt
仮想マシンの構成ファイル・ディレクトリに移動
自分の環境ではVagrantfileでマルチ構成にしているので
綺麗なマシン名になっていますが、普通であれば「{仮想マシン名}_1465268965276_63060」のように
数字の羅列がくっついたフォルダになっていると思います。
手元の環境のコマンド結果をほぼそのまま記載しているので
「vagrant-node1」 や 「node1」などは、自分の仮想マシン名などに読み替えてください
$ cd ~/VirtualBox\ VMs/
$ cd vagrant-node1
VMDK形式からVDI形式にでディスクを複製する
VMDK形式ではなくVDI形式のフォーマットであれば、ディスク容量をリサイズ出来るので
VBoxManageコマンドを利用して、VMDK形式の仮想ディスクの複製を作成します。
$ VBoxManage clonehd "box-disk1.vmdk" "clone-disk1.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
複製したVDI形式の仮想ディスクの情報を見てみましょう。
$ VBoxManage showhdinfo clone-disk1.vdi
UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Parent UUID: base
State: created
Type: normal (base)
Location: /Users/foo/VirtualBox VMs/vagrant-node1/clone-disk1.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 10140 MBytes
Size on disk: 1797 MByt
ここではまだ、Capacityという部分でディスク容量が10GBなのが分かりますね。
ディスク容量を増やす
VDI形式の仮想ディスクをリサイズして見ましょう。
ここでは10GBから20GBに変更しています。
$ VBoxManage modifyhd clone-disk1.vdi --resize 20480
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
さきほどと同じコマンドで、VDI形式の仮想ディスクの情報を見てみましょう。
$ VBoxManage showhdinfo clone-disk1.vdi
UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Parent UUID: base
State: created
Type: normal (base)
Location: /Users/foo/VirtualBox VMs/vagrant-node1/clone-disk1.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 20480 MBytes
Size on disk: 1797 MBytes
Encryption: disabled
Capacity部分が増えているのが分かりますね。
VDI形式からVMDK形式に戻す
ここの工程は別に仮想マシンからマウントしている仮想ディスクをVDI形式の仮想ディスクをアタッチしてしまえば要らないのですが、なんか気持ち悪いのでVMDK形式に再度戻しています。
$ VBoxManage clonehd "clone-disk1.vdi" "box-disk2.vmdk" --format vmdk
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vmdk'. UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
仮想ディスクの利用状況を確認する
showvminfoコマンドを使って仮想マシンで使用されている仮想ディスクを確認しましょう。
以下では「vagrant-node1」となっていますが、自分の仮想マシン名に変更してください。
$ VBoxManage showvminfo vagrant-node1| grep ".vmdk"
SATA Controller (0, 0): /Users/foo/VirtualBox VMs/vagrant-node1/box-disk1.vmdk (UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
仮想ディスクとして「box-disk1.vmdk」が使用されているのが分かりますね。
続いて仮想ディスク自体の利用状況も確認しましょう
$ VBoxManage showhdinfo box-disk2.vmdk
UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Parent UUID: base
State: created
Type: normal (base)
Location: /Users/foo/VirtualBox VMs/vagrant-node1/box-disk2.vmdk
Storage format: VMDK
Format variant: dynamic default
Capacity: 20480 MBytes
Size on disk: 1780 MBytes
Encryption: disabled
仮想ディスクを変更する
仮想マシンで元々使っていたbox-disk1.vmdkからbox-disk2.vmdkの仮想ファイルを利用するように変更します。
$ VBoxManage storageattach vagrant-node1 --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium box-disk2.vmdk
仮想ディスクの利用状況を確認する
$ VBoxManage showvminfo vagrant-node1| grep ".vmdk"
SATA Controller (0, 0): /Users/foo/VirtualBox VMs/vagrant-node1/box-disk2.vmdk (UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
box-disk2.vmdkが利用されていることが確認できましたね。
$ VBoxManage showhdinfo box-disk2.vmdk
UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Parent UUID: base
State: created
Type: normal (base)
Location: /Users/foo/VirtualBox VMs/vagrant-node1/box-disk2.vmdk
Storage format: VMDK
Format variant: dynamic default
Capacity: 20480 MBytes
Size on disk: 1780 MBytes
Encryption: disabled
In use by VMs: vagrant-node1 (UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
In use by VMsで仮想マシンが利用していることを確認出来ました。
仮想マシン起動&仮想マシンへの接続
$ vagrant up
$ vagrant ssh
rootユーザーへ変更
[vagrant@node1 ~]$ sudo su -
ハード・ディスクのパーティション確認
[root@node1 ~]# fdisk -l
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 size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000944b9
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20766719 9870336 8e Linux LVM
Disk /dev/mapper/centos-root: 8996 MB, 8996782080 bytes, 17571840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 1065 MB, 1065353216 bytes, 2080768 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
ハード・ディスクのパーティション変更
fdiskコマンドとかはLinux不慣れな人はあまり見たことないかもしれませんが
パーテイション関連コマンドです。対話式で、Comandと聞かれるので、それぞれモードを指定して利用します。以下にコマンド結果をそのまま載せます。
nコマンドを実行をした後にはデフォルトなのでEnterでOKです。
[root@node1 ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
Partition number (3,4, default 3):
First sector (20766720-41943039, default 20766720):
Using default value 20766720
Last sector, +sectors or +size{K,M,G} (20766720-41943039, default 41943039):
Using default value 41943039
Partition 3 of type Linux and of size 10.1 GiB is set
Command (m for help): t
Partition number (1-3, default 3):
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): 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 size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000944b9
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20766719 9870336 8e Linux LVM
/dev/sda3 20766720 41943039 10588160 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
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)
Syncing disks.
仮想マシン再起動
[root@node1 ~]# reboot
物理ボリュームを確認
仮想マシンへ接続
$ vagrant ssh
確認
[vagrant@node1 ~]# sudo su -
[root@node1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size 9.41 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2409
Free PE 10
Allocated PE 2399
PV UUID P0ooC6-nfdy-vZkK-cniC-MG1G-2dIn-t1115F
物理ボリュームを増やす
LVMパーティションを物理ボリュームとして登録
[root@node1 ~]# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
[root@node1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size 9.41 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2409
Free PE 10
Allocated PE 2399
PV UUID P0ooC6-nfdy-vZkK-cniC-MG1G-2dIn-t1115F
"/dev/sda3" is a new physical volume of "10.10 GiB"
--- NEW Physical volume ---
PV Name /dev/sda3
VG Name
PV Size 10.10 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID v9JZTG-wI0T-UP8O-3grT-YvgH-Uone-gg3Go1
既存のLVMパーティションを拡張
[root@node1 ~]# vgextend centos /dev/sda3
Volume group "centos" successfully extended
論理ボリュームに未使用領域を追加
[root@node1 ~]# lvextend -l +100%FREE /dev/mapper/centos-root
Size of logical volume centos/root changed from 8.38 GiB (2145 extents) to 18.51 GiB (4739 extents).
Logical volume root successfully resized.
XFSシステムの領域を拡張
[root@node1 ~]# xfs_growfs /
meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=549120 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=2196480, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
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 2196480 to 4852736
ディスク容量の確認
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 19G 1.8G 17G 10% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 8.4M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda1 497M 106M 391M 22% /boot
tmpfs 285M 0 285M 0% /run/user/1001
不必要な仮想ディスクの削除
仮想マシン停止
$ vagrant halt
仮想マシンの構成ファイル・ディレクトリ移動
$ cd /Users/foo/VirtualBox VMs/vagrant-node1
確認
$ ls
Logs/ box-disk2.vmdk vagrant-node1-1.12-macosx.vbox vagrant-node1.vbox-prev
box-disk1.vmdk clone-disk1.vdi vagrant-node1.vbox
$ VBoxManage list hdds
box-disk1.vmdk
が表示されている
Vagrant管理下から解除
$ VBoxManage closemedium disk box-disk1.vmdk
$ VBoxManage list hdds
box-disk1.vmdk
が表示されているいない事を確認
仮想ディスクを削除
$ rm -rf box-disk1.vmdk
$ rm -rf clone-disk1.vdi