VMware Fusionで仮想ディスク割り当てサイズを減らす方法

主題
VMware Fusion(ゲストOSはWindows10)において、割り当てた仮想ハードディスクサイズを縮小する手順を述べる。

背景
VMware Fusionでは、仮想マシンの設定から、仮想ハードディスクサイズを拡張することはできるが、縮小することはできない。縮小させるためには、Pro Tip: Reducing the Maximum Size of a Virtual Disk with VMware Fusion / Workstation(英語)にあるような、いささか手の込んだ手順を踏む必要がある。
本稿は、基本的には、リンクした記事の日本語訳である。

手順
手順は、以下の通りとなる。

  1. 仮想マシン側の準備

    1. 仮想マシンのバックアップ
      万が一に備え、仮想マシンパッケージファイルをバックアップする。

    2. 仮想マシンの起動
      バックアップしたら、当該仮想マシンを起動する。

    3. ディスクの管理の起動
      スタートボタンを右クリックし、ディスクの管理を選択、起動する。

    4. ディスクの管理を用いたCドライブの縮小
      Cドライブを選択し、右クリックしてボリュームの縮小を選択、表示されるダイアログで、縮小量を入力、縮小ボタンを押す。

      Cドライブの縮小


      縮小ダイアログ

    5. ディスクの管理で未割り当て領域をシンプルボリュームにする
      次項のsdelete実行の準備(ドライブレターの割り当て)である。未割り当て領域を選択し、右クリックして新しいシンプルボリュームを選択、表示されるダイアログに従う。

      新しいシンプルボリューム

    6. SDeleteを用いたシンプルボリューム(空領域)へのゼロ書き込み
      SDeleteをダウンロードし、パスの通っている場所に置く。このコマンドラインプログラムは、以下のようにして使う。

      sdelete64.exe -z E:

      ここで、Eはドライブレターである。ゼロクリアするボリュームのものを指定する。また、アルファベットの直後にコロン(:)を忘れないこと。

      SDelete実行画面

    7. ディスクの管理でシンプルボリュームの削除
      ゼロクリアが終わったら、ボリュームを削除して、未割り当てに戻す。

      ボリュームの削除

    8. 仮想マシンのシャットダウンとクリーンアップ
      以上で仮想マシン側の準備は終わりである。仮想マシンをシャットダウンし、クリーンアップを行う。

  2. 仮想ディスクの加工 その1

    1. 加工作業用フォルダの作成
      仮想ディスクの割り当て量を小さくする作業用フォルダを用意する。Finderでやっても良いし、ターミナルを用いても良い。

      mkdir -p ~/Desktop/VMDK_Temp
      mkdir -p ~/Desktop/VMDK_Temp/Original
      mkdir -p ~/Desktop/VMDK_Temp/Work
    2. 仮想マシンパッケージファイルから仮想ディスクファイルをコピー
      仮想マシンパッケージファイルをパッケージの内容を表示で開き、中にある仮想ディスクファイル(拡張子:vmdk)を、先ほど作った作業フォルダ(Original)にコピーする。この作業は、断然Finderを用いた方が良い。

    3. 仮想ディスクファイルの分割
      コピーした仮想ディスクファイルが分割されていない場合は、分割する。

      cd ~/Desktop/VMDK_Temp/Work
      /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -r ../Original/仮想ディスク.vmdk -t 1 仮想ディスク.vmdk
    4. 仮想ディスクファイルの縮小
      コピーした仮想ディスクファイルが分割されている場合、縮小する。(上記仮想ディスクファイルの分割を行った場合は不要)

      ~/Desktop/VMDK_Temp/Original
      /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k 仮想ディスク.vmdk

      縮小したら、仮想ディスクファイルをWorkフォルダに移動する。

    5. 不要な仮想ディスクファイルの削除
      加工作業用フォルダのリストを取る。

      cd ~/Desktop/VMDK_Temp/Work
      ls -l *.vmdk

      図の例では、17番目から始まる連続した524,288KB(512MB)のファイルは、空である。よってこれらを削除する。

      作業フォルダのリスト

    6. 仮想ディスク設定ファイルの確認
      以下のコマンドを実行し、仮想ディスク設定ファイルを確認する。

      cd ~/Desktop/VMDK_Temp/Work
      cat 仮想ディスク.vmdk

      下図の通り、分割された仮想ディスクファイル1個の容量は8,323,072KB(8,128MB)となっている。(何故かは不明だが、実際は、この1/2である)

      仮想ディスク設定ファイル

      これにより、本稿の例では、不要な仮想ディスクファイルを削除した後の容量は:

      8,323,072*16/2/1,024^2=63.5(GB)

      となっている。これを端数を調整して64GBとすることにする。

  3. ダミー仮想マシンでの作業

    1. ダミー仮想マシンの作成
      VMware Fusionの新規メニューからカスタム仮想マシンの作成を選んで、ダミー仮想マシンを作成する。筆者はOSをWindows 10にした。


      ダミー仮想マシンの作成

    2. ダミー仮想マシンのハードディスクの削除
      後で適切なサイズのものを作り直すので、設定のハードディスクペインから削除する。

    3. ターゲットとなるディスクサイズのハードディスクの作成
      64GB(本稿の例)の分割されたハードディスクを作成する。

      ハードディスクの作成1


      ハードディスクの作成2

  4. VMDKの加工 その2

    1. 端数調整(仮想ディスク分割ファイル)
      ダミー仮想マシンのパッケージを開き、最後(本稿では17番目)の分割仮想ディスクファイルを作業フォルダにコピーする。

    2. ダミー仮想マシンの仮想ディスク設定ファイル確認
      作業中の仮想ディスク設定ファイルを整合させるため、ダミーの設定ファイルを参照する。

      cd Virtual\ Machines.localized/Windows\ 10\ x64\ 2.vmwarevm/
      cat 仮想ディスク.vmdk

      下図の通り、最後(本稿では17番目)の分割仮想ディスクのサイズと、ddb.geometry.cylindersの値を確認しておく。

      ダミーハードディスクの設定ファイル確認

    3. 仮想ディスク設定ファイルの編集
      作業中の仮想ディスク設定ファイルをテキストエディタ(筆者はターミナルのvim)で開き、(本稿の場合)26個の分割仮想ディスク詳細を17個に削減する。そして17番目のサイズを先ほどダミーで確認したサイズにする。ddb.geometry.cylindersの値も忘れずに合わせる。

      cd ~/Desktop/VMDK_Temp/Work
      vim 仮想ディスク.vmdk

      編集を終えると、下図のようになる。

      仮想ディスク設定ファイルの編集

    4. 仮想ディスクファイルの統合
      もし、単一の仮想ディスクファイルを希望する場合、分割されたファイルを再統合する。

      mkdir -p ~/Desktop/VMDK_Temp/Done
      cd ~/Desktop/VMDK_Temp/Done
      /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -r ../Work/仮想ディスク.vmdk -t 0 仮想ディスク.vmdk
    5. 完成した仮想ディスクファイルの移動
      元の仮想マシンパッケージを開き、完成した仮想ディスクファイルを移動する。このとき、VMware Fusionは終了させておくこと。

  5. 仕上げ

    1. VMware Fusionの起動
      VMware Fusionを起動する。仮想マシンの設定からハードディスクペインを開き、ディスク割り当て量が減ったことを確認する。

      ハードディスクの確認

      確認したら、仮想マシンを起動する。

    2. 残った未割り当て領域の処理
      ディスクの管理を起動し、今度はCドライブを拡張して、残った未割り当て領域を解消する。

      残った未割り当て領域の処理 1


      残った未割り当て領域の処理 2


      残った未割り当て領域の処理 3

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL