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でさまざまな設定を試しましたが、成功しませんでした。
仮想サイズ/容量を減らすにはどうすればよいですか?
古いディスクから新しいディスク内にコンテンツを移動します。
vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
仮想マシンをオンにします。
最終的に、プリインストールされたコマンドラインユーティリティdd
を使用して、予期しない簡単な方法でこのパズルを解決することができました。参照 ディスクの複製 以下に示すように、ゲストOSの160GBドライブを160GBの固定VirtualBox vdiファイルに保存しました。
次の手順で解決しました:
MSWIN7.vdi
をUbuntuに追加VMを2番目のディスクとして追加します。/dev/sda1
、ソースの場合は/dev/sdb2
、新しいvdiの場合はMSWIN7.vdi
および/dev/sdc1
です。/dev/sdc
に正しいパーティションを作成します。 CloneZillaがこれを行いました。データはコピーされませんでしたが、必要なパーティションが作成されました。もちろん、これは手動で行うことができます。Sudo dd if=/dev/sdb of=/dev/sdc
と同様のsdb
コマンドを使用して、sdc
をdd
にコピーします。コマンドは、スペースが残っていないというエラーメッセージで終了します。これは、コピーに失敗した未割り当ての領域なので、無視しました。パーティションごとにコマンドを実行することは可能だと思います。多分それはより良く、エラーメッセージを表示しません。 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
この解決策は非常に危険だと思います!これは、元の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ファイルを圧縮すると、すべてをインプレースで実行できます(ただし、常にバックアップがあります)。
私の場合、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に正常に削減しました