web-dev-qa-db-ja.com

VMware Workstation:.vmdkの最大サイズを削減する方法

仮想マシンが格納されている150 GBのディスクファイル(.vmdk、事前割り当てなし)があります。

ファイルは現在20 GBですが、ゲストファイルシステムに新しいものを保存していなくても、毎日増え続けています。

私はこのディスクの最大サイズを減らすになる方法を何時間も探していました。そのため、150 GBになりません(制限を30 GBに設定して、何が起こるかを確認したいと思います)。 VMがこのサイズに達したとき)。

私が試したこと:

  • VMware Converterを使用したディスクイメージの変換→これは機能しません。ツールは、フルコピーまたは「リンククローン」の作成のみを許可します。
  • 20GBのデータを新しい.vmdkにコピーするために必要なサイズの新しい空の仮想マシンを作成→コピーを実行する方法が見つからない、または新しいディスクを既存のVM =(ゲストOSを使用してコピーを実行するため)。
  • .vmxファイルを調べて、最大サイズがプレーンテキストで設定されていないかどうかを確認します(設定されていません)。

このタスクは技術的には非常にシンプルに見えます(トリッキーな縮小は含まれず、サイズ制限を変更するだけです)が、私は本当にここでは考えられません...

解決策はありますか?

28
Sébastien

.vmdkディスクのサイズを減らす通常の手順は次のとおりです。

  1. ゲストを介してディスクを最適化し、ディスクの最後の空のスペースを統合する最適化モードを選択します。 Windowsゲストの場合は、ごみ箱を空にして休止状態とページングをオフにし、最適化の完了後にそれらを返す必要があります。

  2. ディスク上のすべての未使用領域をゼロにします。
    Windowsの場合 sdeletesdelete -cを使用します。
    Linuxの場合:dd if=/dev/zero of=/mytempfile && rm -f /mytempfile

  3. ディスクを圧縮します(完了するまでにかなり長い時間がかかる場合があります)。
    VMware Workstation:メニューVM /管理/ディスクをクリーンアップします。
    または使用:vmware-vdiskmanager.exe -k [VMDK PATH]
    ESXの場合:vmkfstools --punchzero [VMDK PATH]

ディスクを拡張可能から事前割り当て済みに変換すると、拡張が停止する可能性があります。これは、値が次の-tパラメータを指定したvmware-vdiskmanagerを使用して実行できます。

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

次のコマンドは、.vmdkを拡張可能から事前割り当て済みに変換します。

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

ディスクのサイズを変更したい場合は、ディスクが拡張可能な形式(例 here )である間に行う必要があります。

詳細については、 仮想ディスクマネージャユーザーガイド を参照してください。

28
harrymc

ファイルは現在20GBですが、ゲストファイルシステムに新しいものを保存していなくても、毎日増加しています。

OSとそのアプリケーションプログラムは、一時ファイル、ページファイル、休止状態ファイル、構成ファイルに一時的に大量のディスク領域を使用するためです。 OSのポリシーに応じて削除されると、ディスク上の新しいセクターが次回使用されます。 VM仮想ディスクで新しいセクターが使用されるときはいつでも、実ディスクから仮想ディスクにストレージを割り当てます。仮想ディスクのセクターはゲストOSで常に再利用されないため、VMは、そのディスク使用量を考慮し、実際のディスクからスペースを提供します。これにより、仮想ディスクイメージが増大します。

画像を検査せずにこのようなツールを使用すると、全体の災害につながる可能性があるため、質問のタイトルが解決される可能性は低くなります。しかし、イメージが30GBを超えて大きくなるのを防ぐことができます。目標を達成するには多くの方法があります。

A.パーティション化された30GBのみを使用し、残りを空きスペースとして残してください。すでにより多くのスペースをパーティション分割している場合は、それを縮小/削除する必要があります。新しいパーティションを作成してから、ゼロでダンプし、@ harrymcの説明に従ってパンチします。パーティション化されていない領域のスペースは使用されないため、仮想ディスクが30GBを超えることはありません。

B.スナップショットを作成し、使用後にそれを復元します。スナップショットの作成後VMデータを新しいイメージファイルに保存します。スナップショットを保存または作成せずに復元すると、変更されたすべてのデータが削除され、スペースが解放されます。

