MASAOKA

アスペルガー的発想からの独り言から、進歩しました。 https://sns.masaoka.jp/

ファイルシステムがぶっ壊れる原因

| 0件のコメント

色々なファイルシステムを使っていて、ファイルシステムが、ぶっ壊れる原因って
共通しているのが、I/Oのスピードがボルトネックになって、それが元、高負荷が原因になって、書き込みが間に合わず、バッファオーバーフローになったりしていと思う。

特に、スピードの遅いUSBメモリーに、システムの起動部をのせたりすると
システムの自動更新で、エラーが起こったり、FreeNASの場合。

高速なUSBメモリだと、そういうエラーは起こってない。

先日、Appleのtime machine云々の話で信頼できないような記載だったが、では、Windowsだと、信頼できるのかというと、実は、Windowsも似たようなことが大昔から、ずっと起こっている、原因は、やはりI/O負荷。

Windows Server2012 R2だと、イベントログに

ソース:volsnap
イベント ID:25
レベル:エラー
タスクの カテゴリ:なし
内容:
シャドウ コピーの記憶域を時間内に拡張できなかったためにボリューム (GUID) のシャドウ コピーは削除されました。
システムの IO 負荷を減らすか、またはシャドウ コピーされていないシャドウ コピーの記憶域ボリュームを選んでください。

となる。

これってtime machineと同レベル的な衝撃的な内容で、過去のバックアップ履歴がすべて削除されるってことなのだ。

つまり、記憶喪失になった宣言で、システム管理者だと、アルツハイマー患者を相手にしなきゃいけないレベルと同じで、毎日、WindowsXPのサポート期限云々を言い続けていた某氏を相手にするのと同じなのだ。

ボリュームシャドーコピーサービス(Volume Shadow Copy Service)、いわゆるVSSの技術を使用して取得されるバックアップって、VMWareの標準バックアップもこれを使っていて、早い話がかなり大変な状態ってことなのだが
過去の履歴が取れないということは、運用上、過去のある地点に、戻れないっていうことで、かなり痛い。三ヶ月前に編集した位置に戻りたいとかいう人が、たまにいたりするからだ。

VSSは、履歴を管理するために、Diff Areaにデータを書き込んでいて、そのデータを使うことで、任意の位置のバックアップの復元を実現しているわけだが、当然、Diff Areaが運用していたら、肥大化して、拡張される訳で、拡張が失敗すると、Diff Area内のデータは、不正な状態になって破壊される訳で、すべてのバックアップ履歴が削除ってことになる訳だ。

解決策で、シャドーコピーの対象になってない、別のディスク上のボリユームを選択することでI/O負荷が減る。

https://technet.microsoft.com/ja-jp/library/cc753975.aspx

ただし、これもストレージを増やせない場合だと、最初から最大の3GBで作成するように書き換えしとくと、拡張が起こらなくて失敗しない。

具体的にはレジストリエディターを起動し、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VolSnapに、MinDiffAreaFileSizeというDWORD(32ビット)値を追加。
そして値のデータに3000(0xbb8)と設定します。

Windows2012から、搭載されたデータ重複除去で、定期的にフルGC(Full GarbageCollection = フルガベージコレクション)と呼ばれるメンテナンス作業が、激重で

https://support.microsoft.com/en-us/kb/3066175

Deletion of Volume Shadow Copy Service (VSS) shadow
ボリューム シャドウ コピー サービス (VSS) のシャドウ コピーの削除

って書かれていて、解決策も書かれています。

To prevent Full GC, configure the following registry key:

HKLM\System\CurrentControlSet\Services\ddpsvc\Settings /v DeepGCInterval /t REG_DWORD /d 0xffffffff

レジストリキーを追加することで、重複除去をフルGCではなく、通常モードでしか動作しないように構成することにより、現象が回避される

コマンド・プロンプトで

reg add HKLM\System\CurrentControlSet\Services\ddpsvc\Settings /v DeepGCInterval /t REG_DWORD /d 0xffffffff

これをすると、フルGCは一切行われなくなります。アスペ的には、クリーンアップされない領域が発生するのが許せれません。

元に戻すには

reg delete HKLM\System\CurrentControlSet\Services\ddpsvc\Settings /v DeepGCInterval
ってします。

ついでに、フルGCを手動って場合は
PowerShellコマンドで
StartDedupJob D:\ Type GarbageCollection Full
Dドライブに対して、重複除去のフルGCを実行ってする訳で
このコマンドはすぐには実行されず、まずはキューに入れられます。
そして実行に必要なリソースが十分にあり、他のジョブが実行されていないタイミングで自動的に実行される仕組み。
Get-Dedupjob

で、確認できます。

結論として、ディスクは、高速なやつを使うのが、トラブルが起こらないということですね。

コメントを残す

%d人のブロガーが「いいね」をつけました。