none
Hyper-VのVHDXファイルのサイズについて RRS feed

  • 質問

  • Windows2012R2でHyper-Vを使用しております。仮想マシンではWindows2012R2を動かしています。この仮想マシンのVHDXファイルが1TBほどの大きさになっております。仮想マシン上では200GBほどしか使用していません。仮想マシンのOSのインストール後から特にディスクの最適化は行ってないです。

    VHDXファイルはホストOS上で使用しているファイルの何倍の大きさになるものでしょうか。

    サーバー上では以下のアプリをインストールしております。

    • SQLサーバー
    • Excel 2012
    • その他SQLサーバーを使用するアプリ

    仮想マシンは、もう一台のサーバーにレプリケーションを行っています。追加の回復ポイントをデフォルトの24に指定しております。VSSスナップショットの頻度は4時間を設定しています。

    仮想マシンの使用容量とVHDXファイルの大きさの目安と、回復ポイントを減らすことで容量を減らせるのか教えていただけると助かります。

    2015年11月12日 6:10

回答

  • ばんぶぅです。こんにちは。

    まず、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
    2015年11月18日 7:11

すべての返信

  • oooohです。

    仮想ディスクを作成する際に「固定」で作成してそのとき1TBにしたならずっと1TBです。

    ※「可変」な場合は使用容量=VHDX容量ですから多分「固定」で作成されたのではないでしょうか。

    また、VHDXのファイルサイズの目安というものは存在しません。

    「ファイルサーバにどのくらいの容量が必要ですか?」と問うようなものです。

    回復ポイントは仮想OS上の回復ポイントのことであれば、VHDXの容量には無関係と思われます。

    2015年11月17日 7:31
  • ご返信ありがとうございます。

    仮想ディスクは容量可変で1.5TBを指定して作成しました。OSだけ入れた当初のVHDXファイルは数十GBだったのですが、2か月ほどで1TBになっているので、何かまずいのではないかと思った次第です。

    回復ポイントは、仮想OSを動かしているサーバーの、レプリケーションの設定にある追加の回復ポイントのことです。わかりにくくてすみません。

    とりあえずもう少し様子を見てみようと思います。

    2015年11月17日 10:41
  • oooohです。

    >2か月ほどで1TBになっているので

    頻繁にI/Oが発生するシステムでは、見かけの容量が増えるのが早いのは

    ある程度は致し方ないかと思われます。

    >レプリケーションの設定にある追加の回復ポイント

    手元に環境がないので私の記憶が正しければですが、

    これは別ファイルに保持していたかと思いますので、

    消してもvhdx自体には、やはり影響は無いと思われます。

    2015年11月18日 4:01
  • 仮想OS上で動作しているアプリケーションが何かの都合で1TB分のディスクを使用したああと、ファイルを削除捨て板としても一端大きくなったVHDファイルはそのままです。勝手に小さくなることはありません。「その他のアプリ」の挙動を確認されるのが良いかと思います。


    甕星

    2015年11月18日 4:10
  • ばんぶぅです。こんにちは。

    まず、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
    2015年11月18日 7:11