C.最大30GBの新しい仮想ディスクを作成し、それを新しいディスクとして現在の仮想マシンに追加し、バックアップツールを使用してすべてのデータを新しい仮想ディスクに移動します。クローンにはライブLinuxを使用できます。

推奨オプションはA

6
totti

これは、スパースVMDK(事前割り当てなし)でのみ機能します使用することを確実にするために、縮小する前にデフラグが必要ですスペースが連続しています

Windows内での最適化

Windows仮想マシンでは、まずWindows内からディスクの最適化を実行する必要があります。 Windows内での最適化により、使用されているすべてのスペースが連続していることが保証されます。その後、仮想ディスクのサイズを縮小できます。

仮想ディスクの縮小

仮想ディスクを縮小するには:

VMware Toolsのコントロールパネル/ツールボックスを開きます。

Windowsの場合:

システムトレイの[VMware Tools]アイコンをダブルクリックするか、[スタート]> [コントロールパネル]> [VMware Tools]をクリックします。

Linuxの場合:

ターミナルを開き、次のコマンドを実行します:

vmware-toolbox

注:Workstation 9.x(Windows)以降では、ディスクのクリーンアップ中に圧縮が自動的に行われます。したがって、このオプションはVMware Tools Panelから削除されました。 VM> [管理]> [ディスクのクリーンアップ]に移動します。これは、VMware Workstation 9.x以降のLinuxバージョンでは使用できません。

[縮小]タブをクリックします。圧縮するドライブを選択します。 [縮小する準備]をクリックし、画面の指示に従います。注意:ディスクの縮小中は、仮想マシンまたはホストマシンをシャットダウンしないでください。また、プロセスをキャンセルしようとしないでください。このプロセスを中断すると、仮想ディスクに修復不可能な損傷を与える可能性があり、仮想マシンを再起動できない場合があります。

から VMWareナレッジベース

2
Jalal Mostafa

関係するディスクのサイズを150GBから30GBに設定しないでください。

すべてのパーティションの合計を30GB未満に設定する必要があります。パーティションのサイズを小さくしていく必要があります。このサイトには、パーティションを縮小する方法に関する多くのドキュメントがあるので、ここでは繰り返しません。

最大サイズで150GB(薄いパーティション)をサポートするスペースがないのになぜ作成したのですか?どうやらこれはトラブルを求めているようです。

2
mdpc

@harrymの答えはかなり良いですが、実際には質問には答えません。 OPは最大サイズを小さくしたいと考えています。問題は、ハイパーバイザーが提示されたサイズ(最大サイズとも呼ばれる)が実際にOSによって使用されている量を知らないことです。圧縮(vmware-vdiskmakager -k)は、拡張可能なvmdkに適用されます。事前に割り当てられたものに対しては何もしません。

したがって、ディスクを縮小する手順は次のとおりです。

  1. OSまたは適切なライブCDを介してディスク上のパーティションのサイズを変更します
  2. Vmdkデバイスのサイズを変更し、使用可能なパーティション領域をカットしないように境界を慎重に選択します。イメージには、実際に必要なスペースよりも常に多くのスペースを残すことができます。

最初のステップは、VM内からの手順を含み、ゲストOSによって異なります。2番目のステップはvmwareコマンドでサポートされる可能性がありますが、これを行うための詳細な方法を見つけていません。したがって、ハックなアプローチ。

これは、(大容量のデータの移動が原因で)それほど迅速ではなく、トリックを実行するダーティなソリューションです。 最大デバイスサイズと同じ空き容量が必要です。

