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


27

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

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

私はこのディスクの最大サイズ減らす方法を何時間も探していましたので、それが150 GBにならないようにします(制限を30 GBに設定し、VMがこのサイズに達したときに何が起こるかを見てみたい) 。

私が試したもの:

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

このタスクは技術的には非常に単純に見えますが(複雑な縮小は関係なく、単純にサイズ制限を変更するだけです)、私は本当にここにアイデアがありません...

解決策はありますか?


1
仮想ディスク上のパーティションは、広告スペースを埋めるために作成される可能性が最も高いため、「トリッキーな縮小」が実際に関係しています。
ダニエルB 14

回答:


25

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

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

  2. ディスク上の未使用領域をすべてゼロにします。
    Windowsの場合は、sdeleteを使用しますsdelete -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]

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

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をgrowableからpreallocatedに変換します。

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

ディスクのサイズを変更したい場合は、ディスクがまだ拡張可能なフォーマットである間にこれを行う必要があります(例はこちら)。

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


2
ただし、これにより、内部でアドバタイズされるドライブサイズは減少しません。
ダニエルB 14

@DanielB:いいえ、最大サイズを縮小するのではなく、物理サイズを縮小します。一部のOSはシステムディスクに空き領域がないと起動できないため、最大サイズを減らすことは危険です。
harrymc 14

3
これは、VMDKが占有するスペースを削減するために使用した便利な手法です。ただし、VMDKを常に30 GBとすると、この操作を定期的に繰り返す必要があります(実際には長い時間がかかります)。
セバスチャン

ディスクを常に必要なサイズにスリム化できる場合、つまり上記の手順が常にサイズを縮小するように機能する場合、ディスクを固定サイズに変換することで将来サイズを制限できます。
harrymc 14年

1
@harrymcディスクを固定サイズに変換すると、私のニーズに合ったものになります。VMWare WorkstationまたはConverterでこれを行う方法が見つかりませんでした。
セバスチャン

6

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

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

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

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

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

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

推奨オプションはA


2

関係するディスクのサイズを150GBから30GBに単純に設定しないのはなぜですか。

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

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


5
個人的にVMを作成したわけではありません。これが理由です。
セバスチャン

ディスク自体を縮小するにはどうすればよいですか?ディスク内のパーティションは縮小されていvdiskmanager.exe -k [VMDK PATH]ますが、別の返信で示唆されているように、ドライブは縮小されません。
アーロンフランケ

明確に文書化されていない問題は、vmdkデバイスのサイズを変更する方法です(もちろんパーティションのサイズを変更した後)。また、@ mdpcの答えは建設的ではないと思います。既存の vmでデータのサイズを変更する必要がある場合が多いため、VMを正しく作成する必要があることを示す必要はありません。
basos

2

使用しての回り道があるのVMWare Converterを新たに作成した、小さいVMDKに、元のVMDKを変換し、その後、新しいVMと小さいVMDKのサイズを作成するためには。

VMDKの縮小

詳細な手順はこちら

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


これはVMWareワークステーションVMであり、これらの高度なコピーオプションは、このタイプのVM用のConverterでは提供されていません。ディスクのサイズを変更することはできません。
セバスチャン

2

これは、スパースVMDK(事前割り当てなし)でのみ機能 します

Windows内での最適化

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

仮想ディスクの縮小

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

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

Windowsの場合:

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

Linuxの場合:

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

vmware-toolbox

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

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

VMWareナレッジベースから


既存の回答を最初に読むことで、回答の重複を防ぎます。
ハリーマック

1
とにかく、完全な手順とソースで再投稿しました。これは彼をさらに助けるかもしれません
ジャラルモスタファ

opにも答えません。OPは、現在のサイズではなく、上限を縮小したいと考えています。
リュウ

2

@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 lineユーティリティを使用して、デバイスの先頭からのパーティションのオフセットを見つけることができます。次に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 -r sourcevmdk -t 2 destvmdk

  2. トリッキーな部分、事前に割り当てられたディスクには2つのvmdksが必要です

    disk.vmdk disk-flat.vmdk

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

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

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

    ここで、その番号を手順1でメモした番号に置き換えて、ファイルを保存します。警告:ここでの間違いは、ファイルシステムで使用される実際のデータをトリミングすることになります。(ただし、デバイスの先頭のfsのサイズを変更し、正しく安全な計算を行いましたか?)

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

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk


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