ディスク オフラインに時間がかかる事象について

こんにちは、Windows プラットフォーム サポートの加藤です。

最近、 ディスクをオフラインにするのに非常に時間がかかる というお問い合わせをいただきました。
そこで今回は、多くの世代のシャドウ コピーを保管している環境にて、ディスクのオフライン作業を行う際の考慮事項について ご紹介します。

下記のような運用状況において、ボリューム シャドウ コピー (VSS) 機能をご利用の場合に、シャドウ コピーが原因となって本事象が発生している可能性があります。

  • ボリュームの共有フォルダーのシャドウ コピーを、そのボリューム上に複数世代作成し保管している場合
  • ※ ボリュームのシャドウ コピーの記憶域を別のディスク上に保存しているディスクの場合は現時点でこのような事象が発生した報告はありません。
  • クラスター環境にて、上記同様にシャドウ コピーを作成したディスクのオンライン / オフラインを切り替えて運用を行っている場合

また、本事象はパフォーマンスの影響を受けやすいクラウド環境のストレージで発生することが多く報告されております。
シャドウ コピーを大量に作成しているお客様で特にクラウド環境やクラスター環境をご利用の場合は、本事象を避けるために、本ブログの内容を考慮に入れての運用をご検討ください。
 

シャドウ コピー とディスク オフライン作業

システムを運用する中で、新しいディスクのマウント作業やクラスター環境の運用などを行う際には、ディスクのオンライン / オフライン状態の切り替えを行うことがあると思います。
通常の環境であれば、環境自体を起動させた際にディスクがオンラインとなり、シャットダウン時にオフラインにする処理が行われるため、シャットダウンが遅くなることはありますが、ディスクのオフライン作業を意識することは少ないと思います。
しかしながら、クラスター環境やバックアップのためにディスクを一時的にマウントしたい場合など、OSが起動している状態で、一時的に利用するディスクを取り外す場合であれば、手動で作業を行うためディスクのオフライン作業を意識することになります。

ディスクのオフライン作業は、安全にディスクを取り外し可能な状態とするために、メモリ上から当該ディスクに行うデータ書き込みを終わらせたり、データの整合性を保つための確認処理を行います。

シャドウ コピーを保存しているディスクをオフラインとする際には、このディスクに対して差分をデータ退避する処理を終了し、シャドウ コピーの整合性を確認するための読み込み処理を行います。

具体的には、対象のボリュームに対して事前通知が行われ、通知を受けた Volsnap (VSS 用ドライバ) が、ボリューム上の Diff Area (ボリュームの差分データ) に対して、データの整合性を保つために、クリーンナップ処理や、Bitmap の確認処理などの、必要な処理を行います。
そのため、当該ディスクにシャドウ コピーが大量に保存されていると、全シャドウ コピーをブロック単位で確認するため、シャドウ コピーの世代数やデータ量が多ければ多いほど、上記の必要な処理に時間を要し、ディスクのオフライン作業に時間がかかっています。
なお、ドライブ レターの変更を行う際に関しても、一度ドライブを OS からアンマウントし、上記と類似した処理が行われるため、処理が遅くなる可能性があります。

クラスター環境の場合は、ディスクのオフライン処理が進まないことを影響して STOP エラーが発生することがあります。
(クラスターは、一部のクラスター リソースに対し異常を検知した際に復旧のために各リソースの再起動を行います。ディスクのオフライン処理が進まずこの再起動が一定時間内に完了しないとクラスターは復旧のために意図的に STOP エラー 0x9E を発生させることがあります)

また、サードパーティー制の製品を使ってオフライン、または、シャットダウンまでの時間を監視している場合は、タイムアウトが発生することがあります。
 


[タイトル] ボリューム シャドウ コピー サービス (VSS) について
[URL] https://blogs.technet.microsoft.com/askcorejp/2018/08/15/aboutvss/
[内容] シャドウ コピーを作成するサービスである、ボリューム シャドウコピー サービス (VSS ) についてご紹介しているブログになります。


 

対処策: 保存されるシャドウ コピーの世代数を減らす

本事象の対処策としては、保存されるシャドウ コピーの世代数を減らすことが有効となります。
シャドウ コピーには、大きく分けて "共有フォルダーのシャドウ コピー" と バックアップソフトなど "アプリケーションが自動で作成するシャドウ コピー " の2種類があり、どちらであるかによって制限方法が異なります。
 


[タイトル] vssadmin コマンドでシャドウ コピーが削除できない場合の対処方法について
[URL] https://blogs.technet.microsoft.com/askcorejp/2013/11/28/vssadmin-2096/
[内容] シャドウ コピーの種類についてと削除方法についてご紹介しているブログになります。


 

共有フォルダーのシャドウ コピーの制限手順

共有フォルダーのシャドウ コピーの世代数の上限を変更するには、以下のレジストリ値を編集します。
 

MaxShadowCopies の変更手順

  1. [スタート] – [ファイル名を指定して実行] をクリック、regedit と入力し、[OK] をクリックします。
  2. 以下のレジストリ キーを開く
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS\Settings
  3. メニュー バーより、[編集] – [新規] を選択し、[DWORD 値] をクリックします。
  4. MaxShadowCopies と入力し、Enter キーをクリックします。
  5. MaxShadowCopies を選択した状態で、メニュー バーより、[編集] – [修正] をクリックします。
  6. 設定する世代数を入力し、[OK] をクリックします。

 