警告:操作の前に重要なデータをバックアップしてください!!

  1. ゲストパーティションのサイズを変更し、デバイスの末尾に未割り当て領域を残す方法を見つけます。 2つの例:

    ゲストOSから:Windows 7

    1. オンラインのサイズ変更機能を使用できます。最初にクエストOS内からディスクを最適化することをお勧めします。
    2. Diskmgmt.mscを実行し、サイズを変更するディスク上のパーティション(ボリューム)を選択して、右クリック-> [ボリュームの縮小]をクリックします。表示されるダイアログで、要件に応じてサイズを小さくします。パーティションが使用中のため(システムディスクの場合、または断片化が激しい場合)、空き領域のほとんどを回復できない可能性があることに注意してください。余分な空き領域を残すためのプロビジョニング。
    3. ここで、ディスクセクター(またはバイト)を終了するパーティションを確認します。これがデバイス上の唯一のパーティションであると想定して、コンピューターに表示されているボリュームのサイズを取得します->ディスクを選択->右クリック->プロパティ->容量:バイト数をメモします。 (たとえば、私の例では99,9GBの107371032576)。安全のために数百メガ(+204800)を追加します(例:107371237376)。不足しているものを追加する必要がないことを確認するために、diskpart cmd行ユーティリティを使用して、デバイスの先頭からのパーティションのオフセットを見つけることができます。次にdiskpartを実行します:ディスクのリスト、ディスクの選択id、パーツのリスト、部品の選択id、詳細。例:

    DISKPART>詳細パーツ

    パーティション1

    バイト単位のオフセット:1048576

    少なくともこの数をディスクサイズに追加してください。次に、バイトを512で除算し、切り上げ(天井)するセクターに変換する必要があります。例えば。 209709448。手順3でこの番号をメモします。

    ライブCD経由:SystemResqueCD

    1. または、resque cdを使用することもできます( SystemResqueCD は私の提案です)、起動可能なISOをダウンロードし、VMに仮想CD-ROMデバイスとしてマウントし、CDから起動します(VMWareブートでEscキーを押します)画面に表示されますが、すぐに表示されるため、数回試す必要がある場合があります)。コマンドプロンプトタイプ:startxに到達すると、グラフィカルインターフェイスが表示されます。
    2. Systemresqueのデスクトップで、gpartedを起動します(たとえば、ターミナルから)。サイズを変更するパーティションを見つけます(ゲストオペレーティングシステムからスキャンディスクを実行する場合は、これを完全にアンマウントする必要があります)。必要なスペースを注意深く計画して、サイズ変更を行います。
    3. ここでも、パーティションのセクター(またはバイト)で終了オフセットを見つける必要があります。ターミナルを開き、parted [device]を書き込んでから、ユニットsを出力します。例えば。

番号開始終了サイズタイプファイルシステムフラグ

1 2048s 113455103s 113453056sプライマリNTFSブート

最後のセクターに注意して、1を追加します。 113455104。手順3でこの番号をメモします。

  1. ハックが事前割り当てされた単一のファイル(タイプ2)vmdks(複数のファイルタイプで試したことがない)で機能するため、最初にグロータブルを事前割り当てに変換します。デバイスの最大サイズとして、物理的なスペースを持つパーティションが一時的に必要になります。 (例:150GB)。

    vmware-vdiskmanager.exe -rsourcevmdk-t 2destvmdk

  2. ここで注意が必要なのは、事前に割り当てられたディスクには2つのvmdksがあるはずです。

    disk.vmdk disk-flat.vmdk

    前者はKBのみで、後者はデータを保持します。最初の(disk.vmdk)を開きますが、VMWareワークステーションはオフです。テキストエディタ(メモ帳++が私の提案です)を使用します。ラインを見つける

    RW 113455104 FLAT "Windows 7_x64-fl-flat.vmdk" 0

    はい、ポイントを取得します。2番目のフィールドは、デバイスに割り当てられたセクターの数です。検証では512を掛けてバイト単位でサイズを求め、次に1073741824(1024 ** 3)で除算してGB単位でサイズを求めます。これは以前のデバイスのサイズである必要があります。

    次に、その番号をステップ1でメモした番号に置き換え、ファイルを保存します。 [〜#〜] warning [〜#〜]:ここでのミスにより、ファイルシステムで使用されている実際のデータがトリミングされる可能性があります。 (しかし、デバイスの最初にfsのサイズを変更し、正しく安全な計算を行いましたか?)

  3. これまでに触れられたデータはありません。この最後の手順を実行して、エクステンドを実際にトリミングします。 vmware-vdiskmanagerの名前変更機能を使用して、サイズが調整されたvmdkを再作成します。

    vmware-vdiskmanager.exe -ndestvmdkソースvmdk

2
basos

VMWare Converter を使用して新しいVMおよびより小さなVMDKサイズを作成し、次に、新しく作成されたより小さなVMDKに元のVMDKを変換します。

Shrink VMDK

詳細な手順 ここ

VMDKサイズの変更には、対応する パーティションテーブルの更新 も必要になることに注意してください。

2
hanxue

VMware LinuxゲストOSの場合は、次のコマンドを実行します。

Sudo vmware-toolbox-cmd disk shrinkonly

0
Tom Hale