概要
ReadCacheManager.exe による update 処理に不具合があり、update 処理時に vDisk 内の「変更領域マップ」と呼ばれる領域のデータが不適切な状態となることがあります。この不適切な状態となると、それ以降 ReadCacheManager.exe による update コマンドおよび show コマンドの実行時に以下の様なエラーが表示され、処理が適切に行われません。
- 「変更領域マップを展開できませんでした」
- 「変更領域マップの読み込みに失敗しました」
この不具合の影響は、ReadCacheManager.exe コマンドを内部的に呼び出しているツールである ReadCacheManager_GUI.exe コマンドにも及びます。
詳細
vDisk 内には、ディスクの更新履歴を管理するための「変更領域マップ」という領域が複数あり、それぞれは過去のリビジョンと現在のリビジョンとの差分情報を保持しています。一方、保持できる変更領域マップの数には制限があるため、リビジョン更新処理を繰り返したことで変更領域マップの数が最大値に達した時には、古い方の2つの変更領域マップを1つにまとめる「マージ処理」を行なっています。この「マージ処理」に不具合があり、以下の様な限定的な条件の際に不適切な動作をしていました。
- vDisk 内に保持した変更領域マップの数が最大値に達していること。
- 「最新の変更領域マップ」を A、「最も古い変更領域マップ」を B、「古い方から2番めの変更領域マップ」を C としつつ、
「B を圧縮したサイズを x」
「C を圧縮したサイズを y」
「A と B をマージした後に圧縮したサイズを X」
「A と C とをマージした後に圧縮したサイズを Y」
としたとき、 int ((x + y)/512) > int ((X + Y)/512) となること。
このとき、マージ後の変更領域マップのうち最も古いものが適切にディスク上に保存されず、それ以降その変更領域マップにアクセスしようとした際にエラーとなります。
一般には、複数の変更領域マップをマージすると情報量が増えるため、通常は「x < X」「y < Y」となり、上記不等号が成立することはありません。かなり特殊なケースにおいてのみ上記条件は成立します。
対策
-
ReadCache4.0 のとき
「ReadCacheManager 4.0.0.4」をダウンロードし、サーバー側の ReadCacheManager.exe と置き換えてください。 -
ReadCache3.6 のとき
「ReadCacheManager 3.6.0.4」をダウンロードし、サーバー側の ReadCacheManager.exe と置き換えてください。 -
ReadCache3.5 のとき
ReadCache3.6 以降に更新してください。
ReadCacheManager.exe は通常は “C:\Program Files\CO-CONV\ReadCache” のフォルダにあります。
ReadCacheManager.exe の置き換えにあたってはサーバの再起動は不要です。
(ReadCache4 系列)
(ReadCache3 系列)
補足
エラーの例
c:\Program Files\CO-CONV\ReadCache> ReadCacheManager.exe show test.vhd
系列名: test
リビジョン: 10
変更領域マップ:
10 -> 10: 0/20467712 (ver 3500)
作成日時: 2013/03/05 15:53:50, ハッシュ: 51D69FF78B2119A0
編集セクタ数: 0
(略)
4 -> 10: 11179156/20467712 (ver 3500)
作成日時: 2013/03/05 15:50:23, ハッシュ: B85687F16678BF95
編集セクタ数: 2542471, 圧縮後: 344800 バイト (13.48%)
Error: 変更領域マップを展開できませんでした (offset=10491385344)
Error: 変更領域マップの読み込みに失敗しました (offset=0)
対処
もしご利用中の vDisk がこの症状を示す状態になってしまった時には、ReadCacheManager.exe ないしは ReadCache ディスク管理ツールで vDisk のリビジョン番号を再設定することで正常な状態に戻ります。(なお、リビジョンの設定処理をおこなうと、端末を次に起動したときに、端末側のキャッシュは一旦消去されます)