仮想ディスクの縮小するは、解放する(圧縮する)の間違いである場合があります。
※仮想ディスクを解放する手順のみ確認したい方は、本サイトの下記リンクへ
例えば
■VirtualBoxの場合
# VBoxManage.exe modifyhd [仮想ディスクのuuid] --compact
■VMwareの場合
# vmkfstools -K [仮想サーバ名].vmdk
「上記のコマンドを実行して縮小する」とよく記載がありますが、こちらは、割当てた仮想ディスクの容量を縮小するわけではありません。
すなわち
■VirtualBoxの場合
「仮想サーバ名.vdi」ファイルを3Gで設定していた場合、このファイルが1Gに変更されるわけではありません。
■VMwareの場合
「仮想サーバ名.vmdk」ファイルを3Gで設定していた場合、このファイルが1Gに変更されるわけではありません。
今回は、「コマンド実行での縮小(仮想ディスクをコマンド実行して縮小する)」と「仮想ディスク割当容量の縮小(仮想ディスクの割当てた容量を縮小する)」の違いと縮小手順について解説します。
- 1.前提条件
- 2.VirtualBoxから見た仮想サーバへ新規割当てした直後の仮想ディスクの使用容量
- 3.物理ディスクから見た新規割当てした仮想ディスクの使用容量
- 4.仮想サーバ上でフォーマット(初期化)した直後の仮想ディスクの使用容量
- 5.仮想サーバ上で仮想ディスクにファイルを保存(ディスクを利用)
- 6.VirtualBoxから見た仮想ディスクを利用した直後の使用容量
- 7.物理ディスクから見た仮想ディスクの利用直後の使用容量
- 8.仮想サーバ上で仮想ディスクに保存したファイルを削除(空き容量を増やす)
- 9.【コマンド実行前】物理ディスクとVirtualBoxから見た仮想ディスクファイルの使用容量が減っていない
- 10.【コマンド実行中】「コマンド実行での縮小」を実施
- 11.【コマンド実行後】仮想ディスクのファイルサイズが小さくなり物理ディスクの空き容量が増加
「コマンド実行での縮小」と「仮想ディスク割当容量の縮小」の違いを解説
この異なる2つの仮想ディスクの縮小を同義語として利用するケースがあるので違いを整理します。
ケース1は、仮想ディスクの解放(圧縮)が「コマンド実行での縮小」
ケース2は、仮想ディスクの縮小が「仮想ディスク割当容量の縮小」
と表現します。
ケース1は、縮小ではなく解放(圧縮)という表現が適切で、ケース2が実際に縮小したことになり、これらをまとめて縮小と扱う場合があるので、次の図解で解説します。
「コマンド実行での縮小」と「仮想ディスク割当容量の縮小」の違いを比較
「コマンド実行での縮小」
- 仮想ディスクの割当て容量は減らない
- 物理ディスクの空き容量は「コマンド実行での縮小」で増える
※シンプロビジョニング - 仮想ディスクを利用するサーバは、縮小した分のディスク容量を再度利用できる
「仮想ディスク割当容量の縮小」
- 仮想ディスクの割当て容量は減る
- 物理ディスクの空き容量は増える
- 仮想ディスクを利用するサーバは、割当て容量を減らしたので縮小した分のディスク容量を利用できない
「コマンド実行での縮小」の手順
- この作業では、仮想ディスクの割当て容量は縮小されません。
- 仮想ディスクを利用するサーバがファイルを作成して増えた容量を削除して空き容量を増やしても物理ディスクの空き容量が増えないことを確認します。
- 解放(圧縮)作業を実施することで物理ディスクの空き容量が増えることを確認します。
仮想ディスクの使用容量の変化を確認しながら縮小(解放)手順を解説します。
実際の手順だけを確認したい場合は
「10.【コマンド実行中】「コマンド実行での縮小」を実施」へ
1.前提条件
- VirtualBoxにて実演して手順を確認します。
- 対象の仮想ディスクはシンプロビジョニングで作成されていることが前提です。 VirtualBoxでは、仮想ディスクの新規作成で割当て容量を指定する時に「可変サイズ」を選択する。
2.VirtualBoxから見た仮想サーバへ新規割当てした直後の仮想ディスクの使用容量
- 仮想サーバ(rhel84efi_clone3)に「rhel84efi_clone3_1.vdi」の仮想ディスクを追加
- 「rhel84efi_clone3_1.vdi」に「3GB」の容量を割当て
VirtualBoxで、新規作成した時点での「rhel84efi_clone3_1.vdi」の実際のサイズ(使用容量)は「2MB」
3.物理ディスクから見た新規割当てした仮想ディスクの使用容量
- VirtualBox上で作成した仮想ディスク(rhel84efi_clone3_1.vdi)を物理ディスク上で確認
- 「rhel84efi_clone3_1.vdi」ファイルの使用容量は「約9MB」
※VirtualBoxの起動タイミングで使用容量の反映が遅く、物理ディスクと異なって見える場合があります。気にする必要はありません - 「rhel84efi_clone3_1.vdi」を利用する仮想サーバのパスを確認
- 「rhel84efi_clone3_1.vdi」を利用する仮想サーバの総使用容量は「約2.25GB」
4.仮想サーバ上でフォーマット(初期化)した直後の仮想ディスクの使用容量
- 仮想ディスク(rhel84efi_clone3_1.vdi)が仮想サーバに「/dev/sdb」で追加されていることを確認
- 仮想ディスク(rhel84efi_clone3_1.vdi)をLVMで初期化
- 仮想ディスク(rhel84efi_clone3_1.vdi)が「3G」の容量で「/lv-data」としてマウント
5.仮想サーバ上で仮想ディスクにファイルを保存(ディスクを利用)
- 仮想ディスク(rhel84efi_clone3_1.vdi)を「3G」のうち「2.2G」を利用
- 仮想ディスク(rhel84efi_clone3_1.vdi)の利用状況
※「2.2G」使用しているファイルの内訳
6.VirtualBoxから見た仮想ディスクを利用した直後の使用容量
- 仮想サーバの「rhel84efi_clone3_1.vdi」の仮想ディスクを選択
- 「rhel84efi_clone3_1.vdi」の実際のサイズ(使用量)が「2MB」から「2.32GB」へ増加
7.物理ディスクから見た仮想ディスクの利用直後の使用容量
- VirtualBox上で作成した仮想ディスク(rhel84efi_clone3_1.vdi)を物理ディスク上で確認
- 「rhel84efi_clone3_1.vdi」ファイルの使用容量は「約9MB」から「約2.32GB」に増加
※仮想サーバ上でファイルを保存したことで容量使用量が増加 - 「rhel84efi_clone3_1.vdi」を利用する仮想サーバのパスを確認
- 「rhel84efi_clone3_1.vdi」を利用する仮想サーバの総使用容量は「約2.25GB」から「4.57GB」に増加
※仮想ディスク(rhel84efi_clone3_1.vdi)が使用容量が増加したことで全体の使用容量が当然のことながら増加
8.仮想サーバ上で仮想ディスクに保存したファイルを削除(空き容量を増やす)
- 仮想サーバ上で仮想ディスク(rhel84efi_clone3_1.vdi)を「2.2GB」を使用
※使用率73% - 仮想ディスク(rhel84efi_clone3_1.vdi)の「/lv-data」に保存されているファイルを削除
- 仮想サーバ上で仮想ディスク(rhel84efi_clone3_1.vdi)の使用が「54MB」に削減
※使用率2%
9.【コマンド実行前】物理ディスクとVirtualBoxから見た仮想ディスクファイルの使用容量が減っていない
※「8.」で仮想サーバ上の空き容量を増やしても「7.」と変わらないことを確認
- 仮想サーバ上で空き容量を増やしたが直後の仮想ディスク(rhel84efi_clone3_1.vdi)を物理ディスク上で確認
- 「rhel84efi_clone3_1.vdi」ファイルの使用容量は「約2.32GB」と変化なし
※仮想サーバ上でファイルを削除しても使用容量に変化なし - 「rhel84efi_clone3_1.vdi」を利用する仮想サーバのパスを確認
- 「rhel84efi_clone3_1.vdi」を利用する仮想サーバの総使用容量も「4.57GB」と変化なし
※仮想ディスク(rhel84efi_clone3_1.vdi)の使用容量に減少がみられないので当然のことながら使用容量にも変化なし - VirtualBox上から仮想ディスク(rhel84efi_clone3_1.vdi)の使用容量を確認しても「約2.32GB」と使用容量が減っていないことを確認
10.【コマンド実行中】「コマンド実行での縮小」を実施
これから解説する作業によって、一度増えた仮想ディスク(rhel84efi_clone3_1.vdi)のファイルサイズを小さくします。
※このリンクの「コマンド実行での縮小」の図解を参照
当然のことながら、物理ディスクの空き容量が増えます。
VirtualBoxで仮想ディスク(rhel84efi_clone3_1.vdi)に割当てた容量(3G)を減らすわけではないので、仮想サーバ上では、仮想ディスク(rhel84efi_clone3_1.vdi)を3Gまで利用可能です。
10-1:仮想サーバで実施
cd /lv-data;pwd
->ファイルサイズを小さくしたい(解放したい)仮想ディスク(rhel84efi_clone3_1.vdi)のマウントポイント「/lv-data」へ移動
dd if=/dev/zero of=zero.txt bk=4k;rm -f zero.txt
->「/lv-data」の空き容量部分を「/dev/zero」で整形する
※空き容量部分のディスク領域を「0(ゼロ)」埋めしてクリアーにする
※一瞬、「/lv-data」の使用量は、「100%」になるので、ディスクを利用していないサーバが停止できるタイミングで実施
shutdown -h now
->停止しても問題ないか?確認してからサーバを停止
10-2:VirtualBox導入端末(Windows)で実施
※Windows PowerShellのプロンプトを起動
※仮想サーバは停止した状態で実施
すなわち、仮想ディスク(rhel84efi_clone3_1.vdi)は利用していない状態で実施
cd 'C:\Program Files\Oracle\VirtualBox\'
->BoxManage.exeが保存されているディレクトリへ移動
.\VBoxManage.exe modifymedium --compact C:\work\VirualBoxVMs\rhel84efi_clone3\rhel84efi_clone3_1.vdi
->仮想ディスク(rhel84efi_clone3_1.vdi)のファイル解放(圧縮)する
- VirtualBoxがインストールされたディレクトリへ移動
- 仮想ディスク(rhel84efi_clone3_1.vdi)のファイルを解放
※仮想サーバ上で一度利用して増えたファイルサイズを仮想サーバ上の空き容量に合わせて解放
11.【コマンド実行後】仮想ディスクのファイルサイズが小さくなり物理ディスクの空き容量が増加
- 「コマンド実行での縮小」実施直後の仮想ディスク(rhel84efi_clone3_1.vdi)を物理ディスク上で確認
- 「rhel84efi_clone3_1.vdi」ファイルの使用容量は「約9MB」と縮小(解放)
※ファイルサイズの使用量が減少 - 「rhel84efi_clone3_1.vdi」を利用する仮想サーバのパスを確認
- 「rhel84efi_clone3_1.vdi」を利用する仮想サーバの総使用容量も「2.26GB」と減り空き容量も増加
※仮想ディスク(rhel84efi_clone3_1.vdi)の使用容量が減少したので、仮想サーバの使用容量も減少 - VirtualBox上から仮想ディスク(rhel84efi_clone3_1.vdi)の使用容量を確認しても「約9MB」と使用容量が減少
※VirtualBoxを終了して起動しなおさないと反映しない場合があります
以上、仮想サーバ上で作成したファイルを削除して物理ディスクからも空き容量が増やすことができました。
「仮想ディスク割当容量の縮小」の手順
- 縮小したいサイズの仮想ディスクを新規に用意して既存の仮想ディスクからデータを移行して入れ替えることを意味します。これが、本当の仮想ディスクの縮小になります。
- データの移行が必要であることを確認します。
この手順については、以下のURLにて詳しく解説していますので、そちらを参照してください。
【Linux】LVMで論理ボリューム縮小(XFSのデータ編)-5ステップ設定
まとめ
「コマンド実行での縮小」の特徴
一度使用して削除した空き容量を、物理ディスクも空き容量として利用できるようにするのが、「コマンドを実行して縮小」の方法になります。
仮想ディスクを利用するサーバは、仮想ディスクの割当て容量を縮小したわけではないので、ディスク構成に変化はなく、減らした空き容量も再利用可能です。
「仮想ディスク割当容量の縮小」の特徴
これが本当の縮小となり、仮想ディスクを利用する仮想サーバの使用容量も縮小されます。
仮想ディスクの割当て容量を減らした分、物理ディスクの空き容量も増えます。
仮想ディスクを利用するサーバは、ディスク構成が変更される(入れ替える)のでデータ移行が必要になります。仮想サーバが利用できるディスク容量も縮小されています。
プロビジョニングについて
シンプロビジョニングとは
通常は物理ディスクから仮想ディスク用に容量を割当てると割当てた分だけ物理ディスクが消費されますが、シンプロビジョニングの場合は消費されません。
仮想ディスクで利用された分だけ消費されます。
仮想ディスクで割当てた容量に存在する空き容量を有効活用するのがシンプロビジョニングとなります。
シックプロビジョニングとは
物理ディスクから仮想ディスク用に容量を割当てると割当てた分だけ物理ディスクも消費されます。
コメント