トップ回答者
Hyper-VのVHDXファイルのサイズについて

質問
-
Windows2012R2でHyper-Vを使用しております。仮想マシンではWindows2012R2を動かしています。この仮想マシンのVHDXファイルが1TBほどの大きさになっております。仮想マシン上では200GBほどしか使用していません。仮想マシンのOSのインストール後から特にディスクの最適化は行ってないです。
VHDXファイルはホストOS上で使用しているファイルの何倍の大きさになるものでしょうか。
サーバー上では以下のアプリをインストールしております。
- SQLサーバー
- Excel 2012
- その他SQLサーバーを使用するアプリ
仮想マシンは、もう一台のサーバーにレプリケーションを行っています。追加の回復ポイントをデフォルトの24に指定しております。VSSスナップショットの頻度は4時間を設定しています。
仮想マシンの使用容量とVHDXファイルの大きさの目安と、回復ポイントを減らすことで容量を減らせるのか教えていただけると助かります。
回答
-
ばんぶぅです。こんにちは。
まず、Hyper-Vレプリケーションの回復ポイントは、
レプリカ側のホストに*.HRUとして1時間毎の逆差分情報として24時間分保存されます。
(レプリカされる*.HRLに対するアンドゥファイル)
従って、回復ポイントなし~24時間のどれを選択しても、オリジナルのVHDXファイルサイズには影響はありません。VHDXのファイルサイズが徐々に増えていくのは、他の方も仰っている通りの仕様ですが、
もう少し解りやすく言うと、NTFSではファイルを「削除」しても、
ファイル管理情報に「削除済」のマークを付けるだげで、実際のデータを削除しませんので、
HDD(VHDX)からするとデータが書き込まれたブロックは書き込まれたまま=削除されません。
同じ理由により、仮想マシン上でデータ重複除去を構成してHDD使用量を抑えたとしても、
VHDXファイルのサイズは重複除去処理前の生データのサイズ分が消費されたままとなります。さらに厄介な事に、ファイルシステムは「削除済」領域よりも優先して
「未使用」領域を使うように設計されているようです。
この方が余計なフラグメンテーションが発生しないので、
通常の物理HDDならメリットがあるのですが、
可変容量VHDXの場合はどんどんVHDXファイルサイズが増える原因になります…
VHDXファイルのサイズを縮小するには、以下の操作が必要です。
- まず、仮想マシン上で「パーティションの縮小」を行い、
縮小可能な最大サイズまでパーティションを縮小します。
この操作で十分なVHDXファイルのサイズまでパーティションを縮小出来た場合は、
そのまま仮想マシンをシャットダウンし、Hyper-Vマネージャーの「ディスクの編集」より、
対象のVHDXファイルを最適化すれば縮小されます。
その後、仮想マシンを起動し、パーティションを必要な容量まで拡張します。 - 上記操作でパーティションサイズが十分に縮小出来ない場合は仮想マシン上で
Sysinternals提供の「SDelele.exe」を-sオプションで実行し、全ての空き領域を0で埋め尽くします。
その後、仮想マシン上でデフラグを実行⇒シャットダウン⇒Hyper-VマネージャーでVHDXファイルを最適化します。
SDelete -sは、一時ファイルを作成し、パーティションの空きが0バイトになるまで
00000…を追記していくユーティリティですのでものすごーく時間がかかります。
また、パーティションが大きな(=1.5TB)まま実行すると、VHDXファイルはどんどん膨れて
設定値の最大の1.5TBまで増大してしまうので、事前にパーティションの縮小を行うことを推奨します。また、レプリケーションによりVHDXの最適化が行えない場合は、一旦レプリケーションを削除して
最適化後に再度レプリケーションし直す必要があります。個人的には、設計の段階でVHDXのサイズ=将来最大の設計容量とした上で、
仮想マシンのパーティションの作成時に全容量ではなく、
当面必要と思われる最低限の容量のパーティションを作成するようにしています。
こうすることで、ファイルの削除⇒別のファイルを作成する際に、
削除済領域のリサイクル効率が上がります。
また、実際に拡張が必要な場合も「ディスクの管理」を開き、
数クリックの操作だけで一瞬で拡張が完了するので、
VHDXファイルが肥大化する都度最適化する手間とシステム停止時間を考えると効率的です。- 回答としてマーク 小野田 2015年11月19日 1:40
- まず、仮想マシン上で「パーティションの縮小」を行い、
すべての返信
-
ばんぶぅです。こんにちは。
まず、Hyper-Vレプリケーションの回復ポイントは、
レプリカ側のホストに*.HRUとして1時間毎の逆差分情報として24時間分保存されます。
(レプリカされる*.HRLに対するアンドゥファイル)
従って、回復ポイントなし~24時間のどれを選択しても、オリジナルのVHDXファイルサイズには影響はありません。VHDXのファイルサイズが徐々に増えていくのは、他の方も仰っている通りの仕様ですが、
もう少し解りやすく言うと、NTFSではファイルを「削除」しても、
ファイル管理情報に「削除済」のマークを付けるだげで、実際のデータを削除しませんので、
HDD(VHDX)からするとデータが書き込まれたブロックは書き込まれたまま=削除されません。
同じ理由により、仮想マシン上でデータ重複除去を構成してHDD使用量を抑えたとしても、
VHDXファイルのサイズは重複除去処理前の生データのサイズ分が消費されたままとなります。さらに厄介な事に、ファイルシステムは「削除済」領域よりも優先して
「未使用」領域を使うように設計されているようです。
この方が余計なフラグメンテーションが発生しないので、
通常の物理HDDならメリットがあるのですが、
可変容量VHDXの場合はどんどんVHDXファイルサイズが増える原因になります…
VHDXファイルのサイズを縮小するには、以下の操作が必要です。
- まず、仮想マシン上で「パーティションの縮小」を行い、
縮小可能な最大サイズまでパーティションを縮小します。
この操作で十分なVHDXファイルのサイズまでパーティションを縮小出来た場合は、
そのまま仮想マシンをシャットダウンし、Hyper-Vマネージャーの「ディスクの編集」より、
対象のVHDXファイルを最適化すれば縮小されます。
その後、仮想マシンを起動し、パーティションを必要な容量まで拡張します。 - 上記操作でパーティションサイズが十分に縮小出来ない場合は仮想マシン上で
Sysinternals提供の「SDelele.exe」を-sオプションで実行し、全ての空き領域を0で埋め尽くします。
その後、仮想マシン上でデフラグを実行⇒シャットダウン⇒Hyper-VマネージャーでVHDXファイルを最適化します。
SDelete -sは、一時ファイルを作成し、パーティションの空きが0バイトになるまで
00000…を追記していくユーティリティですのでものすごーく時間がかかります。
また、パーティションが大きな(=1.5TB)まま実行すると、VHDXファイルはどんどん膨れて
設定値の最大の1.5TBまで増大してしまうので、事前にパーティションの縮小を行うことを推奨します。また、レプリケーションによりVHDXの最適化が行えない場合は、一旦レプリケーションを削除して
最適化後に再度レプリケーションし直す必要があります。個人的には、設計の段階でVHDXのサイズ=将来最大の設計容量とした上で、
仮想マシンのパーティションの作成時に全容量ではなく、
当面必要と思われる最低限の容量のパーティションを作成するようにしています。
こうすることで、ファイルの削除⇒別のファイルを作成する際に、
削除済領域のリサイクル効率が上がります。
また、実際に拡張が必要な場合も「ディスクの管理」を開き、
数クリックの操作だけで一瞬で拡張が完了するので、
VHDXファイルが肥大化する都度最適化する手間とシステム停止時間を考えると効率的です。- 回答としてマーク 小野田 2015年11月19日 1:40
- まず、仮想マシン上で「パーティションの縮小」を行い、