web-dev-qa-db-ja.com

Virtualbox vdiファイルの仮想サイズ/容量を減らす方法

MS Windows 7を実行している物理マシンをVirtualBox仮想マシンにしたい。これは簡単です。以前に行ったことがありますが、今回はディスクの仮想サイズ/容量を固定して小さくする必要がありますサイズ。

コンプライアンス上の理由でPGPディスク暗号化をインストールするため、修正する必要があります。これにより、ダイナミックディスクが最大サイズまで拡張されます。

この特殊なケース以外に、ディスクを小さくして固定したい理由は他にもあります。私の経験です。たとえば、動的に拡張するディスクでJenkinsビルドサーバーを実行すると、ゲストOSのディスク領域の使用量が安定していて、空き領域がたくさんあるときに、ディスクが最大サイズに急速に拡張するのを見ることができます。

Disk2vhd を使用するvhdxファイルを作成しました。このファイルをvdi形式に変換しました。

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

おそらくvdiを使用すると、次のようなコマンドで仮想サイズ/容量を減らすことができます

vboxmanage modifyhd MSWIN7.vdi --resize 160000

これは機能しないことがわかりました。バリアントを試しても、次のようなエラーメッセージが常に表示されます。

進行状況:VBOX_E_NOT_SUPPORTED VBoxManage:エラー:このフォーマットのハードディスクのサイズ変更操作はまだ実装されていません!

以下は、私のvdiディスクのディスクレイアウトです。これをUbuntuに追加しましたVM GpartedとCloneZillaを使用して確認するため。容量は約300GB。未割り当て145GB。使用量は約153GBです。

容量を160GB程度まで縮小したい。これは/dev/sdb1および/dev/sdb2

ところで、私はCloneZillaを試しましたが、容量をより小さなディスクに縮小することも好きではないようです。 CloneZillaでさまざまな設定を試しましたが、成功しませんでした。

仮想サイズ/容量を減らすにはどうすればよいですか?

enter image description here

8
onknows
  1. ゲストOSのディスクの末尾にある領域の割り当てを解除します。ここで、領域> = size(source-disk)-size(new-disk)です。通常は 最後のパーティションを縮小 です。
  2. 仮想マシンをオフにします。
  3. 希望のサイズで新しいVirtual Boxディスクを作成します。
  4. 古いディスクから新しいディスク内にコンテンツを移動します。

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. 仮想マシンをオンにします。

  6. 手順1で割り当てを解除したスペースによっては、ゲストOSでパーティションのサイズを変更して、残りのディスクを埋める必要がある場合があります。
15

最終的に、プリインストールされたコマンドラインユーティリティddを使用して、予期しない簡単な方法でこのパズルを解決することができました。参照 ディスクの複製 以下に示すように、ゲストOSの160GBドライブを160GBの固定VirtualBox vdiファイルに保存しました。

enter image description here

次の手順で解決しました:

  1. MS WindowsのDisk Managementを使用してディスクのサイズを変更し、VDIのサイズと同じかそれより少し小さいサイズに変更します。
  2. MS Windows 7のソースvdi MSWIN7.vdiをUbuntuに追加VMを2番目のディスクとして追加します。
  3. 新しい固定160GB vdiを作成し、これをUbuntu VMに追加します。これで3つのディスクがあります。実行中のUbuntu VMの場合は/dev/sda1、ソースの場合は/dev/sdb2、新しいvdiの場合はMSWIN7.vdiおよび/dev/sdc1です。
  4. /dev/sdcに正しいパーティションを作成します。 CloneZillaがこれを行いました。データはコピーされませんでしたが、必要なパーティションが作成されました。もちろん、これは手動で行うことができます。
  5. Sudo dd if=/dev/sdb of=/dev/sdcと同様のsdbコマンドを使用して、sdcddにコピーします。コマンドは、スペースが残っていないというエラーメッセージで終了します。これは、コピーに失敗した未割り当ての領域なので、無視しました。

パーティションごとにコマンドを実行することは可能だと思います。多分それはより良く、エラーメッセージを表示しません。 Sudo dd if=/dev/sdb1 of=/dev/sdc1およびSudo dd if=/dev/sdb2 of=/dev/sdc2

vagrant@devops:~$ Sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s
3
onknows

この解決策は非常に危険だと思います!これは、元の300 GBパーティションの最初の153 GBにあるすべてのファイルに依存しています。 ddコマンドはファイルをコピーしません。すべてのブロックを順番にコピーするだけです。したがって、160 GBのカットオフ後に重要なファイルを作成できるほど残念だった場合、ddはそれらをコピーすることを知りません。

私が多くの記事で見た典型的な解決策は、WindowsをパワーアップすることですVMで、デフラグツールと管理ツールのいくつかの組み合わせを使用して、すべてのファイルをディスクの前面に統合します-難しさ多くのデフラグツールは、移動できないWindowsシステムファイルを移動しません(7 GBの移動できないディスクのチャンクを削除するには、システム回復をオフにする必要がありました)。これは、統合しようとしているスペースの真ん中にあります。

ファイルをディスクの前に統合したら(MyDefragはディスク上のファイルの場所を表示するフリーウェアのツールです)、Windowsパーティションのサイズを小さくする必要があります。 diskpartツールを縮小オプションとともに使用しました。

この時点で、ddを使用して、小さくなったパーティションを新しいvdiにコピーできます。

Linuxホストでvboxmanage modifymedium win10.vdi --compactも使用しましたが、最初にWindowsシステム内でsdelete.exeを実行して、すべての未使用領域をゼロにする必要がありました(sdelete -z c :)。 vboxmanageを使用して既存のvdiファイルを圧縮すると、すべてをインプレースで実行できます(ただし、常にバックアップがあります)。

1
Paul Hursky

私の場合、Windows VM 50GB vdiで20GBに縮小しました。

私はAndre Figueiredoソリューションを試しましたが、クローンされたvdiに問題がありました。

Andre Figueiredoソリューションを適用してVMに縮小されたvdiを接続すると、起動中にVirtualboxがI/Oエラーで停止します。

おそらく、これは私のbtrfsファイルシステムに関連しています(btrfsがVritualbox vdiで問題を引き起こすと聞きました)。

私の解決策:

VM disk(vdi)という名前のOVdiを縮小するために別の解決策を試しました、(OVdiのディスクサイズは50GBで、単一のntfsパーティションに40GBの空き容量があります)。

次の手順に従ってみましょう(これは私の場合です。異なるvdi名を適応/発明できます):

  • VM(poweroff)

  • 希望するサイズ(20GBの場合)の名前DVdiで新しいディスク(vdi)を作成します。

  • vMに接続DVdi

  • ブートVMおよびユーティリティEaseUS Backup Freeをインストールします

  • EasyUSを実行し、EasyUSClone関数を使用します(OVdiMBRを複製します)そして、新しいディスクに縮小することによるOVdiのntfsパーティションDVdi

  • VMの電源を切る

  • VMからOVdiのデタッチ

  • DVdiがVMの最初の起動デバイスであるかどうかを確認します

  • vMを再起動します

  • 楽しんで

OVdiボリュームを削除することを忘れないでください。

これらの手順に従って、VMディスクサイズを50GBから20GBに正常に削減しました

1
Fabiano Tarlao