Virtualbox、スナップショットとベースディスクのマージ


9

ブランチに約30のスナップショットを持つ仮想マシンがあります。現在の開発パスは、22のスナップショットとベースディスクです。ファイルの量が、IOと使用している開発中のラップトップに影響を与えているようです(多くのフラグメントでの合計サイズが140GBのホストディスクパフォ​​ーマンスの問題か、それとも多数のファイルに分散されたヒットセクター)。

スナップショットの現在の開発ブランチをベースディスクとマージしたいのですが、次のコマンドで正しい結果が得られるかどうかわかりません。手順の完了後(5〜6時間)、このディスクを起動できません。

vboxmanage clonehd "C:\VPC-Storage\.VirtualBox\Machines\CRM\Snapshots\{245b27ac-e658-470a-b978-8e62137c33b1}.vhd" "E:\crm-20100624.vhd" --format VHD --type normal

これが正しいアプローチかどうか誰かが確認できますか?


いくつかの情報を追加すると、表示されるエラーはVirtualBoxエラーではなく、Windowsからの起動エラーです。スタートアップ修復を起動したいのですが、エラーがわからないので、修正方法がわかりません。通常、ウィンドウを起動すると、待機時間が長くなり、ブルースクリーンが表示されます。これは予期されたものですか、それともディスクのクローンを作成するときに間違った方法を使用しましたか?
Henrik

私はあなたが質問で提案したように(Windowsホスト、Ubuntuゲストで)VBoxManageを使用しましたが、スナップショットを単一の出力ディスクイメージに適切にマージしました
Chaulky

1
はい、これは正しいアプローチです。ファイル名ではなくソースUUIDのみを指定することをお勧めします。そうすると、VBoxが添付ファイルを解決できることが確実になります。
rustyx 2013年

回答:


7

スナップショットダイアログから、後ですべてのスナップショットを単一のVDIにマージする親スナップショットを選択します。

あなたの説明から、これは木の根であるように聞こえます。

右クリックして[スナップショットの削除]を選択します。

これにより、必要な処理が実行されます。すべての子スナップショットからのすべての変更が1つのVDIにマージされます。

さらに、最新のスナップショットにあるディスクイメージのクローンを作成すると、差分ディスクもその親(および「通常」のハードディスクタイプに到達するまで、その親など)とマージされます。

「スナップショットを削除する」とclonehdコマンドが実行されると思います。

VM設定(具体的にはIO APICが有効/無効)を確認し、それらが一致していることを確認します。


これは現在、これを行う唯一の方法だと思いますが、手動で時間のかかるGUIでマルチクリックする方法です。
Henrik、

3

スナップショットを1つだけ保持したい場合は、それを現在の状態にしてから、VMをエクスポートして再インポートします。エクスポートされたアプライアンスは、スナップショット履歴を保持しません。

または、このvboxmerge.pyスクリプトを使用して、マージを処理することもできます。あなたが持っているスナップショットの数を考えると、エクスポート/インポートのサイクルが速くなると思います。


2

以下は、「クローン」コマンドを使用してすべてのスナップショットを1つのVDIファイルを含む新しいVMにマージおよび圧縮する手法(VirtualBox 4.3.4でテスト済み)です。

  1. クローンされたVMの現在の名前を再利用できるように、VMの名前を変更します(「一般」設定の「基本」タブからVM名を変更できます)。

  2. VMを右クリックして、[クローン...]コマンドを実行します。

    • 名前をVMの元の名前に設定します。
    • 残りのデフォルト、つまりクローンタイプを受け入れます。スナップショット:「現在のマシンの状態」。
  3. 古いVMを削除します(VMを右クリックして[削除...]コマンドを実行します)。


0

ホストがWindowsの場合、またはWindowsからVHDファイルにアクセスできる場合、すべての変更を親、祖父母などにマージするトリックがあります。

DiskPartツールと2つのコマンドを使用しています。

select vdisk file="whatever your file is, with full path"

merge vdisk depth=#

#は移動する階層レベルの数です。1は親の親、2は親の親などです。

それはインプレースで行われ、クローン作成などよりはるかに時間がかかりません。

マージした後、すべての中間VHDを削除でき(それらは削除されません)、マージした親のVirtualBoxにアタッチすることを忘れないでください。

例:

Disk3.vhdはDisk2.vhdの子、Disk2.vhdはDisk1.vhdの子

Disk1.vhdを使用する場合は、Disk3.vhdのすべての変更を使用してdepth=2、Disk3.vhdを選択します。Disk2.vhdのすべての変更をDisk1.vhdで行う場合は、depth=1select Disk3.vhdを使用します。

醜いVirtualBoxスナップショットの必要がないことも覚えておいてください。DiskPartcreate vdiskコマンドを使用して、既存のディスク(差分ディスクの場合もあります)から差分ディスクを作成したり、巨大なツリーを作成したりできます。

残りすべて:ポスターはVHD(VDIではなく)を使用しているため、DiskPartやディスク管理などのネイティブツールを使用して、ゲスト(ホストがWindowsの場合はホスト)からそのディスクにアクセスできます。

あなたのために、ポスター:マージの前に常に完全なバックアップがあることを忘れないでください、VirtualBoxクローンは適切に機能せず、新しいファイルを作成し(書き込み時にコピー)、DiskPartマージは適切に機能します(ファイルを変更し、作成しません)新しいもの)。

VHD / VHDXが使用されているため、別の異なるアプローチが可能になることを願っています(VMDK、VDIなどでは無効で、Windowsホストでのみ有効です)。

注:Windows 7以降、XPおよびVistaは外部M $ツールでVHDをマウントできますが、DiskPartはXPおよびVistaでVHDをサポートしていません...これはすべてWindows HOMEエディション(7以降)でも機能します。サーバー版。

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