なお、MaxShadowCopies の設定に関しては、共有フォルダーのシャドウ コピーが世代数の上限値まで保存されている状態で、Windows Server バックアップや読み取り chkdsk など、シャドウ コピーの自動作成を行うアプリケーションを実行すると、最も古い共有フォルダーのシャドウ コピーが削除されてしまう事象が報告されています。

そのため、シャドウ コピーを取得する世代の上限値を 1 つ多く設定する対策が推奨します。
詳しくは、下記の公開情報をご参照ください。
 


[タイトル] 最も古い共有フォルダーのシャドウコピーが削除されてしまう事象について
[URL] https://blogs.technet.microsoft.com/askcorejp/2018/09/03/oldest_shadowcopy_deletion/
[内容] 最も古い共有フォルダーのシャドウ コピーが削除されてしまう事象についてご紹介しているブログになります。


 

また、レジストリ値の変更はシステム構成が変更されてしまうので難しいという場合は、定期的に古いシャドウ コピーを削除していただいても有効です。
 

アプリケーションが自動で作成するシャドウ コピーの制限手順

共有フォルダーのシャドウ コピー以外の種類のシャドウ コピーの世代数を制限するレジストリ値はないため、シャドウ コピーの保存領域の制限を行う方法が有効となります。
 

VSS の記憶領域の制限方法

  1. サーバー マネージャーから [コンピュータの管理] 画面を開きます。
  2. 左ペインの [記憶域] - [ディスクの管理] を選択し、中央ペインで対象のボリュームを右クリックして、ボリュームのプロパティを開きます。
  3. [シャドウ コピー] タブを開き対象のボリュームを選択した状態で [設定] をクリックします。
  4. 記憶域の最大領域を変更する場合には [制限値] の値を修正します。

 

なお、こちらに関しても、定期的に古いシャドウ コピーを削除していただいても有効です。
 

対処策: クラスター環境においてタイムアウトの時間を延ばす

上述の通りクラスターは、ディスクのオフライン処理が進まず、各リソースの再起動が一定時間内に完了しないと、
タイムアウトとなり復旧のために意図的に STOP エラー 0x9E を発生させることがあります。

タイムアウトは、クラスター リソースのプロパティ DeadlockTimeout の 4 倍の値となります。
ディスク リソースの DeadlockTimeout が 5 分で設定されているため既定では 4 倍である 20 分が再起動のタイムアウト値となります。

20 分以内に再起動が終了しない場合に STOP エラー 0x9E が発生するため、タイムアウト値を延ばすことで、オフライン処理に対する待ち時間を延ばすことも可能です。
 

DeadlockTimeout を変更する方法

  1. 管理者権限で PowerShell を起動します

  2. 以下のコマンドレットで、使用しているリソース一覧を確認します。
    Get-ClusterResource

  3. 設定はリソースごとになります。上記で確認できた "Name" 列の情報を利用して、以下のコマンドレットを実行し、現在の設定値を確認します。単位はミリ秒になります。
    (Get-ClusterResource "Name").DeadlockTimeout

    仮に、"Name" が "クラスター ディスク 1" の場合、実行コマンドレットは以下になります。
    (Get-ClusterResource "クラスター ディスク 1").DeadlockTimeout

  4. 現在の設定値を確認後、以下のコマンドレットを実行することで設定変更を行います。以下は、DeadlockTimeout を 600000 ミリ秒 (10 分)に設定している例となります。
    (Get-ClusterResource "Name").DeadlockTimeout = 600000

    ※ 10 分に設定した場合、40 分以内に再起動が終了しない場合に STOP エラー 0x9E が発生します。

  5. 再度、設定変更できていることを確認します。
    (Get-ClusterResource "Name").DeadlockTimeout

  6. 該当リソースのオフライン/オンラインを実施し、設定変更を反映させます。

 

補足

StorSimple のボリュームの VSS スナップショットを設定する場合、Azure ストレージにもデータが保存される環境ではこの事象が発生しやすいことが報告されており、パフォーマンスに影響を与える可能性があるため、Diff Areaはローカル固定ボリュームに保存することが推奨されております。ローカル固定ボリュームは、Azure ストレージにはデータを保存しない、ボリュームとなります。
 


[タイトル] Microsoft Azure StorSimple 8000 Series Deployment Best Practices
[URL] https://gallery.technet.microsoft.com/Azure-StorSimple-8000-72b01b68" target="_brank">https://gallery.technet.microsoft.com/Azure-StorSimple-8000-72b01b68

[原文抜粋]
Volume Shadow Copy service (VSS)
When using Volume Shadow Copy service (VSS) in StorSimple volumes, we recommend that the diff area for VSS be in a StorSimple locally pinned volume. You could also use an external disk with sufficient capacity for your diff area.


 

いかがでしたでしょうか。
本ブログが少しでも皆様のお役に立てば幸いです。