VirtualBox のvmdkのハードディスク容量を増やす(CentOS 7)

何度もリトライしてSSDの寿命を大幅に縮めてしまった。
Macで確認。




サイズ変更できるようにvmdkファイルをvdi形式でcloneを作成する



以下コマンド

対象の仮想マシンxxxx.vmdkがあるディレクトリへ移動。
パスはVirtualBoxマネージャなどから確認できる。

cd "/Users/[username]/VirtualBox VMs/centos7"

vdi形式でclone.
仮想マシンは終了しておくこと。

VBoxManage clonehd centos-vm-disk2.vmdk cloned.vdi --format vdi

Windowsの場合VBoxManageの使い方は恐らく以下になる。
"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd centos-vm-disk2.vmdk cloned.vdi --format vdi

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...
Progress state: NS_ERROR_INVALID_ARG
VBoxManage: error: Failed to clone medium
VBoxManage: error: Cannot register the hard disk '/Users/xxxx/VirtualBox VMs/xxxxx/cloned.vdi' {8e416fb0-7260-4573-b264-xxxxxx} because a hard disk '/Users/xxxx/VirtualBox VMs/xxxxx/cloned.vdi' with UUID {7fb368fe-1c1f-44e8-b4ba-xxxxx} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox
VBoxManage: error: Context: "RTEXITCODE handleCloneMedium(HandlerArg *)" at line 1023 of file VBoxManageDisk.cpp

複数回実行するとエラーになる場合がある。クローン先のファイル名を変えると改善する。
他にもフルパスで指定したりすると行った対処法がある。



VDIをリサイズする



vdiの容量を拡張。MB単位で指定する(10G=10240, 30G=30960)
VBoxManage modifyhd cloned.vdi --resize 30960

vmdk形式に戻す。
ここまででかなり容量を取るので注意。
VBoxManage clonehd cloned2.vdi centos-vm-disk3.vmdk --format vmdk

VirtualBox マネージャ → 設定 → ストレージから拡張後のvmdkファイルを指定する(右クリック→割り当てを除去→ハードディスクを追加)


起動してみて動作するか確認する。

ここまでで容量は増えているがLinux上から確認すると拡張した部分が割り当てられていない。



拡張した部分を割り当てる




VM上で作業が必要

> su -
[root@localhost ~]# 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.


コマンド (m でヘルプ): m
コマンドの動作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

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

コマンド (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 でヘルプ): 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)
ディスクを同期しています。


再起動
[root@localhost ~]# reboot
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.
Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.
(base) MacBook-Pro:php7 shinichiyamada$ vagrant ssh
ssh_exchange_identification: read: Connection reset by peer
(base) MacBook-Pro:php7 shinichiyamada$ vagrant ssh
Last login: Mon Oct 7 05:05:27 2019 from 10.0.2.2

作業前に容量チェック
[vagrant@localhost ~]$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/centos-root 19G 8.0G 305M 97% /
devtmpfs 299M 0 299M 0% /dev
tmpfs 308M 8.0K 308M 1% /dev/shm
tmpfs 308M 4.4M 304M 2% /run
tmpfs 308M 0 308M 0% /sys/fs/cgroup
/dev/sda1 497M 164M 334M 33% /boot
tmpfs 62M 0 62M 0% /run/user/1000

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  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               9.27 GiB
  PE Size               4.00 MiB
  Total PE              2374
  Alloc PE / Size       2364 / 9.23 GiB
  Free  PE / Size       10 / 40.00 MiB
  VG UUID               cpEmYK-XFew-6ZWT-GEeY-yEou-0vLq-OJiD08
 

ボリュームグループに登録。
作業したパーティション番号が3の場合sda3を指定する。
centos7からボリュームグループ名がVolGroupからcentosに変わっているようだ。

[root@localhost ~]# vgextend centos /dev/sda3
Physical volume "/dev/sda3" successfully created
Volume group "centos" successfully extended

successfullyと表示されたらOK.


[root@localhost ~]# lvextend -l +100%FREE /dev/mapper/centos-root


centos7ではresize2fs の代わりにxfs_growfs を使用する

[root@localhost ~]# xfs_growfs /dev/mapper/centos-root 
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=541184 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=2164736, 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 2164736 to 4856832

[root@localhost ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/centos-root 29G 3.9G 25G 14% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 8.0K 1.4G 1% /dev/shm
tmpfs 1.4G 8.4M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda1 497M 164M 334M 33% /boot
tmpfs 285M 0 285M 0% /run/user/1000



動作が確認できたら元のvmdkとvdiは不要なので削除する



参考


https://knooto.info/virtualbox-centos69-modifyhd/
https://qiita.com/fetaro/items/d7dc74262633ba474bc8
https://forums.virtualbox.org/viewtopic.php?p=271759


2020年1月29日水曜日