VirtualBoxでスナップショットをマージする最も簡単な方法は?


48

私は、vdiからかなりの数のスナップショットを取得しています。たとえば、50個または70個のスナップショットです。現在の状態の1つの単純なvdiが必要です。これらのスナップショットはあまりにも多くのディスク容量を必要とするため、スナップショットとしては必要ありません。

電話したら

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 times) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

欲しいものが手に入ります。ただし、非常に長い時間がかかります(ハードウェアと16Gの初期ディスクサイズを考えると、5時間以上かかります)。

そして、もちろん、私は試してみましVBoxManage snapshot deleteたが、奇妙です。停止したマシンでは動作せず、実行中のマシンで失敗する可能性があります。

いくつかのスナップショットからプレーンVDIを作成する方法はありますか?

$ VBoxManage --version
3.2.14r75509

ServerFaultでそれを尋ねましたが、この場所はこの質問に適していると判断しました)


使用するコマンドは、使用したいコマンドであり、高速な方法はありません。
ラムハウンド

VM全体をエクスポートするのはどうですか?そのvdiには必要なものが含まれていますか?
アンドレイレゲントフ

試してみてください。最終的に、仮想マシンのサイズのために、他の方法はまだ時間がかかります。
ラムハウンド

回答:


53

ソリューションを見つけました。ここで書いたコマンドの最後のステップと同じくらい簡単です。すなわち

VBoxManage clonehd fullpath/{uuid-of-last-snapshot}.vdi thedisk-full.vdi

したがって、チェーンのすべてのスナップショットではなく、最後のスナップショットのみをクローンする必要があります。そして、それは数千パーセント高速です。

uuidはから見つけることができます VBoxManage list hdds | grep VmName | tail

GUI(Windows)で、VMを選択し、右上から[ スナップショット ]を選択し、目的のスナップショットを右クリックし、[ クローン... ] を選択して、ダイアログで[ フルクローン ] を選択します。


thxですが、私の設定では機能しません。画像はすでに存在するはずです。-既存を忘れましたか?
アンディ14

3
既にthedisk-full.vdiディスクにファイルがある場合は、まずコマンドの名前をのような名前に変更してくださいthedisk-full-new.vdi
アンドレイレゲントフ14

もちろん、フルパスはVirtualBoxに登録されているものである必要があります。VBoxのは、すべてのスナップショットルックアップする必要があるので、シンボリックリンクは、仕事を文句を言わない
アンディ・

尾が何をするのかわからない、「tail -1」の意味ですか?
eckes

1
VirtualBox 5ではclonehd廃止され、後方互換性のために残されていますclonemedium。代わりに使用してください。
ジョージ

22

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

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

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

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


VirtualBox 6.0.8以降、これは引き続き機能します。
ポール・スターム

3

あなたはしようとすることができ、輸出へのOVFしてからインポート生成されたファイルをバック。

ここで説明したように

OVFは、仮想マシン用に作成されたスナップショットを記述することはできません。その結果、スナップショットを持つ仮想マシンをエクスポートすると、マシンの現在の状態のみがエクスポートされ、エクスポート内のディスクイメージは仮想マシンの現在の状態と同じ「フラット化された」状態になります。

その結果、他のスナップショットなしで現在の状態のクローンVMが作成されます。


マシンをエクスポートできないため、vdisについて質問します-壊れていた(ホストの再起動後、アクセスできない状態)で、ディスクと約50個のスナップショットであるVDIの束だけでした。
アンドレイレゲントフ

0

その操作は、同じ物理ディスクで非常に大きなファイルを読み書きすることを意味します。これを高速化できる唯一の方法は、それらのファイルを異なるディスクに配置して、VBoxManageコマンドのパスを変更することです。マシンにディスクが1つしかない場合、ネットワーク共有を介して外部USBドライブまたは別のマシンのディスクを使用できます(ネットワークの速度に応じて)


1
通常、ネットワークは内部HDDインターフェースよりも桁違いに遅いため、これはおそらくプロセスを高速化しないでしょう。
アンドレイレゲントフ

-2

10Gib / s LANを使用しているため、1秒間に1ギガバイト以上を転送できるため、ボトルネックにはなりません。

一部には1Gib / s LANがあるため、毎秒100メガバイト以上を転送できるため、ボトルネックにはなりません(本当に高速なSSDがない限り)。

メカニカルディスクは、同じディスク上で同時に(または非常に断片化された)読み取りおよび書き込みを行うと、1秒あたり20メガバイト近くダウンしますが、断片化されていない読み取りまたは書き込みのみでは1秒あたり100メガバイトを超えることがあります。

LANの速度は遅くなりますが、USB(2.0、1.1または1.0は言うまでもありません)の速度ははるかに遅くなります。

私が提案することは次のとおりです:USB 3.1 Gen2 Type CまたはeSATA / SATA / SASを使用する

しかし、常に:2番目に高速なディスクを使用してください。

そして常に:別のディスクへのクローン作成とファイルのコピーバックは、独立したマルチヘッドアームを備えたSSDまたはハードディスクでない限り、ディスクを1つだけ使用するよりもはるかに高速です(2つのディスクで同時に読み書きできます)表面の場所では、各ヘッドに独自のアームがあり、非常に高価で、約> 9876€)。

最良の方法は、必要な状態の仮想ハードディスクのみをクローンし、動作を確認してから、トップレベルを復元(すべてのスナップショットを削除)し、ストレージ上のHDDを削除して、新しいHDDを接続することです。

したがって、ツリーなしスナップショットスキームですべての古い状態を解除するには、次の手順を実行します。

  1. あるハーディスクから別のハーディスクにクローンを作成し、ボトルネックを回避する
  2. 新しいマシンを作成し、そのディスクを接続し、切断し、不変として設定します
  3. テストして動作します(不変なので)同じ状態になります
  4. 必要に応じて変更できないようにする、切断する、通常に戻すなど
  5. 古いマシンのスナップショットを削除します(最初に復元)
  6. 一時的なテストマシンを削除する
  7. 仮想ディスクをディスクにコピーして戻す
  8. クローンディスクを接続します

しかし、常に念頭に置いて、スナップショットは完全なツリーのようになり、1つのノードは複数の子を持つことができ、各子は複数の子を持つことができます。

スヌープショットのツリーを操作するために、DELETEは常に残りのノードに影響を与えずにノードを削除すると考えます(その状態を失うだけで、残りはありません。親も子も影響を受けません。データはすべての最初のサブにマージされます)レベルの子、非常に遅いプロセス)およびすべてのサブレベルのすべての子を破壊するRESTOREで(復元した後のすべての状態を失うと、ファイルのみが削除されるため、非常に高速なプロセス、わずか数秒)。

あれは!

PD:VBOXがその2つの操作に与える恐ろしい名前(1つのノードだけを削除= DELETE;すべてのサブレベルのすべての子ノードを削除= RESTORE)


復元ではスナップショットは削除されず、現在の(保存されていない)状態のみが削除されます。
メレビウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.