はじめに
実務にて、macOS + VirtualBox の仮想メディアマネージャーからサイズ拡張を適用したところ「ストレージユニットのハードディスク xxx.vmdk の xx.xx GB から xx.xx GBへのリサイズに失敗しました。」というエラーが発生、それを解決した情報になります。
詳細には「新しいサイズ 26497515520 へのサイズ変更は、メディア ‘xxx.vmdk’ ではまだサポートされていません。(Resizing to new size 26497515520 is not yet supported for medium ‘xxx.vmdk’.)」と表示されています。
環境
- Host OS : macOS Big Sur 11.5.2
- VirtualBox : 6.1.28
- Guest OS : CentOS 7.6.1810
解説
結論から言うと、VirtualBox では .vmdk
のリサイズがサポートされていないので、ファイル形式を .vdi
に変換してからリサイズを行い .vmdk
に戻すことで解決できます。
初めに、ゲスト OS のターミナルから df -h
コマンドでディスクの使用状況を確認しておきましょう。
df -h
私の場合は /dev/mapper/centos-root
の使用率が 99% になっていたので、あと 6 GB ほど容量を拡張して 20 GB にしようと思います。
/dev/mapper/centos-root 14G 14G 217M 99% /
仮想マシンを停止させて、ホスト OS のターミナルから VBoxManage clonehd
コマンドに --format vdi
オプションを追加して実行、.vmdk
から .vdi
のクローンを作成します。
コマンドを実行する前に ホスト OS のストレージの領域を確認してください。元ファイルを複製するので、空き容量を超過する場合はファイルを整理してあげましょう。
また、.vmdk
の読み込み先と .vdi
の書き出し先はご自分の環境に合わせて指定してください。
VBoxManage clonehd "VirtualBox VMs/xxx/xxx-disk001.vmdk" "VirtualBox VMs/xxx/xxx-disk001.vdi" --format vdi
しばらく待つと下記のように終了します。
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: xxx-xxx-xxx-xxx-xxx
ls
コマンドを実行して正常に .vdi
が作成されているか確認します。
ls VirtualBox\ VMs/xxx/
次は VBoxManage modifyhd
コマンドに --resize
オプション指定で実行して .vdi
を 20480 MB(20 GB)にリサイズします。
VBoxManage modifyhd "VirtualBox VMs/xxx/xxx-disk001.vdi" --resize 20480
VBoxManage showhdinfo
コマンドを実行してリサイズが正常に処理されているか確認しましょう。
VBoxManage showhdinfo "VirtualBox VMs/xxx/xxx-disk001.vdi"
Capacity
を見ると拡張されていることがわかります。
UUID: xxx
Parent UUID: base
State: created
Type: normal (base)
Location: /Users/ihara/vagrant/VirtualBox VMs/xxx/xxx-disk001.vdi
Storage format: vdi
Format variant: dynamic default
Capacity: 20480 MBytes
Size on disk: 15491 MBytes
Encryption: disabled
Property: AllocationBlockSize=1048576
次はリサイズ後の .vmd
を VBoxManage clonehd
コマンドを実行して .vmdk
に戻します。
書き出すファイル名はわかりやすいように xxx-disk001_resize.vmdk
としています。また、今回もファイルを複製することになるのでコマンドを実行する前に ホスト OS のストレージの空き容量に気を付けましょう。
VBoxManage clonehd "VirtualBox VMs/xxx/xxx-disk001.vdi" "VirtualBox VMs/xxx/xxx-disk001_resize.vmdk" --format vmdk
ls
コマンドを実行して正常に .vmdk
が作成されているか確認しましょう。
ls VirtualBox\ VMs/xxx/
次は VirtualBox を起動してストレージデバイスに作成した .vmdk
をマウントします。
仮想マシンが正常に起動することを確認しましょう。起動できない場合は、仮想メディアマネージャーでディスクイメージが正常に認識できていない、又はストレージデバイスのハードディスクマウントができていなかったなど確認を行いましょう。
次はゲスト OS のターミナルから fdisk
コマンドを実行して対話的にパーティションの拡張をします。
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
コマンドを実行すると各コマンドの動作を確認することができます。
コマンド (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)
p
コマンドを実行してパーティションテーブルの確認をします。
コマンド (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
ディスク識別子: 0x000bf53e
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 33554431 15727616 8e Linux LVM
d
コマンドを実行してパーティションの削除を行います。削除するパーティション番号はご自身の環境に合わせて指定してください、私の場合はデフォルトの値で問題ないので enter キーを押下しています。
コマンド (m でヘルプ): d
パーティション番号 (1,2, default 2):
Partition 2 is deleted
n
コマンドを実行して新しいパーティションを追加します。パーティションの設定値はご自身の環境に合わせて指定してください、私の場合は全てデフォルトの値で問題ないので enter キーを押下しています。
コマンド (m でヘルプ): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
パーティション番号 (2-4, default 2):
最初 sector (2099200-41943039, 初期値 2099200):
初期値 2099200 を使います
Last sector, +sectors or +size{K,M,G} (2099200-41943039, 初期値 41943039):
初期値 41943039 を使います
Partition 2 of type Linux and of size 19 GiB is set
t
コマンドを実行するとパーティションを Linux LVM などに変更できるが、私は必要ないので変更しません。
w
コマンドを実行して設定を保存します。
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
q
コマンドを実行して終了、設定を反映させる為にゲスト OS を再起動します。
再起動後、ゲスト OS のターミナルにて pvresize
コマンドを実行して物理ボリュームをリサイズします。
pvresize /dev/sda2
次は lvresize
コマンドを実行して論理ボリュームをリサイズします。論理ボリューム名がわからない場合は lvscan
コマンドを実行して確認します。
lvscan
lvextend -l +100%FREE /dev/centos/root
最後に xfs_growfs
コマンドを実行してファイルシステムをリサイズします。centOS 7 のファイルシステムは XFS(eXtents File System)なので resize2fs
コマンドが使えないことに注意しましょう。
xfs_growfs /dev/centos/root
df -h
コマンドを実行して正常にリサイズされていれば完了です。
以上です。
おわりに
VirtualBox が .vmdk
リサイズのサポートもしてくれたら楽なのにね。