概要
ReadCache ドライバーにおいて、マッピング テーブルの情報を内蔵ディスクに書き込むときに、本来の領域を超えて書き込んでしまい、キャッシュ データが破壊されて Windows が不安定になったり、MEMORY_MANAGEMENT の BSOD が発生することがありました。
この不具合は ReadCache ドライバー 4.6.3.2 以降で修正されています。
詳細
ReadCache の端末側のドライバーは 1 分に 1 度、のうち変更された領域を内蔵ディスクに書き込んでいます。この処理に誤りがあり、マッピングテーブルの末尾のセクターが変更されていたときには、末尾のセクターだけを書き込むべきなのに、マッピングテーブルのサイズ分のセクターを書き込んでしまっていました。
マッピング テーブルは、キャッシュデータの「vDisk 上の位置」と「内蔵ディスク上の位置」の対応を管理するための表です。
この不具合が発生すると、「変更領域マップ履歴」や「キャッシュ データ」の情報が壊れてしまいます。その結果、端末が起動できなくなったり、Windows の動作が不安定になったり、MEMORY_MANAGEMENT の BSOD が発生したりします。
現象が発生したときの状況
端末が起動できないとき、サーバー側において vDisk の read フラグをオフにすると起動できるようになります。ログオン後に、VerifyCache を実行すると、次のようにキャッシュ不整合がたくさん発生していることが分かります。
C:\> "C:\Program Files\CO-CONV\ReadCache\VerifyCache.exe" z:\win10.1.avhd Info: vDisk ファイルを開きます。: z:\win10.1.avhd : === キャッシュ管理単位 256~7864319 (0x100~0x77ffff) を比較しています... 257番目のキャッシュ管理単位(キャッシュ中で1番目)で不一致発生 258番目のキャッシュ管理単位(キャッシュ中で2番目)で不一致発生 259番目のキャッシュ管理単位(キャッシュ中で3番目)で不一致発生 260番目のキャッシュ管理単位(キャッシュ中で4番目)で不一致発生 115457番目のキャッシュ管理単位(キャッシュ中で169番目)で不一致発生 115458番目のキャッシュ管理単位(キャッシュ中で170番目)で不一致発生 140801番目のキャッシュ管理単位(キャッシュ中で284番目)で不一致発生 : ==== 全キャッシュ管理単位 7864319 比較したキャッシュ管理単位: 152162 比較できなかった管理単位: 0 一致しなかったキャッシュ管理単位: 5143 ==== 処理終了しました。
キャッシュ不整合が出ていないときにも、ReadCacheClient cache コマンドを実行すると、変更領域マップ履歴の情報が壊れていることがあります。
C:\> "C:\Program Files\CO-CONV\ReadCache\ReadCacheClient.exe" cache : 変更領域マップ履歴: リビジョン 変更量 圧縮後のサイズ ------------ --------- ---------------- -1355148176 → -26742 0.0 KB 32,904 バイト リビジョン: 番号 作成日時 ハッシュ 変更量 ---- -------------------- ---------------- --------- 3 2017/10/25 14:25:43 5D44A3E837B83B68 ---.- MB -1355148176 2022/01/13 19:34:00 0100000000000000 0.0 KB
対策
ReadCache ドライバーをバージョン 4.6.3.2 以降に更新してください。