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


8

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でさまざまな設定を試しましたが、成功しませんでした。

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

ここに画像の説明を入力してください

回答:


15
  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のパーティションのサイズを変更して、残りのディスクをいっぱいにする必要がある場合があります。

2
これは、非常に大きなパーティションを使用する動的vdiを新しいvdiに変換するための本当に正しい方法です(パフォーマンス上の理由から、サイズが固定されている可能性があります)。なぜこの答えを
誰も選ば

「ディスクの末尾にある領域の割り当てを解除する」とはどういう意味ですか?あなたはこの質問のように、ホスト上のVDIファイルの縮小を参照している:superuser.com/questions/529149/...を
mikezter

ゲストOSでは、投稿を明確にしました
Andre Figueiredo

パーフェクト!どうもありがとうございました!
やまくれ

1
を使用vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingすると、ターゲットイメージのパーティションテーブルが破棄されます。
Mogens TrasherDK

3

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

ここに画像の説明を入力してください

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

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

パーティションごとにコマンドを実行することは可能だと思います。多分それはより良く、エラーメッセージを表示しません。sudo dd if=/dev/sdb1 of=/dev/sdc1sudo 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

2

この解決策は非常に危険だと思います!元の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 -zc :)。vboxmanageを使用して既存のvdiファイルを圧縮すると、すべてをインプレースで実行できます(ただし、常にバックアップがあります)。


私が言及するのを忘れていたのは、MS Windowsのパーティションのサイズを最初に適切なサイズに変更したことです。これにより、ファイルが153GBの部分にあることが保証されます。MS Windowsはファイル/データを移動します。ただし、MS Windowsはファイルを移動できないため、サイズ変更されない場合があります。
2016

2

私の場合、20GBに縮小するために50GBのvdiを持つWindows VMがありました。

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

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

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

私の解決策:

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

次の手順を実行してみましょう(これは私の場合です。さまざまなvdi名を適応/発明できます)。

  • VMを停止(電源オフ)

  • 希望のサイズのDVdivdiという名前の新しいディスク()を作成します(私のケースでは20 GB)。

  • DVdiをVMに接続する

  • VMを起動してユーティリティEaseUS Backup Freeをインストールします

  • EasyUSを実行し、EasyUS クローン機能を使用します(OVdi MBRおよびOVdiのntfsパーティションをクローンして、新しいディスクDVdiに圧縮します)。

  • VMの電源を切る

  • デタッチOVdi VMから

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

  • VMを再起動します

  • 楽しんで

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

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


0

他の人が述べたように、デフラグしない限りスペースの「最初のX GB」がスペースである保証がないため、アンドレフィゲイレドの答えは運に基づいています。

ポール・ハースキーの答えははるかに安全です。私が行ったいくつかの追加の手順をリストします(これはWindowsの場合であり、私の場合はXPでしたが、他の場合でも機能することに注意してください)。

1)このリンクから「MiniTool Partition Wizard Free 12」の無料版を入手してください

2)ゲストOS内にインストールしてドライブのサイズを変更し、安全のために少し余裕を残してください(最後まで引っ張らないでください。)。現在のOSのハードドライブのサイズを変更している可能性が高いため、再起動してアクションを実行するオプションが表示されます。

3)同じMiniTool Partitionプログラムを使用して、未割り当てのスペースを選択します(下*:)->右クリック->パーティションをワイプ->セクターをゼロで埋める(クイック)。

4)ゲストOSを安全にシャットダウンします。VBoxManage.exeが存在するVirtualBoxフォルダーに移動し、このパスでcmdを開いて次のコマンドを実行します。

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5)そして今、それはすべて魔法のように機能するはずです。次にゲストOSを開くと、チェックディスクが実行され、実行されます。システムファイルのように見える「孤立したファイル」が検出されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.