(57)【要約】【課題】  一つのストレージデバイスしか持たず、巨大なキャッシュメモリも持たないＨＤＤにおいて、論理ブロックアドレスから物理ブロックアドレスへの変換による追記方式のデータ書き込みを実現する。【解決手段】  ステップ３０３によりキャッシュメモリ上のアドレス変換テーブルのサイズが閾値を越えていないか検査する。閾値を越えている場合にはステップ３０４で指定数分のエントリをLRU方式で選択し、ステップ３０５で選択したエントリをWRITEバッファに追加し、ステップ３０９でWRITEを実行することでアドレス変換テーブルをHDD上に退避する。【効果】  本発明により、WRITE時のヘッドのシーク時間を削減することによりＷＲＩＴＥ性能を交渉する効果がある。また通常のHDDのボリュームへのアクセスを許したまま過去のHDDの状態であるスナップショットのボリュームにアクセス可能なスナップショットを構築できる効果がある。また、HDDへの書き込みを行った後で書き込みを無効化することで、任意の時点のHDDの状態にロールバックできる効果がある。【選択図】  図３
2005293774.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
ホストからの書き込みコマンドを受信するステップ、
前記書き込みコマンドに含まれる論理ブロックアドレスを読み出すステップ、
前記読み出した論理ブロックアドレスを前記記憶媒体の物理ブロックアドレスに変換する際に、追記方式でデータ書き込みができるように、前記記憶媒体の未使用領域であり最も最近書き込みを行った物理ブロックアドレスの次の物理ブロックアドレスに変換するステップ、
前記変換した物理ブロックアドレスに対して前記ホストが指定したデータを書き込むステップ、
前記変換した物理ブロックアドレスに対応した管理領域に、前記ホストが指定した前記論理ブロックアドレスの値を書き込むステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２】
請求項１記載のディスク装置の制御方法において、前記制御部は、
ホストが連続した複数の論理ブロックアドレスに対して書き込みコマンドを発行している否かを検出するステップ、
連続した複数の論理ブロックアドレスに対する書き込みを検出をした場合に、前記連続した複数の論理ブロックアドレスを連続した複数の物理ブロックアドレスに変換するステップ、
前記連続した複数の物理ブロックアドレスに対応した一つの管理領域を割り当てるステップ、
前記一つの管理領域に、復元可能な符号化方式により前記ホストが指定した前記連続した複数の論理ブロックアドレスの値を書き込むステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項３】
請求項２記載のディスク装置の制御方法において、前記一つの管理領域に連続する複数の論理ブロックアドレスの値を書き込む際の符号化方式として、論理ブロックアドレスの開始アドレスと、連続して書き込むサイズとを用いること
を特徴とするディスク装置の制御方法。
【請求項４】
請求項１記載のディスク装置の制御方法において、前記制御部は、
前記論理ブロックアドレスと前記物理ブロックアドレスとの対応を一つのエントリとして一時記憶領域上のアドレス変換テーブルに保存するステップ、
前記アドレス変換テーブルに保存されたエントリ数を別途定める許容エントリ数と比較するステップ、
前記比較の結果、前記保存されたエントリ数が前記許容エントリ数を超えている場合に、別途定める退避数分だけ、最も最近使用していないエントリから使用していない順番にエントリを選択するステップ、
最も最近書き込みを行った物理ブロックアドレスの次の物理ブロックアドレスを選択するステップ、
前記選択した物理ブロックアドレスに前記選択したエントリの内容を書き出すことで一時記憶領域上のアドレス変換テーブルを前記記憶媒体上に退避するステップ、
前記選択した物理ブロックアドレスに対応した管理領域に、書き出したデータがアドレス変換テーブルのエントリであることを示すフラグを書き出すステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項５】
請求項４記載のディスク装置の制御方法において、前記制御部は、
前記選択した物理ブロックアドレスの値を前記一時記憶領域上に保存するステップを実行し、
前記アドレス変換テーブルを前記記憶媒体上に退避する際に、前記選択したエントリの内容に加え、前記一時記憶領域上に記録されている前回アドレス変換テーブルを前記記憶媒体上に退避した際に用いた物理ブロックアドレスの値も一緒に書き出すこと、
を特徴とするディスク装置の制御方法。
【請求項６】
請求項４記載のディスク装置の制御方法において、前記制御部は、
前記記憶媒体上の特定の領域上にある、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブルに、前記論理ブロックアドレスと前記物理ブロックアドレスとの対応を一つのエントリとして保持するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項７】
請求項６のディスク装置の制御方法において、
前記記憶媒体上の特定の領域上にある前記アドレス変換テーブルが前記記憶媒体の管理領域上にあることを特徴とするディスク装置の制御方法。
【請求項８】
請求項６記載のディスク装置の制御方法において、
前記記憶媒体上の特定の領域上にある前記アドレス変換テーブルが前記記憶媒体のユーザデータ領域上にあることを特徴とするディスク装置の制御方法。
【請求項９】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
ホストからの読み出しコマンドを受信するステップ、
前記読み出しコマンドに含まれる論理ブロックアドレスを読み出すステップ、
論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルから前記論理ブロックアドレスに対応するエントリを読み出すステップ、
前記読み出したエントリから物理ブロックアドレスを読み出すステップ、
前記記憶媒体の前記物理ブロックアドレスからデータを読み出すステップ、
前記読み出したデータを前記ホストに送信するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１０】
請求項９記載のディスク装置の制御方法において、前記制御部は、
前記一時記憶領域上のアドレス変換テーブルに前記論理ブロックアドレスに対応するエントリが存在しない場合に、前記記憶媒体上に退避したアドレス変換テーブルから前記論理ブロックアドレスに対応するエントリを検索するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１１】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
ホストからの読み出しコマンドを受信するステップ、
前記読み出しコマンドに含まれる論理ブロックアドレスを読み出すステップ、
前記記憶媒体上の特定の領域上にある、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブルから、前記論理ブロックアドレスに対応するエントリを読み出すステップ、
前記読み出したエントリから物理ブロックアドレスを読み出すステップ、
前記記憶媒体の前記物理ブロックアドレスからデータを読み出すステップ、
前記読み出したデータを前記ホストに送信するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１２】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化するステップ、
最も最近書き込みを行った物理ブロックアドレスを起点に、より小さな物理ブロックアドレス方向に前記アドレス変換テーブルを退避した前記記憶媒体のブロックを検索するステップ、
前記検索ステップにより発見したアドレス変換テーブルを退避したブロックを読み出して前記一時記憶領域上の前記アドレス変換テーブル上に復旧するステップ、
前記退避したブロックの次の物理ブロックアドレスを起点に前記最も最近書き込みを行った物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、前記物理ブロックアドレスに対応した管理領域から前記物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出すステップ、
前記物理ブロックアドレスと前記論理ブロックアドレスとの対応を一つのエントリにして、前記一時記憶領域上の前記アドレス変換テーブルに保存するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１３】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化するステップ、
前記記憶媒体の最も小さな物理ブロックアドレスを起点に、最も最近書き込みを行った物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、前記物理ブロックアドレスに対応した管理領域から前記物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出すステップ、
前記物理ブロックアドレスと前記論理ブロックアドレスとの対応を一つのエントリにして、前記アドレス変換テーブルに保存するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１４】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化するステップ、
前記記憶媒体の最も小さな物理ブロックアドレスを起点に、最も最近書き込みを行った物理ブロックアドレスに向かって、前記アドレス変換テーブルを退避したブロックを検索するステップ、
前記検索ステップにより発見したアドレス変換テーブルを退避したブロックを読み出して前記一時記憶領域上の前記アドレス変換テーブル上に追加するステップ、
前記アドレス変換テーブルに保存されたエントリ数を別途定める許容エントリ数と比較するステップ、
前記比較の結果、前記保存されたエントリ数が前記許容エントリ数を越えている場合に、別途定める削除数分だけ、最も最近使用していないエントリから順番にエントリを選択するステップ、
前記選択したエントリを前記アドレス変換テーブルから削除するステップ、
最も最後に読み込んだ退避したブロックの次の物理ブロックアドレスを起点に前記最も最近書き込みを行った物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、前記物理ブロックアドレスに対応した管理領域から前記物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出すステップ、
前記物理ブロックアドレスと前記論理ブロックアドレスとの対応を一つのエントリにして、前記一時記憶領域上の前記アドレス変換テーブルに保存するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１５】
請求項１２記載のディスク装置の制御方法において、前記ブロックに保存されたデータがユーザデータである場合にのみ前記物理ブロックアドレスと前記論理ブロックアドレスを読み出すことを特徴とするディスク装置の制御方法。
【請求項１６】
請求項１２記載のディスク装置の制御方法において、前記制御部は、
一時記憶領域上に保存した前記エントリを、前記記憶媒体上の特定の領域上にある、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブル上の、対応するエントリに保存するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１７】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
前記記憶媒体の処理する上限の物理ブロックアドレスの値を設定するステップ、
最も小さな物理ブロックアドレスを起点に、前記処理上限の物理ブロックアドレスに向かって各ブロックについて、ブロックの物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスの値と同一の論理ブロックアドレスに対して、前記物理ブロックアドレスよりも上位の物理ブロックアドレスにおいてホストが書き込んでいないか検査するステップ、
上位の物理ブロックアドレスにおいてホストが書き込んでいる場合に、同一の論理ブロックアドレスへの書き込みが、より上位の物理ブロックアドレスにより上書きされていることを示すダーティ・フラグを前記ブロックに対応した管理領域に書き込むステップ、
最も小さな物理ブロックアドレスを起点に、最も最近書き込まれた物理ブロックアドレスに向かって各ブロックについて、ダーティ・フラグの付いたブロックを上書きするように、ダーティ・フラグの付いていないブロックを下位の物理ブロックアドレスの方向に移動するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１８】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
前記記憶媒体の処理する上限の物理ブロックアドレスの値を設定するステップ、
論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上の第二のアドレス変換テーブルを初期化するステップ、
最も小さな物理ブロックアドレスを起点に、前記処理上限の物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、前記物理ブロックアドレスに対応した管理領域から前記物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出すステップ、
前記物理ブロックアドレスと前記論理ブロックアドレスとの対応を一つのエントリにして、前記第二のアドレス変換テーブルに保存するステップ、
ホストからの要求を受信する際に、前記第二のアドレス変換テーブルにより物理ブロックアドレスと論理ブロックアドレスとの変換を行う前記記憶媒体へのアクセス手段を有効化するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項１９】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
前記記憶媒体の処理する下限の物理ブロックアドレスの値を設定するステップ、
前記処理下限の物理ブロックアドレスを起点に、最も最近書き込んだ物理ブロックアドレスに向かって、書き込み済みのブロックを無効化して初期化するステップ、
論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化するステップ、
最も小さな物理ブロックアドレスを起点に、前記処理下限の物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、前記物理ブロックアドレスに対応した管理領域から前記物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出すステップ、
前記物理ブロックアドレスと前記論理ブロックアドレスとの対応を一つのエントリにして、前記アドレス変換テーブルに保存するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２０】
請求項１記載のディスク装置の制御方法において、前記制御部は、
装置の稼働時間を読み出すステップ、
前記読み出した稼働時間を、前記変換した物理ブロックアドレスに対応した前記管理領域に書き込むステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２１】
請求項２０記載のディスク装置の制御方法において、前記制御部は、
ヘッドの退避時もしくは電源遮断時に、前記装置の稼働時間を前記管理領域に保存するステップ、
装置の起動時に、前記管理領域に保存した稼働時間を読み出すステップ、
前記読み出した稼働時間を用いて、前記装置の稼働時間を初期化するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２２】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
前記記憶媒体上に存在しない論理ブロックアドレスへのホストからの書き込みコマンドもしくは読み出しコマンドを受信するステップ、
前記論理ブロックアドレスが制御コマンド受信用のアドレスかどうかを検査するステップ、
制御コマンド受信用アドレスであり、かつ前記受信したコマンドが書き込みコマンドである場合に、
前記書き込みコマンドのデータ領域中のデータを読み出すステップ、
前記データを当該ディスク装置の制御コマンドかどうかを検査するステップ、
制御コマンドである場合に、前記制御コマンドを実行するステップ、
を実行し、
制御コマンド受信用アドレスであり、かつ前記受信したコマンドが読み出しコマンドである場合に、
前記受信した論理ブロックアドレスに対応した前記記憶媒体の管理情報を読み出すステップ、
前記読み出した管理情報を前記ホストに送信するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２３】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
ホストから受信したコマンドが前記記憶媒体の内部データ構造への直接参照を要求する読み出しコマンドかどうかを検査するステップを実行し、
直接参照を要求する読み出しコマンドである場合に、
前記ホストが論理ブロックアドレスとして指定したアドレスを前記記憶媒体内部の物理ブロックアドレスとしてシークするステップ、
ブロックに記録したユーザデータと、前記ブロックに対応した管理領域に記録した管理データとを読み出すステップ、
前記ユーザデータと前記管理データとを前記ホストに送信するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２４】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備えるディスク装置の制御方法において
前記制御部は、
ホストから受信したコマンドが前記記憶媒体の管理領域に記録した管理データの読み出しコマンドかどうかを検査するステップを実行し、
管理データの読み出しコマンドである場合に、
前記ホストが論理ブロックアドレスとして指定したアドレスを前記記憶媒体内部の物理ブロックアドレスとして、ブロックに対応した管理領域に記録した管理データを読み出すステップ、
前記管理データを前記ホストに送信するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２５】
請求項１記載のディスク装置の制御方法において、前記制御部は、
ホストからの書き込みコマンドの発行間隔を検出するステップ、
前記ホストが最後に書き込みコマンドを発行してから別途定める期間だけ書き込みコマンドを発行していないかどうか検査するステップ、
を実行し、
前記別途定める期間書き込みコマンドを発行していない場合に、
最も最近書き込みを行った物理ブロックアドレスに対応した管理領域に、前記別途定める期間だけ書き込みコマンドを発行していないことを示す識別子を追加するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２６】
請求項２０記載のディスク装置の制御方法において、前記制御部は、
前記ホストからの前記書き込みコマンドから、コマンドの発行時刻を読み出すステップ、
前記読み出したコマンド発行時刻を、前記変換した物理ブロックアドレスに対応した前記管理領域に書き込むステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２７】
請求項９記載のディスク装置の制御方法において、前記制御部は、
前記物理ブロックアドレスに対応した管理領域から前記物理ブロックアドレスにホストが書き込んだ際に指定した論理ブロックアドレスを読み出すステップ、
前記読み出しコマンドから読み出した前記論理ブロックアドレスと、前記管理領域から読み出した前記論理ブロックアドレスとを比較するステップ、
前記比較が一致しない場合に、ホストに対してエラーを返すステップ、
を実行することを特徴とするディスク装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスク装置の制御方法に関し、障碍に強いディスク装置の制御方法に関する。
【背景技術】
【０００２】
従来のディスク装置（以下、HDDという）では、ホストが指定する論理ブロックアドレスをHDD内部の一意な物理ブロックアドレスに変換してHDD内部の記憶媒体にアクセスする。通常は、HDDのシリンダ数、ヘッド数、トラックあたりのセクタ数などをパラメータとした変換式を用いてアドレス変換を行う。このため、HDDに搭載されている処理能力の低いプロセッサや少ないメモリ容量などでも、十分高速に論理ブロックアドレスと物理ブロックアドレスとの間を相互に変換することができる。しかし、このような変換式を用いてアドレス変換を行うと、論理ブロックアドレスと物理ブロックアドレスとを一対一に変換する。これは、同一の論理ブロックアドレスに対して書き込みを行うと、以前書かれた内容を消去することを意味する。
【０００３】
通常はこのような動作で全く問題が無い。しかし、操作ミスやコンピュータウイルスにより消してはいけないデータが上書きされてしまうと、HDD上のデータが消失する。もしも、HDD外部にデータをバックアップしていない場合には、データが永久に失われてしまう。これは、ユーザの意図からすると不正なコマンドであっても、HDDの認識するコマンドとして正しければ、HDDはユーザの意図を解釈せずにコマンドを実行するために発生する。
【０００４】
大型ディスクアレイ装置では上記のような変換式によるアドレス変換とは異なるストレージデバイス上の記憶領域の割り当て方法が提案されている。米国特許第4,467,421号明細書“VIRTUAL STORAGE SYSTEM AND METHOD”では、ホストから書き込み要求を受信するごとに複数のストレージデバイスから必要な領域を確保してデータを記録する。これにより、通常のブロックデバイスのコマンドを使用している場合でも、既存の領域を消去せずに新たな領域へ書き込むことができる。
【０００５】
Pattersonらが提案したRAIDシステム(D. A. Patterson, G. A. Gibson, R. H. Katz, “A Case for Redundant Arrays of Inexpensive Disks (RAID)”, Proceedings of the international Conference on Management of Data(SIGMOD), June 1988, pp.109-116)におけるRAID level 4または5では、書き込みのたびにパリティを読み出して更新した後、パリティを書き戻すというライトペナルティが発生するため、書き込み性能が劣化する問題がある。この問題に対処する解決策として、米国特許第5,124,987号明細書“LOGICAL TRACK WRITE SCHEDULING SYSTEM FOR A PARALLEL DISK DRIVE ARRAY DATA STORAGE SUBSYSTEM”では、新たな書き込みデータとオンザフライで生成したパリティデータとを新たなストレージデバイス上の領域に書き込む提案がされている。
【０００６】
米国特許第4,467,421号明細書や米国特許第5,124,987号明細書では、ホストの指定する論理ブロックアドレスとストレージデバイス上の物理ブロックデバイスとの対応を管理するマッピングテーブルが必要になる。ストレージデバイスに障碍が発生していなくても、マッピングテーブルに障碍が発生するとストレージデバイス上のデータにアクセスできなくなる。マッピングテーブルは高い信頼性が必要であり、仮に何らかの事故によりマッピングテーブルに障碍が発生した場合でも、マッピングテーブルを再構築することが求められる。この問題の解決策として、特開平11-85589号公報に記載の「情報記憶装置および同装置に適用される管理データ再構築方法」が提案されている。
【０００７】
特開平11-85589号公報では、ホストが指定する論理ブロックアドレスの値をユーザデータ記憶領域上に保存し、マッピングテーブルに障碍が発生した場合には、ユーザデータ記憶領域上に記録した全ての論理ブロックアドレスの値を読み出すことで、マッピングテーブルを再構築する方法を提案している。また同時に、同一論理ブロックアドレスに対して複数の書き込みがある場合には、書き込みの順序を示す順序番号を生成し、この順序番号を論理ブロックアドレスの値とともにユーザデータ記憶領域上に保存し、マッピングテーブルに障碍が発生した場合にユーザデータ記憶領域上の順序番号から最新の書き込みを特定する方法を提案している。
【０００８】
米国特許第4,467,421号明細書や米国特許第5,124,987号明細書はホストからは単なるブロックデバイスに見えるストレージサブシステムの内部で新規の領域を割り当てる手法である。別の手法として、Rosenblumらが提案したLog-Structured File System (M. Rosenblum, and J. K. Ousterhout, “The Design and Implementation of a Log-Structured File System”, ACM Transactions on Computer System, Vol. 10, No. 1, Feb 1992, pp.3-25)がある。Log-Structured File System(以下LFS)では、通常のブロックデバイスに対してファイルシステムのレベルで追記書きするようにブロックの配置を行う。LFSはもともとプロセッサや半導体メモリの高速化に対してHDDの高速化が進まないことへの解決策として考えられた手法の一つである。通常のファイルシステムでは、HDDへの書き込み時には、ヘッドのシーク時間の分だけホストからHDDへのデータ転送に使える時間が少なくなる。これに対してLFSでは、ファイルの削除などを管理するファイルシステムの管理情報であるメタ情報も含めてファイルシステムに対するあらゆる処理をHDDにログとして追記書きする。これにより、書き込み時のヘッドシーク時間を削減してシーケンシャル書き込みすることで書き込みの高速化を実現する。
【０００９】
【特許文献１】米国特許第4,467,421号明細書
【特許文献２】米国特許第5,124,987号明細書
【特許文献３】特開平11-85589号公報
【非特許文献１】Proceedings of the international Conference on Management of Data(SIGMOD), June 1988, pp.109-116
【非特許文献２】ACM Transactions on Computer System, Vol. 10, No. 1, Feb 1992, pp.3-25
【発明の開示】
【発明が解決しようとする課題】
【００１０】
米国特許第 4,467,421号明細書や米国特許第 5,124,987号明細書は大型のディスクアレイ装置を前提としており、複数のストレージデバイスや巨大なキャッシュメモリが必須となる。このため、一つのストレージデバイスしか持たず、巨大なキャッシュメモリも持たないHDDには適用できない。また、LFSのように書き込み時のヘッドシーク時間が少なくなるように領域を確保するように領域を割り当てるような制御をする訳ではないので、必ずしも書き込みが高速にならない。
【００１１】
システムに何らかの障碍が発生した場合などには、復旧のために正常動作していた時点でのストレージのイメージが必要になることがある。しかし、HDDの大容量化に伴いストレージサブシステムからテープなどの外部デバイスへのバックアップ時間と、バックアップからストレージサブシステムへの復旧する時間が増大している。望ましくはストレージサブシステムに全ての更新の履歴を蓄積しておき、任意の時点でのストレージのイメージであるスナップショットを高速に生成し、ホストからアクセス可能にすべきである。しかし、米国特許第4,467,421号明細書や米国特許第5,124,987号明細書には、このようなスナップショットの機能が存在しない。
【００１２】
特開平11-85589号公報によるマッピングテーブルの構築方法では、やはり前提条件としてマッピングテーブル全体を一度に読み込める巨大なメモリが必要になる。このため、このような巨大なメモリを搭載できないHDDには適用できない。さらに、マッピングテーブルの再構築の際にはストレージデバイス上に記録した全ての論理ブロックアドレスの値を読み出さねばならないため、非常に長い処理時間が必要になる。ごく稀に発生するマッピングテーブル障碍からの復帰のために長時間時間をかけて再構築しても良い場合には、この長い処理時間を許容できるかも知れない。しかし、任意の時点でのスナップショットを構築するような処理を考えると、このような処理は頻繁に発生する可能性があるため、長い処理時間を掛けることを許容できない。
【００１３】
LFSはファイルシステムであるためLFSに対応したOSでしか利用できず、任意のOSや任意のファイルシステム、さらにはブロックデータの保存には適用することができない。また、ファイルの消去によりある領域が不要になると、クリーナプロセスがその領域を回収して、再び未使用領域として再利用可能にする。このため、スナップショットの機能を実現することができない。
【００１４】
本発明の第一の目的は、ホストが指定する論理ブロックアドレスの値に関わらず、既存のデータの末尾に追記式にデータを書き込み、論理ブロックアドレスと物理ブロックアドレスとの対応をアドレス変換テーブルで管理する、ディスク装置の制御方法を提供することである。
【００１５】
本発明の第二の目的は、連続した複数の論理ブロックアドレスへの書き込みの場合に、既存のデータの末尾に連続した複数の物理ブロックアドレスを確保して追記式にデータを書き込み、論理ブロックアドレスと物理ブロックアドレスとの対応を連続アドレスへの書き込みであることを利用した符号化を行ったアドレス変換テーブルで管理する、ディスク装置の制御方法を提供することである。
【００１６】
本発明の第三の目的は、一時記憶領域上のアドレス変換テーブルに登録されたエントリ数がある閾値を超えた場合、最も最近使用していないエントリから使用していない順番に退避数分のエントリを、既存のデータの末尾に追記式に書き込んで退避する、ディスク装置の制御方法を提供することである。
【００１７】
本発明の第四の目的は、アドレス変換テーブルを退避する際に、前回アドレス変換テーブルを退避した物理ブロックアドレスの値も一緒に退避する、ディスク装置の制御方法を提供することである。
【００１８】
本発明の第五の目的は、HDDの記憶媒体上の特定の領域において、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブルの管理を行う、ディスク装置の制御方法を提供することである。
【００１９】
本発明の第六の目的は、ホストが指定する論理ブロックアドレスの値によりアドレス変換テーブルを検索して論理ブロックアドレスの値に対応した物理ブロックアドレスの値を読み出し、その物理ブロックアドレスからデータを読み出す、ディスク装置の制御方法を提供することである。
【００２０】
本発明の第七の目的は、ホストが指定した論理ブロックアドレスの値がアドレス変換テーブル上に存在しない場合に、HDDの記憶媒体上に退避したアドレス変換テーブルから論理ブロックアドレスの値に対応した物理ブロックアドレスの値を検索する、ディスク装置の制御方法を提供することである。
【００２１】
本発明の第八の目的は、HDDの記憶媒体上の特定の領域において、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブルを検索して、ホストが指定した論理ブロックアドレスの値に対応した物理ブロックアドレスの値を読み出す、ディスク装置の制御方法を提供することである。
【００２２】
本発明の第九の目的は、最も最後にHDDの記憶媒体上に退避したアドレス変換テーブルと、アドレス変換テーブルを退避した以降に書き込んだ、各ブロックの物理ブロックアドレスの値と、ブロックに対応した管理領域に記録した論理ブロックアドレスの値とから、アドレス変換テーブルの再構築を行う、ディスク装置の制御方法を提供することである。
【００２３】
本発明の第十の目的は、HDDの記憶媒体の先頭アドレスから末尾アドレスに向かって、各ブロックの物理ブロックアドレスの値と、ブロックに対応した管理領域に記録した論理ブロックアドレスの値とから、アドレス変換テーブルの再構築を行う、ディスク装置の制御方法を提供することである。
【００２４】
本発明の第十一の目的は、HDDの記憶媒体の先頭アドレスから末尾アドレスに向かって、退避したアドレス変換テーブルと、最後にアドレス変換テーブルを読み込んだアドレスから末尾アドレスに向かって、各ブロックの物理ブロックアドレスの値と、ブロックに対応した管理領域に記録した論理ブロックアドレスの値とから、アドレス変換テーブルの再構築を行う、ディスク装置の制御方法を提供することである。
【００２５】
本発明の第十二の目的は、HDDの記憶媒体の物理ブロックアドレスの先頭から別途定める物理ブロックアドレスの範囲で、個々のブロックについて同一の論理ブロックアドレスに対して上位の物理ブロックアドレスで書き込みがなされていないか検査し、書き込まれている場合にはそのブロックを上書きするようにデータをシフトすることで、記憶媒体上の領域を再利用する、ディスク装置の制御方法を提供することである。
【００２６】
本発明の第十三の目的は、HDDの過去の状態であるスナップショットへのアクセスが可能な、ディスク装置の制御方法を提供することである。
【００２７】
本発明の第十四の目的は、HDDへの書き込み内容を無効化し、過去の状態に戻すことが可能な、ディスク装置の制御方法を提供することである。
【００２８】
本発明の第十五の目的は、ブロックへの書き込みの際にブロックの管理領域にHDDの稼働時間を書き込む、ディスク装置の制御方法を提供することである。
【００２９】
本発明の第十六の目的は、通常の書き込みコマンドや読み出しコマンドを用いてHDDの管理領域へのアクセスが可能な、ディスク装置の制御方法を提供することである。
【００３０】
本発明の第十七の目的は、HDDの記録媒体に記録した内部データ構造にアクセス可能な、ディスク装置の制御方法を提供することである。
【００３１】
本発明の第十八の目的は、HDDの記録媒体の各ブロックに対応する仮領域に記録した管理データを読み出し可能な、ディスク装置の制御方法を提供することである。
【００３２】
本発明の第十九の目的は、一定期間ホストからの書き込み要求が存在しない場合に、最後に書き込んだブロックの管理領域に識別子を追加可能な、ディスク装置の制御方法を提供することである。
【００３３】
本発明の第二十の目的は、ブロックへの書き込みの際にブロックの管理領域にホストが指定する書き込み時刻を書き込む、ディスク装置の制御方法を提供することである。
【課題を解決するための手段】
【００３４】
本発明では、書き込み要求においてホストが指定する論理ブロックアドレスをHDD内部の記憶媒体の物理ブロックアドレスに変換する際に、既存データの末尾に新規データを追加するようにアドレス変換を行うとともに、論理ブロックアドレスと物理ブロックアドレスの対応表を管理し、読み出し要求において論理ブロックアドレスと物理ブロックアドレスの対応表から要求された論理ブロックアドレスに対して最も最近変換した物理ブロックアドレスからデータを読み出すように制御する。
【００３５】
本発明のディスク装置の制御方法は、記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込み又は読み出し制御を行う制御部とを備え、前記制御部は、ホストからの書き込みコマンドを受信するステップ、書き込みコマンドに含まれる論理ブロックアドレスを読み出し、読み出した論理ブロックアドレスを物理ブロックアドレスに変換する際に、追記方式でデータ書き込みができるように未使用領域であり最も最近書き込みを行った物理ブロックアドレスの次の物理ブロックアドレスに変換し、変換した物理ブロックアドレスに対してホストが指定したデータを書き込み、変換した物理ブロックアドレスに対応した管理領域に、ホストが指定した論理ブロックアドレスの値を書き込む処理を行う。
【００３６】
ホストが連続した複数の論理ブロックアドレスに対して書き込みコマンドを発行していることを検出した場合には、連続した複数の論理ブロックアドレスを連続した複数の物理ブロックアドレスに変換し、連続した複数の物理ブロックアドレスに対応した一つの管理領域を割り当て、一つの管理領域に、復元可能な任意の符号化方式によりホストが指定した連続した複数の論理ブロックアドレスの値を書き込むのが好ましい。符号化方式としては、論理ブロックアドレスの開始アドレスと連続して書き込むサイズを用いることができる。
【００３７】
制御部は、また、論理ブロックアドレスと物理ブロックアドレスとの対応、もしくは連続した複数の論理ブロックアドレスと連続した複数の物理ブロックアドレスとの対応を一つのエントリとして一時記憶領域上のアドレス変換テーブルに保存し、アドレス変換テーブルに保存されたエントリ数を別途定める許容エントリ数と比較し、比較の結果、保存されたエントリ数が許容エントリ数を超えている場合に、別途定める退避数分だけ、最も最近使用していないエントリから使用していない順番にエントリを選択し、最も最近書き込みを行った物理ブロックアドレスの次の物理ブロックアドレスを選択し、選択した物理ブロックアドレスに選択したエントリの内容を書き出すことで一時記憶領域上のアドレス変換テーブルを記憶媒体上に退避し、選択した物理ブロックアドレスに対応した管理領域に、書き出したデータがアドレス変換テーブルのエントリであることを示すフラグを書き出す処理を行う。
【００３８】
選択した物理ブロックアドレスの値を一時記憶領域上に保存し、アドレス変換テーブルを記憶媒体上に退避する際に、選択したエントリの内容に加え、一時記憶領域上に記録されている前回アドレス変換テーブルを記憶媒体上に退避した際に用いた物理ブロックアドレスの値も一緒に書き出してもよい。記憶媒体上の特定の領域上にある、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブルに、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保持してもよい。アドレス変換テーブルは、記憶媒体の管理領域上、あるいはユーザデータ領域上に設けることができる。
【００３９】
制御部は、また、ホストからの読み出しコマンドを受信し、読み出しコマンドに含まれる論理ブロックアドレスを読み出し、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルから論理ブロックアドレスに対応するエントリを読み出し、読み出したエントリから物理ブロックアドレスを読み出し、記憶媒体の物理ブロックアドレスからデータを読み出し、読み出したデータをホストに送信する処理を行う。一時記憶領域上のアドレス変換テーブルに論理ブロックアドレスに対応するエントリが存在しない場合には、記憶媒体上に退避したアドレス変換テーブルから論理ブロックアドレスに対応するエントリを検索する。
【００４０】
本発明によると、制御部は、また、ホストからの読み出しコマンドを受信し、読み出しコマンドに含まれる論理ブロックアドレスを読み出し、記憶媒体上の特定の領域上にある、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブルから、論理ブロックアドレスに対応するエントリを読み出し、読み出したエントリから物理ブロックアドレスを読み出し、記憶媒体の物理ブロックアドレスからデータを読み出し、読み出したデータをホストに送信する処理を行う。
【００４１】
物理ブロックアドレスに対応した管理領域から物理ブロックアドレスにホストが書き込んだ際に指定した論理ブロックアドレスを読み出し、読み出しコマンドから読み出した論理ブロックアドレスと、管理領域から読み出した論理ブロックアドレスとを比較し、比較が一致しない場合に、ホストに対してエラーを返す。
【００４２】
制御部は、また、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化し、最も最近書き込みを行った物理ブロックアドレスを起点に、より小さな物理ブロックアドレス方向にアドレス変換テーブルを退避したブロックを検索し、検索ステップにより発見したアドレス変換テーブルを退避したブロックを読み出して一時記憶領域上のアドレス変換テーブル上に復旧し、退避したブロックの次の物理ブロックアドレスを起点に最も最近書き込みを行った物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、物理ブロックアドレスに対応した管理領域から物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出し、物理ブロックアドレスと論理ブロックアドレスとの対応を一つのエントリにして、一時記憶領域上のアドレス変換テーブルに保存する処理を行う。
【００４３】
制御部は、また、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化し、最も小さな物理ブロックアドレスを起点に、最も最近書き込みを行った物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、物理ブロックアドレスに対応した管理領域から物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出し、物理ブロックアドレスと論理ブロックアドレスとの対応を一つのエントリにして、アドレス変換テーブルに保存する処理を行う。
【００４４】
制御部は、また、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化し、最も小さな物理ブロックアドレスを起点に、最も最近書き込みを行った物理ブロックアドレスに向かって、アドレス変換テーブルを退避したブロックを検索し、検索ステップにより発見したアドレス変換テーブルを退避したブロックを読み出して一時記憶領域上のアドレス変換テーブル上に追加し、アドレス変換テーブルに保存されたエントリ数を別途定める許容エントリ数と比較し、比較の結果、保存されたエントリ数が許容エントリ数を越えている場合に、別途定める削除数分だけ、最も最近使用していないエントリから順番にエントリを選択し、選択したエントリをアドレス変換テーブルから削除し、最も最後に読み込んだ退避したブロックの次の物理ブロックアドレスを起点に最も最近書き込みを行った物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、物理ブロックアドレスに対応した管理領域から物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出し、物理ブロックアドレスと論理ブロックアドレスとの対応を一つのエントリにして、一時記憶領域上のアドレス変換テーブルに保存する処理を行う。
【００４５】
ブロックに保存されたデータがユーザデータである場合にのみ、物理ブロックアドレスと論理ブロックアドレスを読み出す。また、一時記憶領域上に保存したエントリを、記憶媒体上の特定の領域上にある、ホストが指定可能な全ての論理ブロックアドレスと物理ブロックアドレスとの対応を保持可能なアドレス変換テーブル上の、対応するエントリに保存する。
【００４６】
制御部は、また、処理する上限の物理ブロックアドレスの値を設定し、最も小さな物理ブロックアドレスを起点に、処理上限の物理ブロックアドレスに向かって各ブロックについて、ブロックの物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスの値と同一の論理ブロックアドレスに対して、処理対象の物理ブロックアドレスよりも上位の物理ブロックアドレスにおいてホストが書き込んでいないか検査し、上位の物理ブロックアドレスにおいてホストが書き込んでいる場合に、同一の論理ブロックアドレスへの書き込みが、より上位の物理ブロックアドレスにより上書きされていることを示すダーティ・フラグをブロックに対応した管理領域に書き込み、最も小さな物理ブロックアドレスを起点に、最も最近書き込まれた物理ブロックアドレスに向かって各ブロックについて、ダーティ・フラグの付いたブロックを上書きするように、ダーティ・フラグの付いていないブロックを下位の物理ブロックアドレスの方向に移動する処理を行う。
【００４７】
制御部は、また、処理する上限の物理ブロックアドレスの値を設定し、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上の第二のアドレス変換テーブルを初期化し、最も小さな物理ブロックアドレスを起点に、処理上限の物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、物理ブロックアドレスに対応した管理領域から物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出し、物理ブロックアドレスと論理ブロックアドレスとの対応を一つのエントリにして、第二のアドレス変換テーブルに保存し、ホストからの要求を受信する際に第二のアドレス変換テーブルにより物理ブロックアドレスと論理ブロックアドレスとの変換を行う記憶媒体へのアクセス手段を有効化する処理を行う。
【００４８】
制御部は、また、処理する下限の物理ブロックアドレスの値を設定し、処理下限の物理ブロックアドレスを起点に、最も最近書き込んだ物理ブロックアドレスに向かって、書き込み済みのブロックを無効化して初期化し、論理ブロックアドレスと物理ブロックアドレスとの対応を一つのエントリとして保存する一時記憶領域上のアドレス変換テーブルを初期化し、最も小さな物理ブロックアドレスを起点に、処理下限の物理ブロックアドレスに向かって、ブロックの物理ブロックアドレスと、物理ブロックアドレスに対応した管理領域から物理ブロックアドレスに書き込んだ際にホストが指定した論理ブロックアドレスとを読み出し、物理ブロックアドレスと論理ブロックアドレスとの対応を一つのエントリにして、アドレス変換テーブルに保存する処理を行う。
【００４９】
制御部は、また、装置の稼働時間を読み出し、読み出した稼働時間を、変換した物理ブロックアドレスに対応した管理領域もしくは連続した複数の物理ブロックアドレスに対応した一つの管理領域に書き込む処理を行う。そして、ヘッドの退避時もしくは電源遮断時に、装置の稼働時間を管理領域に保存し、装置の起動時に、管理領域に保存した稼働時間を読み出し、読み出した稼働時間を用いて、装置の稼働時間を初期化する。ホストからの書き込みコマンドから、コマンドの発行時刻を読み出し、読み出したコマンド発行時刻を、変換した物理ブロックアドレスに対応した管理領域もしくは連続した複数の物理ブロックアドレスに対応した一つの管理領域に書き込む。
【００５０】
制御部は、また、記憶媒体上に存在しない論理ブロックアドレスへのホストからの書き込みコマンドもしくは読み出しコマンドを受信し、論理ブロックアドレスが制御コマンド受信用のアドレスかどうかを検査し、制御コマンド受信用アドレスであり、かつ受信したコマンドが書き込みコマンドである場合に、書き込みコマンドのデータ領域中のデータを読み出し、データを制御コマンドかどうかを検査し、制御コマンドである場合に、制御コマンドを実行し、制御コマンド受信用アドレスであり、かつ受信したコマンドが読み出しコマンドである場合に、受信した論理ブロックアドレスに対応した記憶媒体の管理情報を読み出し、読み出した記憶媒体の管理情報をホストに送信する処理を行う。
【００５１】
制御部は、また、ホストからコマンドが記憶媒体の内部データ構造への直接参照を要求する読み出しコマンドかどうかを検査し、直接参照を要求する読み出しコマンドである場合に、ホストが論理ブロックアドレスとして指定したアドレスをHDD内部の物理ブロックアドレスとしてシークし、ブロックに記録したユーザデータと、ブロックに対応した管理領域に記録した管理データとを読み出し、ユーザデータと前記管理データとをホストに送信する。
【００５２】
制御部は、また、ホストからのコマンドが記憶媒体の管理領域に記録した管理データの読み出しコマンドかどうかを検査し、管理データの読み出しコマンドである場合に、ホストが論理ブロックアドレスとして指定したアドレスを記憶媒体内部の物理ブロックアドレスとして、ブロックに対応した管理領域に記録した管理データを読み出し、管理データをホストに送信する処理を行う。
【００５３】
制御部は、また、ホストからの書き込みコマンドの発行間隔を検出し、ホストが最後に書き込みコマンドを発行してから別途定める期間だけ書き込みコマンドを発行していないかどうか検査し、別途定める期間書き込みコマンドを発行していない場合に、最も最近書き込みを行った物理ブロックアドレスに対応した管理領域に、別途定める期間だけ書き込みコマンドを発行していないことを示す識別子を追加する処理を行う。
【発明の効果】
【００５４】
本発明によると、小さなキャッシュメモリしか持たないHDDにおいても、ホストが指定するLBAの値に関わらずHDDの記憶媒体にデータを上書きすることなく追記式で書き込むディスク制御を実現することが可能となり、障碍に強いディスク装置を提供することができる。
【発明を実施するための最良の形態】
【００５５】
発明の実施の形態について図面を参照して説明する。なお、同一の参照番号は同じ構成要素を示す。
【００５６】
図１は、本発明のデータを上書きすることのない追記方式によるディスク装置の制御方法の第一の実施の形態のソフトウェア処理レイヤのブロック図である。このソフトウェア処理レイヤ１００は、ホストとHDDの通信プロトコルであるATAやSCSIを処理するプロトコル処理レイヤ１０１、ホストが指定する論理ブロックアドレス（LBA）をログ形式でアクセスする物理ブロックアドレス（PBA）に変換するログ変換レイヤ１０２、指定したPBAが欠陥セクタである場合に予備のセクタと交替するための欠陥セクタ交替レイヤ１０３、指定したPBAでHDDの記憶媒体上にアクセスする物理アクセス処理１０４からなる。
【００５７】
図２は、従来の技術によるHDDの制御方法のソフトウェア処理レイヤのブロック図である。図２において、２０１はホストが指定するLBAを数式処理によりPBAに変換するアドレス変換レイヤである。
【００５８】
図３は、本発明によるディスク装置の制御方法の第一の実施の形態によるWRITE処理のPAD図である。図３において、３００は本発明によるディスク装置の制御方法の第一の実施の形態によるWRITE処理のPAD図、３０１はWRITEコマンド受信ステップ、３０２はWRITEバッファ初期化ステップ、３０３はHDDのメモリ上のアドレス変換テーブルのサイズが別途定める閾値を超えているかどうか検査するステップ、３０４は別途指定するエントリ数分だけ最も使っていないエントリを選択するステップ、３０５は選択したエントリをWRITEバッファに追加するステップ、３０６はホストが指定するLBAをHDD内のPBAに変換するステップ、３０７は変換したアドレスをアドレス変換テーブルに追加するステップ、３０８はWRITEコマンド中のユーザデータをWRITEバッファに追加するステップ、３０９はWRITEバッファの内容をHDDの記憶媒体に書き込むステップ、３１０はWRITEの実行結果をホストに返すステップ、である。
【００５９】
図４は、本発明によるディスク装置の制御方法の第一の実施の形態によるデータフォーマットである。図４において、４００は本発明による第一の実施の形態のデータフォーマット、４０１はHDDの記録媒体のアドレス空間のイメージ、４０２は一回の書き込み単位、４０３はユーザデータ、４０４はフラグ、４０５はHDDの記録媒体上に退避したアドレス変換テーブルの退避データ、４０６はフラグ内部のデータ構造、４０７はHDDのキャッシュメモリ上のアドレス変換テーブル、４０８はHDDの記憶媒体上に退避したアドレス変換テーブルを管理するHDDのキャッシュメモリ上の物理ブロックアドレス管理テーブル、である。
【００６０】
図５は、本発明によるディスク装置の制御方法の第一の実施の形態によるREAD処理のPAD図である。図５において、５００は本発明によるディスク装置の制御方法の第一の実施の形態におけるREAD処理のPAD図、５０１はREADコマンドの受信ステップ、５０２はREADバッファの初期化ステップ、５０３はHDDのメモリ上のアドレス変換テーブルに指定したLBAが存在するか検査するステップ、５０４はHDDのメモリ上のアドレス変換テーブルからPBAを読み出すステップ、５０５はHDDの記憶媒体に退避したアドレス変換テーブルからPBAを読み出すステップ、５０６はREADバッファにHDDの記憶媒体から読み込むステップ、５０７はREADの実行結果をホストに返すステップ、である。
【００６１】
図１４は、本発明による追記方式HDDの第一の実施の形態のハードウェアのブロック図である。図１４において、１４００は本発明による追記方式HDDの第一の実施の形態のハードウェアのブロック図、１４０１はフラッシュロム、１４０２は主記憶、１４０３はキャッシュメモリ、１４０４はマイクロプロセッサ（MPU）、１４０５はハードディスクコントローラ（HDC）およびSCSIプロトコルコントローラ（SPC）、１４０６はサーボコントローラ、１４０７はリードライトチャネル、である。
【００６２】
図１５は、SCSIのWRITE（１６）コマンドである。図１５において、１５００はSCSIのWRITE（１６）コマンド、１５０１はオペレーションコード（OPERATION CODE）、１５０２は論理ブロックアドレス（LOGICAL BLOCK ADDRESS：LBA）、１５０３は転送長（TRANSFER LENGTH）、である。
【００６３】
図１６は、SCSIのREAD（１６）コマンドである。図１６において、１６００はSCSIのREAD（１６）コマンド、１６０１はオペレーションコード（OPERATION CODE）、１６０２は論理ブロックアドレス（LOGICAL BLOCK ADDRESS：LBA）、１６０３は転送長（TRANSFER LENGTH）、である。
【００６４】
図１７は、片方向リンクトリストの概念図である。図１７において、１７００は片方向リンクトリストの概念図、１７０１は今回のアドレス変換テーブルの待避ブロックから前回のアドレス変換テーブルの待避ブロックへのリンク、である。
【００６５】
図１８は、双方向リンクトリストの概念図である。図１８において、１８００は双方向リンクトリストの概念図、１８０１は前回のアドレス変換テーブルの待避ブロックから今回のアドレス変換テーブルの待避ブロックへのリンク、である。
【００６６】
本実施の形態では、ホストが指定する論理ブロックアドレス（LBA）の値に関わらずHDDの記録媒体上で既存データの末尾に追記書きするように記録媒体の物理ブロックアドレス（PBA）を割り当てて、HDDの制御を行う所に特徴がある。
【００６７】
図２の従来の技術によるHDDのソフトウェア処理レイヤは、大きく分けてプロトコル処理１０１、アドレス変換２０１、欠陥セクタ交替１０３、物理アクセス１０４、の四つからなる。プロトコル処理１０１は、ホストがHDDとの通信を行う際に用いるプロトコルであるATAやSCSIなどのコマンドの解釈を行ない、HDD内部の制御コマンドへの翻訳を行う。アドレス変換２０１は、ホストが指定したLBAを数式処理してPBAに変換する。欠陥セクタ交替１０３では、アドレス変換２０１により変換したPBAの指定するセクタが欠陥セクタである場合に、代替用の正常なセクタにPBAを入れ換える。そして物理アクセス１０４は、PBAが指定するセクタに対して読み書きを行う。
【００６８】
これに対して、本実施の形態のHDDのソフトウェア処理レイヤは、図１に示す通り従来の技術に対して、アドレス変換２０１の代わりにログ変換１０２によりLBAをPBAに変換する所に特徴がある。ログ変換１０２ではLBAを、HDDの記憶媒体上で既存のデータの末尾に追記書き方式でアクセスするように変換する。このようにアドレス変換２０１の代わりに、ログ変換１０２によりアドレス変換を行うことにより、プロトコル処理１０１と欠陥セクタ交替１０３に既存のプログラムを使用できるため、プログラム開発工数を削減できる。
【００６９】
図１４により、本発明による追記方式HDDの第一の実施の形態の動作の概要を説明する。追記方式HDDの制御プログラムはフラッシュロム１４０１に格納されている。MPU１４０４に電源を投入すると、MPU１４０４は制御プログラムをフラッシュロム１４０１から読み出し主記憶１４０２に展開する。この制御プログラムには図３のWRITE処理や図５のREAD処理などが含まれている。
【００７０】
ホストからのコマンドの受信や応答の送信はHDC/SPC１４０５が行う。このコマンドには図１５のWRITE（１６）コマンドや図１６のREAD（１６）コマンドなどが含まれる。SPCはSCSIプロトコルにおけるコマンドやデータの送受信を行う。図３のWRITE処理ではWRITEコマンド受信ステップ３０１、WRITEの実行結果をホストに返すステップ３１０、図５のREAD処理ではREADコマンド受信ステップ５０１、READの実行結果をホストに返すステップ５０７、がSPCでの処理になる。
【００７１】
SPCでの処理の終了後、MPU１４０４に処理が移る。MPU１４０４では主記憶１４０２中の制御プログラムに応じてHDDの記録媒体にアクセスするために必要な処理を行う。図３のWRITE処理ではステップ３０２からステップ３０８、図５のREAD処理ではステップ５０２からステップ５０５、がMPU１４０４での処理になる。
【００７２】
ホストから受信したWRITEデータやHDDの記録媒体から読み出したREADデータはキャッシュメモリ１４０３に保存する。またキャッシュメモリ１４０３には図４のアドレス変換テーブル４０７やアドレス変換テーブル待避アドレス４０８も保存する。
【００７３】
主記憶１４０２には、ステップ３０３で用いるアドレス変換テーブルのサイズの判定に用いる別途定める閾値、ステップ３０６で用いるどのPBAまで書き込みを行ったかを管理する変数、などMPU１４０４での処理に必要な各種変数も保存する。
【００７４】
MPU１４０４での処理の終了後、HDCに処理が移る。HDCではMPU１４０４で変換した物理ブロックアドレスに従いサーボコントローラ１４０６に命令を送りHDDのヘッドを制御する。ヘッドの制御後、HDCはリードライトチャネル１４０７に命令を送り記録媒体へのデータのWRITEや記録媒体からのデータのREADを行う。図３のWRITE処理ではWRITEバッファの内容をHDDに書き込むステップ３０９、図５のREAD処理ではREADバッファにHDDの記録媒体から読み込むステップ、がHDCでの処理になる。
【００７５】
図１５と図１６とにより、SCSIコマンドの構造を説明する。コマンドの１バイト目がオペレーションコードである。WRITEコマンドのオペレーションコード１５０１では8Ahが格納され、READコマンドのオペレーションコード１６０１では88hが格納される。２バイト目から９バイト目が論理ブロックアドレス（LBA）１５０２、１６０２である。LBA１５０２は、ステップ３０６において物理ブロックアドレス（PBA）に変換される。LBA１６０２は、ステップ５０３からステップ５０５においてPBAに変換される。１０バイト目から１３バイト目が転送長１５０３、１６０３である。ステップ３０２で転送長１５０３のサイズでWRITEバッファのサイズを決定して初期化を行い、ステップ３０８で転送長１５０３のサイズでステップ３０１で受信したユーザデータをWRITEバッファに転送する。ステップ５０２で転送長１６０３のサイズでREADバッファを初期化し、ステップ５０６で転送長１６０３のサイズで記録媒体から読み出したデータをREADバッファに格納する。
【００７６】
次に図３に従い、WRITEの手順を説明する。必要なデータ構造については、図４も使い説明する。図３において、ステップ３０３からステップ３０７までがログ変換１０２に相当する。
【００７７】
ステップ３０１でホストからのWRITEコマンドを受信し、ステップ３０２でWRITEバッファを初期化し、ステップ３０３に進む。
【００７８】
本実施の形態でのLBAからPBAへの変換処理は、数式処理ではなく前回割り当てたアドレスの次のアドレスを割り当てるため、HDDの内部状態に応じた処理になる。このため、LBAとPBAとの対応をアドレス変換テーブルにより管理する必要がある。処理の高速化のためには、アドレス変換テーブルを半導体メモリなど高速アクセス可能な媒体上に保存することが望ましい。しかし、指定可能な全てのLBAに対するアドレス変換テーブルのサイズは非常に大きく、HDD上に搭載可能な半導体メモリには格納できない。そこで、本実施の形態では、半導体メモリで構築したキャッシュメモリ上に図４の４０７のLBAとPBAとのエントリからなるアドレス変換テーブルを構築し、頻繁に使うLBAについてのみLRU制御により管理する。アドレス変換テーブル４０７から溢れたエントリを記憶媒体上に退避する。
【００７９】
ステップ３０３では、アドレス変換テーブル４０７に登録したLBAとPBAとの対応を表すエントリ数が別途指定する閾値を越えていないかどうか検査する。もしも越えている場合にはステップ３０４に進み、越えていない場合にはステップ３０６に進む。ステップ３０４では別途指定するエントリ数分だけ、LRU方式、つまり最も最近使用していないエントリを選択する。アドレス変換テーブル４０７に登録したエントリは、少なくとも一回はHDDの記憶媒体上に退避することが望ましい。このためLRU方式により使用頻度の低いエントリをアドレス変換テーブル４０７から削除するために退避する他に、各エントリに記憶媒体に退避したかどうかを管理するフラグを設け、WRITEバッファなどに空き領域がある限り使用頻度が高いが退避していないエントリを退避するように制御する。ステップ３０４の終了後ステップ３０５に進む。
【００８０】
ステップ３０５では、後述するステップ３０６と同様にしてアドレス変換テーブル４０７を退避するブロックを確保し、退避用ブロックのPBAの値とステップ３０５で選択したエントリをWRITEバッファに追加する。また、退避用ブロックのPBAの値をHDDのキャッシュメモリ上にあるアドレス変換テーブルの退避アドレスを管理するテーブル４０８に登録する。さらに、管理テーブル４０８から少なくとも前回アドレス変換テーブル４０７を退避したPBAを読み出し、WRITEバッファに追加する。このようにアドレス変換テーブルを退避したPBAを記録することで、全ての退避データをリンクトリストで接続することになるため、フラグ４０４のデータ種別を頼りに全データをスキャンせずに、容易に退避データを検索できる。ステップ３０５の終了後ステップ３０６に進む。
【００８１】
ここでは、片方向リンクトリストにより退避データを繋げているが、双方向リンクトリストにより退避データを繋げることで、より効率良くかつ自由度を上げて検索できるようになる。
【００８２】
図１７は片方向リンクトリストの概念図である。前回アドレス変換テーブルを待避したPBAの値を今回アドレス変換テーブルを待避する際に一緒に保存することで、リンク１７０１のように現在から過去に向かってアドレス変換テーブルを待避したPBAを辿ることができる。
【００８３】
図１８は双方向リンクトリストの概念図である。図１７の片方向リンクトリストに加え今回アドレス変換テーブルを待避したPBAの値を前回アドレス変換テーブルを待避したPBAに追加することで、リンク１８０１のように過去から現在に向かってアドレス変換テーブルを待避したPBAを辿ることができる。リンク１７０１とリンク１８０１との両者を用いることで、現在と過去の双方向にアドレス変換テーブルを辿ることができる。
【００８４】
ステップ３０６では、ホストがWRITEコマンドで指定したLBAを実際にHDDの記憶媒体に書き込む際のPBAに変換する。既存のデータの末尾に追記書きするため、HDDの作業用メモリ上にはどのPBAまで書き込みを行ったか管理する変数がある。その変数から値を読み出し、そのアドレスに続けて書き込みを行うように、PBAを決定する。作業メモリ上の書き込み管理の変数は、ヘッドの退避時や電源遮断時にはHDDの不揮発の管理領域に保存する。電源投入時などには不揮発の管理領域に保存した値を読み出し、作業メモリ上の書き込み管理の変数を初期化する。ステップ３０６の終了後ステップ３０７に進む。
【００８５】
ステップ３０７では、ホストが指定したLBAとステップ３０６で決定したPBAとの対応を一つのエントリとして、キャッシュメモリ上のアドレス変換テーブル４０７に登録する。ステップ３０７の終了後ステップ３０８に進む。
【００８６】
ステップ３０８では、ステップ３０６で変換したPBAとホストがWRITEコマンドで指定したユーザデータをWRITEバッファに追加する。ステップ３０８の終了後ステップ３０９に進む。
【００８７】
ステップ３０９では、WRITEバッファに書かれたPBAとデータの組み合わせを基に記憶媒体上にデータを記録する。ステップ３０９の終了後ステップ３１０に進む。
【００８８】
ステップ３１０では、記録媒体に書き込みを行った結果を、WRITEコマンドの応答としてホストに返す。
【００８９】
ステップ３０３やステップ３０４で用いる閾値や退避するエントリ数を指定する方法としては、S.M.A.R.T.の管理エントリに新たなエントリを作成し、そのエントリ経由で指定する方法、ベンダ定義コマンドとして新たなコマンドを定義して、そのコマンドにより指定する方法、通常のWRITEコマンドのデータ領域に管理コマンドをカプセル化して指定する方法、などがある。
【００９０】
通常のWRITEコマンドを用いる方法では、通常アクセスで使用可能な範囲外のLBAに対してWRITEを行うことで、管理用のコマンドであることを識別する。この時に用いるLBAの決定方法としては、HDDに固有なIDを符合化して得られる値や、HDDに固有なIDと実行する管理コマンドのIDとを符合化して得られる値を使用する方法などがある。実行までに複数のシーケンスが必要な管理コマンドの場合、ある一定の規則に従い次々にアクセスするLBAを変えるように制御することで、コマンドの誤実行を防止できる。また、WRITEコマンドのデータ領域にカプセル化されている管理コマンドを暗号化することで、ウイルスなどの不正な手段により管理コマンドを発行される危険を低減できる。
【００９１】
本実施の形態により、ホストが指定するLBAの値に関わらずHDDの記憶媒体に追記式に書き込むことが可能となり、ヘッドのシーク時間を削減することでWRITE性能が向上する効果がある。
【００９２】
また、本実施の形態により、キャッシュメモリの容量が少なくアドレス変換テーブルをキャッシュメモリ上に全て保存できない場合でも、効率良くLBAと対応するPBAを検索できる効果がある。
【００９３】
次に図４を使い、記録媒体上のデータフォーマットについて説明する。４０１はHDDの記録媒体のアドレス空間のイメージを示す。通常のHDDではユーザデータを記録する際に、検証用のECCコードなどを除くと基本的にユーザデータのみを保存する。これに対し、本実施の形態によるディスク装置の制御方法では、ユーザデータ４０３の他にフラグ４０４を保存する所に特徴がある。
HDDの記録媒体への一回の書き込み単位は、ユーザデータ４０３もしくは退避データ４０５とフラグ４０４とを併せた４０２となる。
【００９４】
フラグ４０４のデータ構造は４０６のようになる。LBAはホストが指定したアドレス、PBAはステップ３０６で変換したアドレスである。データ種別は、ホストが書き込みを指示したユーザデータ４０３と、アドレス変換テーブルの退避データ４０５とを識別する識別子である。状態は他の実施の形態で説明する領域の再利用などで、ユーザデータ４０３や退避データ４０５の状態管理をする場合に用いる。書き込み時刻は、ユーザデータ４０３や退避データ４０５をHDDの記憶媒体上に書き込んだ時刻である。この書き込み時刻は、ユーザデータ４０３の完全性の検証などに用いることができるのであれば、必ずしも外部と同期した時刻である必要はなく、さらには書き込みごとにカウントアップするシーケンス番号などでも良い。例えば時刻を用いるのであれば、HDDの総稼働時間を用いる手法がある。HDDの初稼働からカウントアップを続けるタイマにより総稼働時間を算出し、ヘッドの退避時や電源遮断時にはHDDの不揮発の管理領域に保存する。電源投入時などには不揮発の管理領域に保存したタイマの値を読み出し、タイマを初期化するようにすると、時計用のバックアップ電池が不要になる。
【００９５】
本実施の形態ではアドレス変換テーブル４０７が溢れるごとに退避データ４０５の形でアドレス変換テーブルをユーザデータ４０３と同様にHDDの記憶媒体上に追記書きしているが、この他の手法を用いても良い。例えば、指定可能な全てのLBAに対するアドレス変換テーブルをHDDの記憶媒体上に保存する方法がある。この時のアドレス変換テーブルの配置場所としては、HDDの不揮発の管理領域やユーザデータ空間などがある。データの安全性のためにはデータが二重化してあることが望ましく、退避データ４０５をHDDの記憶媒体上に追記書きする方法と、指定可能な全てのLBAに対するアドレス変換テーブルをHDDの記憶媒体上に保存する方法とを併用しても良い。
【００９６】
本実施の形態では、ユーザデータ４０３もしくはアドレス変換テーブルの退避データ４０５の直後にフラグ４０４を配置しているが、この他の配置方法でも同様に本実施の形態は適用できる。その他の配置方法の例としては、ユーザデータ４０３もしくは退避データ４０５の前に配置したり、HDDの管理領域中に配置する、などがある。
【００９７】
本実施の形態では、フラグ内部のデータ構造４０６にブロックのPBAを記録している。これはデバッグ等の便宜のための措置であり、必ずしもPBAをフラグ内部のデータ構造４０６に記録する必要はない。
【００９８】
HDD内部のデータの検証やデバッグのためには、図４に示したHDD内部のデータ構造、すなわちユーザデータ４０３、フラグ４０４、退避データ４０５の全て、もしくはフラグ４０４だけを直接参照する必要がある。その際には、前記の閾値や退避するエントリ数の指定と同様に、S.M.A.R.T.、ベンダ定義コマンド、通常のWRITEコマンドのデータ領域に管理コマンドをカプセル化して指定などの方法の他に、例えばSCSIであれば通常のHDDのボリュームとは異なるLUNでアクセスする方法、などがある。これらの手法で内部のデータ構造にアクセスする場合には、ホストが指定するLBAをアドレス変換テーブル４０７を使ってPBAに変換せず、LBAを直接PBAとして、もしくはLBAを数式変換によりPBAに変換して、内部データ構造にアクセスする。
【００９９】
次に図５を使い、READの手順を説明する。図５において、ステップ５０３からステップ５０５が、ログ変換１０２に相当する。
【０１００】
ステップ５０１でホストからのREADコマンドを受信し、ステップ５０２でREADバッファを初期化する。ステップ５０２に終了後ステップ５０３に進む。
【０１０１】
ステップ５０３では、アドレス変換テーブル４０７にホストが指定したLBAのエントリが存在するかどうかを検査する。エントリが存在する場合には、ステップ５０４でホストが指定したLBAに対応するPBAを読み出す。エントリが存在しない場合には、ステップ５０５で、HDDの記憶媒体上に退避したアドレス変換テーブル４０５からホストが指定したLBAに対応したPBAを読み出す。ステップ３０５での説明のように、アドレス変換テーブルを退避する際に前回退避したブロックのPBAの値も一緒に退避すると、全ての退避データがリンクトリストで繋がることになり、順番に全ての退避ブロックを検索できる。これにより、退避したアドレス変換テーブルのPBAの管理テーブル４０８の容量が小さく全ての退避ブロックのPBAの値を保持できない場合であっても、フラグ４０４に書かれたデータ種別を頼りに全データをスキャンせずに、容易に退避データを検索することができる。ステップ５０４またはステップ５０５の終了後ステップ５０６に進む。
【０１０２】
ステップ５０６では読み出したPBAからREADバッファにデータを読み出す。ステップ５０６の終了後ステップ５０７に進む。ステップ５０７ではREADバッファの内容を、READコマンドの応答としてホストに返す。
【０１０３】
本実施の形態では、HDD単体の制御方法について説明したが、より強力なプロセッサや大容量メモリを搭載した大型ディスクアレイ装置にも同様に適用可能である。
【０１０４】
図６は、本発明によるディスク装置の制御方法の第二の実施の形態によるデータフォーマットである。図６において、６００は本発明の第二の実施の形態のデータフォーマット、６０１はフラグ、６０２は一回の書き込み単位、６０３はフラグ内部のデータ構造、である。
【０１０５】
本実施の形態では、連続するアドレスへの書き込みに最適化することで、第一の実施の形態に対してフラグに必要なデータ領域を削減する所に特徴がある。
【０１０６】
第一の実施の形態では、一つのユーザデータ４０３に対して一つのフラグ４０４を割り当てていたのに対し、本実施の形態では複数のユーザデータ４０３に対して一つのフラグ６０１を割り当てる。例えばファイルシステムなどで4KB単位でHDDにアクセスする場合、一つのブロックのサイズが512Bの場合にはフラグに必要な領域を1/8にすることができる。
【０１０７】
このような制御を実現するため、フラグ内部のデータ構造６０３に示すように、連続アドレスからなる複数のLBAをLBAのオフセットとブロック数により符合化する。
【０１０８】
一回のデータ書き込み単位６０２は、一つのフラグ６０１と複数のユーザデータ４０３となる。フラグ内部のデータ構造６０３のブロック数で、何ブロック連続して書き込むかを管理するので、一回に書き込むユーザデータ４０３の個数は可変である。また、フラグ６０１の書き込み数を削減する分、WRITE性能が向上する効果がある。
【０１０９】
本実施の形態により、フラグに必要なデータ領域を削減する効果があるとともに、フラグの書き込み回数を削減することでWRITE性能が向上する効果がある。
【０１１０】
図７は、本発明によるディスク装置の制御方法の第三の実施の形態によるアドレス変換テーブルの障碍復帰方法のPAD図である。図７において、７００は本発明によるディスク装置の制御方法の第三の実施の形態によるアドレス変換テーブルの障碍復帰方法のPAD図、７０１はアドレス変換テーブルの初期化ステップ、７０２は最後に退避したアドレス変換テーブルの検索ステップ、７０３は検索に成功したかを判定するステップ、７０４はHDD上に退避した退避データ４０５をキャッシュメモリ上のアドレス変換テーブル４０７に復帰するステップ、７０５は退避データの次のブロックにシークするステップ、７０６はHDDの先頭にシークするステップ、７１０はHDDに書き込んだPBAの上限までループするステップ、７１１はフラグ４０４を読み込むステップ、７１２はフラグ内部のデータ構造４０６からLBAとPBAを読み出し、エントリを作成してアドレス変換テーブル４０７に登録するステップ、７１３は現在処理しているブロックの次のブロックにシークするステップ、である。
【０１１１】
第一の実施の形態で述べたキャッシュメモリ上のアドレス変換テーブル４０７はHDDの電源を切ると内容が消えてしまう。このため、ヘッドの退避時や電源遮断時にアドレス変換テーブル４０７をHDDの不揮発の管理領域に退避しておき、HDDの電源投入時に管理領域から退避したアドレス変換テーブルを読み出してキャッシュメモリ上のアドレス変換テーブル４０７に復帰する手順が必要になる。しかし、急な電源遮断やホストもしくはHDDのシステムの暴走などによりアドレス変換テーブル４０７を退避できない場合には、HDDの記憶媒体上に書かれた情報を基にアドレス変換テーブルを再構築する必要がある。本実施の形態では、HDDの記憶媒体上に最後に退避したアドレス変換テーブルとアドレス変換テーブルを退避した以降のユーザデータのフラグ情報を用いて、キャッシュメモリ上のアドレス変換テーブルを再構築する所に特徴がある。
【０１１２】
ステップ７０１では、キャッシュメモリ上のアドレス変換テーブル４０７を初期化する。ステップ７０１の終了後ステップ７０２に進む。
【０１１３】
ステップ７０２では、HDDの記憶媒体上に最後に退避したアドレス変換テーブルを検索する。検索手法の一例は以下のようになる。
(1) HDDの管理領域にある最後に書き込みを行ったPBAの値を読み出し、そのPBAにシークする。
(2) PBAの値が大きくなる方向にシークし、ブロックのフラグ４０４を読み出しブロックが未使用かどうかを確認する。
(3) (2)を繰返し、HDDに最後に書き込まれたブロックのPBAを調べる。最後に書き込まれたブロックのPBAをLPBAとする。
(4) アドレス変換テーブル４０７に格納可能なエントリ数分（Ｎ ENTRY）、PBAの値が小さくなる方向にシークする。シークしたPBAをSPBAとする。
(5) ブロックのフラグ４０４を読み出し、ブロックが退避データ４０５かどうかを検査する。
(6) 退避データ４０５の場合には処理を終了し、退避データ４０５でない場合にはPBAの値が大きくなる方向にシークし(5)の処理に戻る。もしも、LPBAまでシークしても退避データが見つからない場合には、SPBAからさらにＮ ENTRY分だけPBAの値を小さくなる方向にシークし、(5)の処理を繰り返す。
【０１１４】
ステップ７０２の終了後ステップ７０３に進む。
ステップ７０３では、退避データ４０５が見つかったかどうかの条件判断を行う。退避データ４０５が見つかった場合には、ステップ７０４に進み、見つからなかった場合にはステップ７０６に進む。
【０１１５】
ステップ７０４では、発見したHDD上に退避した退避データ４０５をキャッシュメモリ上のアドレス変換テーブル４０７に復帰する。そしてステップ７０５に進む。
【０１１６】
ステップ７０５では、退避データ４０５の次のブロックにシークする。次にステップ７１０に進む。
【０１１７】
ステップ７０６では、HDDの先頭のPBAにシークする。退避データ４０５が記憶媒体上に保存されていない場合、記憶媒体の先頭から全てのブロックフラグを読んでアドレス変換テーブル４０７を再構築する必要がある。次にステップ７１０に進む。
【０１１８】
以降の処理では、退避データ４０５が書かれた以降に書かれたユーザデータ４０３について、アドレス変換テーブル４０７を再構築する。
【０１１９】
ステップ７１０はLPBAまでステップ７１１からステップ７１３を実行するループである。
【０１２０】
ステップ７１１ではブロックのフラグ４０４を読み込む。次にステップ７１２に進む。
【０１２１】
ステップ７１２では読み込んだフラグ４０４のLBAとPBAを一つのエントリにしてアドレス変換テーブル４０７に登録する。次にステップ７１３に進む。
【０１２２】
ステップ７１３では、次のブロックへシークする。
【０１２３】
本実施の形態により、アドレス変換テーブルの退避データと、そこからの差分であるブロックのフラグを読み込んでアドレス変換テーブルを再構築することにより、高速にアドレス変換テーブルを再構築する効果がある。
【０１２４】
図８は、本発明によるディスク装置の制御方法の第四の実施の形態によるアドレス変換テーブルの障碍復帰方法のPAD図である。図８において、８００は本発明によるディスク装置の制御方法の第四の実施の形態によるアドレス変換テーブルの障碍復帰方法のPAD図、８０１は退避したアドレス変換テーブルの次のブロックにシークするステップ、８１０は退避したアドレス変換テーブルが存在する限りループするステップ、８１１はHDD上に退避したアドレス変換テーブルである退避データ４０５を読み込むステップ、８１２はHDDの記憶媒体上の指定可能な全てのLBAに対するアドレス変換テーブルに読み込んだ退避データ４０５を追加するステップ、８１３はキャッシュメモリ上のアドレス変換テーブル４０７のエントリ数が別途定める閾値を越えていないか検査するステップ、８１４は閾値を越えている場合に別途定めるエントリ数分だけアドレス変換テーブル４０７から削除するステップ、８１５は読み込んだ退避データ４０５をキャッシュメモリ上のアドレス変換テーブル４０７に追加するステップ、ステップ８１６は現在読み込んでいる退避データ４０５の次に退避した退避データにシークするステップ、である。
【０１２５】
本発明の実施の形態では、HDDの記憶媒体上に保存した全ての退避データ４０５からアドレス変換テーブルを再構築する所に特徴がある。ユーザデータ空間もしくは管理領域などHDDの記憶媒体上に、ホストが指定可能な全てのLBAに対するPBAを記憶する完全なアドレス変換テーブルを高速に構築しなければならない場合に、この方法は特に有用である。
【０１２６】
第一の実施の形態では、前回の退避データ４０５を保存したPBAの値を退避データ４０５に含めることで、退避データ４０５を片方向リンクトリストを作る場合について説明した。この片方向リンクトリストではPBAの大きい方から小さい方へと辿るため、時系列順で書き込んだ退避データ４０５を逆向きに辿ることになる。時系列順に退避データを読み込んだ方がアドレス変換テーブルへの登録アルゴリズムが単純になるため、時系列順にも退避データ４０５を辿ることが可能な双方向リンクトリストになっているのが好ましい。
【０１２７】
片方向リンクトリストから双方向リンクトリストへは以下のような手順で変更できる。
(1) 最後に退避した退避データ４０５を読み込む
(2) 退避データ４０５のPBAを記憶
(3) 読み込んだ退避データ４０５から前回退避した退避データ４０５のPBAの値を読み込む
(4) 前回退避した退避データ４０５を読み込む
(5) 読み込んだ前回退避した退避データ４０５に記憶した退避データ４０５のPBAの値を記録して、HDDの記憶媒体に書き戻す
(6) 前回読み込んだ退避データ４０５がある限り(2)に戻る
【０１２８】
ステップ７０１では、キャッシュメモリ上のアドレス変換テーブル４０７を初期化し、ステップ７０６に進む。ステップ７０６では、HDDの記憶媒体の先頭にシークし、ステップ８１０に進む。
【０１２９】
ステップ８１０では、HDDの記憶媒体上に退避した退避データ４０５がある限り、ステップ８１１からステップ８１６のループを実行する。このループはHDDの記憶媒体に書かれた順番に退避データ４０５を参照する。もしも、退避データ４０５が時系列の逆順で辿る片方向リンクトリストになっている場合には、ループ実行前に前記した手順で双方向リンクトリストに変更する。
【０１３０】
ステップ８１１では、アドレス変換テーブルをHDDの記憶媒体に退避した退避データ４０５を読み込み、ステップ８１２に進む。
【０１３１】
ステップ８１２では、ホストが指定可能な全てのLBAに対するPBAを記憶する完全なアドレス変換テーブルに、読み込んだ退避データからエントリを追加し、ステップ８１３に進む。
【０１３２】
ステップ８１３では、キャッシュメモリ上のアドレス変換テーブル４０７に登録したエントリ数が別途指定する閾値を越えていないか比較する。閾値を越えている場合には、ステップ８１４に進む。ステップ８１４終了後もしくは閾値を越えていない場合には、ステップ８１５に進む。
【０１３３】
ステップ８１４では、アドレス変換テーブル４０７から別途指定するエントリ数分だけLRU方式でエントリを削除する。
【０１３４】
ステップ８１５では、読み込んだ退避データ４０５をアドレス変換テーブル４０７に登録し、ステップ８１６に進む。
【０１３５】
ステップ８１６では、退避データ４０５に含まれる双方向リンクトリストのうちPBAの値が大きくなる順方向にリンクを辿り、現在読み込んでいる退避データ４０５の次に退避した退避データ４０５を読み込む。
【０１３６】
ステップ８１０のループで全ての退避データ４０５を読み込んだ後には、退避データ４０５に含まれていないユーザデータ４０３からの復帰を行う。
【０１３７】
ステップ８０１では、退避データ４０５の次のブロックにシークし、ステップ７１０に進む。ステップ７１０以降は第三の実施の形態のステップ７１０以降と同様にしてユーザデータ４０３からアドレス変換テーブルの復帰を行う。
【０１３８】
本実施の形態により、退避データ４０５をリストで繋いでおき、退避データ４０５のみを読み込むことで、全てのブロックをスキャンせずとも目的とする退避データ４０５のみを読み出すことが可能になり、全ブロックをスキャンするよりも高速にアドレス変換テーブルを再構築する効果がある。
【０１３９】
ステップ８１４ではエントリを削除しているが、図３で説明したのと同様に記憶媒体上に退避できる。この場合には、退避用の領域を記憶媒体上に予め確保するため、PBAのアドレス空間上に定期的に未使用領域が出来るようにLBAからPBAへとアドレス変換するのが望ましい。
【０１４０】
図９は、本発明によるディスク装置の制御方法の第五の実施の形態によるスナップショット構築方法のPAD図である。図９において、９００は本発明によるディスク装置の制御方法の第五の実施の形態によるスナップショット構築方法のPAD図、９０１はスナップショットを構築するPBAの上限アドレスであるSPBAを指定するステップ、９０２はスナップショット用アドレス変換テーブルの初期化ステップ、９０３はSPBAよりも下位アドレスで最後に退避したキャッシュメモリ上のアドレス変換テーブル４０７の退避データ４０５を検索するステップ、９０４は退避データ４０５をスナップショット用アドレス変換テーブルに復帰するステップ、９１０はSPBAまでループするステップ、である。
【０１４１】
本実施の形態では、処理するPBAに上限を設けてアドレス変換テーブルの再構築を行うことにより、スナップショットを実現する所に特徴がある。
【０１４２】
HDDの記憶媒体への書き込みが全て時系列順に行われるため、別途定めるPBAまでの範囲でアドレス変換テーブルを構築すると過去のある時点でのHDDのイメージであるスナップショットが得られることになる。すなわち第三の実施の形態で説明したアドレス変換テーブルの障碍復帰の方法に対して、スナップショットを構築する上限のPBAを指定するステップを追加すると、スナップショットの構築手順になる。
【０１４３】
ステップ９０１では、スナップショットを構築する上限のPBAであるSPBAを指定し、ステップ９０２に進む。
【０１４４】
ステップ９０２では、キャッシュメモリ上のスナップショット用アドレス変換テーブルを初期化し、ステップ９０３に進む。通常通りのHDDへのアクセスを許したままスナップショットへのアクセスを可能にするため、通常アクセス用のアドレス変換テーブル４０７とは別にスナップショット用アドレス変換テーブルを別途用意する。ホストが通常のHDDのボリュームとスナップショットのボリュームとに同時にアクセス可能になるためには、それぞれのボリュームに対するアクセスパスを設ける必要がある。例えばSCSIプロトコルを用いてアクセスする場合には、通常のHDDのボリュームとスナップショットのボリュームに異なるLUNを割り当てる方法などがある。
【０１４５】
ステップ９０３以降の処理は、LPBAがSPBAに変わる以外は図７のステップ７０２以降の処理と同様である。
【０１４６】
ユーザが望んだ時点でのスナップショットを得るためには、HDDに書き込んだ時刻をホストの時刻で知るのが望ましい。このためには、ホストからの書き込みコマンドにホストがコマンドを発行した時刻を含め、ブロックのフラグ４０４のデータ構造４０６にそのコマンド発行時刻を追加する手法がある。
【０１４７】
本実施の形態により、通常のHDDのボリュームへのアクセスを許したままスナップショットのボリュームへのアクセスが可能なスナップショットを構築できる効果がある。また同時に、アドレス変換テーブルの退避データと、そこからの差分であるブロックのフラグを読み込んでアドレス変換テーブルを再構築することにより、高速にスナップショットを構築できる効果がある。
【０１４８】
図１０は、本発明によるディスク装置の制御方法の第六の実施の形態によるWRITE無効化方法のPAD図である。図１０において、１０００は本発明によるディスク装置の制御方法の第六の実施の形態によるWRITE無効化方法のPAD図、１００１はHDDの記憶媒体に残すPBAの上限（消去を開始するPBAの下限）であるDPBAを指定するステップ、１００２はDPBAにシークするステップ、１００３はフラグ４０４をクリアするステップ、１００４はDPBAよりも下位アドレスで最後に退避したキャッシュメモリ上のアドレス変換テーブル４０７の退避データ４０５を検索するステップ、１０１０はDPBAまでループするステップ、である。
【０１４９】
本実施の形態では、あるPBA以上の物理ブロックアドレスへの書き込みを無効化し、あるPBA以下の物理ブロックアドレスにおいてアドレス変換テーブルの再構築を行うことにより、ある時点以降のHDDの記憶媒体への書き込みを消去し以前のHDDの記憶媒体の状態にロールバックする所に特徴がある。
【０１５０】
HDDの記憶媒体への書き込みが全て時系列順で行われるため、別途定めるPBA以上の物理ブロックアドレスへの書き込みを無効化し、別途定めるPBA以下の物理ブロックアドレスにおいてアドレス変換テーブルを再構築すると、任意の時点でHDDの記憶媒体への書き込みを無効化して、以前の状態にロールバックできる。すなわち第三の実施の形態で説明したアドレス変換テーブルの障碍復帰の方法に対して、WRITEの無効化を開始するPBAを指定するステップと、指定したPBA以降の書き込みを無効化するステップを追加すると、WRITE無効化手順になる。
【０１５１】
ステップ１００１ではWRITEの無効化を開始する下限、もしくは消去しないデータの上限のPBAであるDPBAを指定し、ステップ１００２に進む。
【０１５２】
ステップ１００２では、DPBAにシークし、ステップ７１０に進む。
【０１５３】
ステップ７１０のループでは、書き込んだ上限のPBAまでステップ１００３とステップ７１３のループを実行し、HDDの記憶媒体に書き込まれたデータを無効化する。
【０１５４】
ステップ１００３では、ブロックのフラグ４０４をクリアすることで、ユーザデータ４０３ならびに退避データ４０５を無効化する。ここでは高速化のためフラグ４０４をクリアするだけでユーザデータ４０３や退避データ４０５を無効化しているが、安全のためにはユーザデータ４０３や退避データ４０５を記録したブロックにダミーの書き込みを行い、記録されたデータを消去するのが望ましい。
【０１５５】
ステップ７０１以降の処理は、LPBAがDPBAに変わる以外は図７のステップ７０１以降の処理と同様である。
【０１５６】
WRITEの無効化を行う際には、ホストから見たHDD内のデータの整合性が保つように無効化を行うのが望ましい。どの時点であればデータの整合性があるかをホストがデータとしてHDDに書き込んでおくのが最も確かであるが、そうでない場合には以下のような手段でHDDが整合性のあるPBAの候補を判断できる。
(1) ホストが書き込みコマンドを発行する頻度を検出する
(2) 最後に書き込みコマンドを発行してから別途定める期間だけ書き込みコマンドを発行していないかどうか検出する
(3) 別途定める期間だけ書き込みコマンドを発行していない場合に、最も最近書き込みを行った物理ブロックアドレスのフラグ４０４のデータ構造４０６に、データの整合性のあるPBAの候補であることを示す識別子を追加する。
【０１５７】
この手順は、ホストでのディスクキャッシュのためホストからHDDへのアクセスがバースト性を持つことを利用して、バースト書き込みの終了時をデータの整合性がある候補と見なすことを意味する。この手順ではデータ整合性のあるPBAの候補を選択するので、WRITE無効化を行った場合には別途ホスト側からHDDの整合性検査をするのが望ましい。
【０１５８】
本発明の形態により、HDDに書き込みを行った後で書き込みを無効化することで、任意の時点のHDDの状態にロールバックできる効果がある。また同時に、アドレス変換テーブルの退避データと、そこからの差分であるブロックのフラグを読み込んでアドレス変換テーブルを再構築することにより、高速にロールバックできる効果がある。
【０１５９】
図１１は、本発明によるディスク装置の制御方法の第七の実施の形態による領域再利用方法のPAD図である。図１１において、１１００は第七の実施の形態による領域再利用方法のPAD図、１１０１は使用済み領域の回収作業を行うPBAの上限であるGPBAを指定するステップ、１１０２はキャッシュメモリ内の作業用アドレス変換テーブルを初期化するステップ、１１１０はGPBAまでループを行うステップ、１１１１はフラグ４０４のデータ構造４０６のデータ種別を調べ、ユーザデータ４０３かどうかを検査するステップ、１１１２はユーザデータ４０３である場合のサブルーチン、１１１３はフラグ４０４のデータ構造４０６の状態をDirtyにするステップ、１１２１はフラグ４０４のデータ構造４０６のデータ種別と状態とを調べ、それぞれユーザデータ４０３とCleanとであることを検査するステップ、１１２２はユーザデータ４０３とCleanとである場合のサブルーチン、１１２３はフラグ４０４のデータ構造４０６のデータ種別が退避データ４０５かどうかを検査するステップ、１１０３は作業用アドレス変換テーブルとキャッシュメモリ内のアドレス変換テーブル４０７とを入れ換えるステップ、である。
【０１６０】
図１２は、本発明によるディスク装置の制御方法の第七の実施の形態によるサブルーチン１１１２のPAD図である。図１２において、１２００は本発明によるディスク装置の制御方法の第七の実施の形態によるサブルーチン１１１２のPAD図、１２０１はフラグ４０４のデータ構造４０６からのLBAを読み出すステップ、１２０２はLBAに対応する最新のユーザデータ４０３を書き込んだブロックのPBAを検索するステップ、１２０３は現在処理中のブロックが最新のユーザデータ４０３を保持するPBAかどうかを検査するステップ、である。
【０１６１】
図１３は、本発明よるディスク装置の制御方法の第七の実施の形態によるサブルーチン１１２２のPAD図である。図１３において、１３００は本発明よるディスク装置の制御方法の第七の実施の形態によるサブルーチン１１２２のPAD図、１３０１は処理中のブロックを低アドレス方向にコピーするステップ、１３０２はフラグ４０４のデータ構造４０６のPBAをコピーした先のPBAの値に修正するステップ、１３０３は作業用アドレス変換テーブルのサイズが別途指定する閾値を越えているかどうか検査するステップ、１３０４は別途指定するエントリ数分だけ最も使っていないエントリを選択するステップ、１３０５は選択したエントリをHDD上の記憶媒体上に退避するステップ、１３０６はコピー後のLBAとPBAとの対応を作業用アドレス変換テーブルに追加するステップ、である。
【０１６２】
図１９は、第七の実施の形態による領域再利用方法の概念図である。図１９において、１９００は領域再利用前のHDDの記録媒体のアドレス空間のイメージ、１９０１は使用済み領域の回収作業を行うPBAの上限であるGPBA、１９０２は領域再利用の対象となる使用済みブロック、１９０３は領域再利用の対象とならない使用済みブロック、１９０４は未使用ブロック、１９１０は領域再利用後のHDDの記録媒体のアドレス空間のイメージ、１９１１は領域再利用を行ったことで大きさが小さくなった使用済みブロック、である。
【０１６３】
本発明によるディスク装置の制御方法では、HDDの記憶媒体への書き込みが時系列順で全て記録される。すなわち同一LBAに繰返し書き込みを行った場合、従来のHDDの制御方法ではブロック一つ分しか容量を消費しないが、本発明によるディスク装置の制御方法では、書き込みを行った回数分のブロックの容量を消費する。このため、HDDの記憶媒体の容量を有効に使用するためには、適宜使用済みの容量を回収して再利用可能にする必要がある。ただし、最新の状態しか残さないように回収するとスナップショットやWRITE無効化の機能が使えなくなるので、あるPBA以下のアドレスでは使用済みの容量を回収し、そのPBA以上のアドレスでは使用済み容量を回収しないように制御する必要がある。
【０１６４】
本実施の形態では、あるPBA以下のアドレスでのみ使用済み容量を回収することで、スナップショットやWRITE無効化の機能を有効にしながら、領域を再利用可能にする所に特徴がある。
【０１６５】
図１９により領域再利用の概念を説明する。使用済み領域回収前の状態１９００において、使用済み領域の回収作業を行うPBAの上限であるGPBA１９０１により使用済みの領域を再利用対象のブロック１９０２と再利用の対象でないブロック１９０３とに分ける。再利用対象のブロック１９０２では、上書きされてDirtyであるブロック、即ち同一のLBAについてより上位のPBAで書き込まれているブロック、を上書きするように残りのブロックを低アドレス側にシフトすることで領域を圧縮してブロック１９１１にする。再利用の対象でないブロック１９０３は、ブロック１９０２がブロック１９１１になったことで空いたブロックを埋めるように低アドレス側にシフトする。これらにより、未使用ブロック１９０４の領域を拡張する。
【０１６６】
ステップ１１０１では使用済み領域の回収作業を行うPBAの上限であるGPBAを指定する。次にステップ１１０２に進む。
【０１６７】
ステップ１１０２では作業用アドレス変換テーブルを初期化する。アドレス変換テーブル４０７とは別に作業用アドレス変換テーブルを用意するのは、通常のHDDのボリュームへのアクセスを許したまま領域再利用の処理を実行可能にするためである。ステップ１１０２に終了後ステップ７０６に進む。
【０１６８】
ステップ７０６ではHDDの先頭にシークし、ステップ１１１０のループに進む。
【０１６９】
ステップ１１１０のループはHDDの先頭からGPBAに向かってステップ７１１、ステップ１１１１からステップ１１１３、およびステップ７１３を実行する。ステップ１１１０のループの実行の終了後、ステップ７０６に進む。ステップ７１１ではフラグ４０４を読み込み、ステップ１１１１に進む。
【０１７０】
ステップ１１１１ではフラグ４０４のデータ構造４０６のデータ種別を読み出し、通常ブロックすなわちユーザデータかどうかを検査する。通常ブロックの場合には、ステップ１１１２のサブルーチンに進み、そうでない場合には、ステップ１１１３に進む。ステップ１１１２もしくはステップ１１１３の終了後ステップ７１３に進む。
【０１７１】
ステップ１１１２のサブルーチンはステップ１２０１からステップ１２０３、およびステップ１１１３を実行する。
【０１７２】
ステップ１２０１はフラグ４０４のデータ構造４０６からブロックのLBAを読み出し、ステップ１２０２に進む。
【０１７３】
ステップ１２０２では読み出したLBAに対する最新のPBAを検索し、ステップ１２０３に進む。
【０１７４】
ステップ１２０３では、現在処理中のPBAと検索したPBAとを比較し、二つのPBAが等しい場合、すなわち現在処理中のPBAが最新データを保存するPBAである場合、サブルーチン１１１２の実行を終了し、そうでない場合には、ステップ１１１３に進む。
【０１７５】
ステップ１１１３ではフラグ４０４のデータ構造４０６の状態を最新データではないことを意味するDirtyに変更する。
【０１７６】
ステップ１１１１で通常ブロックでない場合はアドレス変換テーブルの退避データであり、領域再利用後には使えなくなるためステップ１１１３に進み状態をDirtyにする。
【０１７７】
ステップ７０６ではHDDの先頭にシークし、ステップ７１０に進む。
【０１７８】
ステップ７１０ではステップ１１２１からステップ１１２３および、ステップ１１１３とステップ７１３のループを実行する。ステップ７１０のループの実行の終了後、ステップ１１０３に進む。
【０１７９】
ステップ１１２１では、ブロックのフラグ４０４のデータ構造４０６のデータ種別と状態を調べる。データ種別が通常ブロックかつ状態がDirtyではないCleanである場合にステップ１１２２進み、そうでない場合には、ステップ１１２３に進む。ステップ１１２２のサブルーチンの終了後ステップ１１２３に進む。
【０１８０】
ステップ１１２２のサブルーチンはステップ１３０１から１３０６を実行する。
【０１８１】
ステップ１３０１では、現在処理中のブロックを状態がDirtyであるブロックを上書きするようにPBAの先頭アドレスの方向にコピーする。コピー終了後、現在処理中であるコピー元のブロックの状態をDirtyに変更し、ステップ１３０２に進む。
【０１８２】
ステップ１３０２では、コピーしたブロックのフラグ４０４のフラグ情報４０６の中のPBAの値をコピー先のブロックのPBAの値に修正し、ステップ１３０３に進む。
【０１８３】
ステップ１３０３では、作業用アドレス変換テーブルに登録したエントリ数が別途定める閾値を越えているかどうか検査する。越えている場合にはステップ１３０４に進み、越えていない場合には１３０６に進む。
【０１８４】
ステップ１３０４では、別途指定するエントリ数分だけ最も使っていない順番にエントリを選択し、ステップ１３０５に進む。
【０１８５】
ステップ１３０５では、HDD上の最も最近ブロックをコピーしたブロックの次の状態がDirtyなブロックにステップ１３０４で選択したエントリを退避し、作業用アドレス変換テーブルから選択したエントリを削除する。ステップ１３０５の終了後、ステップ１３０６に進む。
【０１８６】
ステップ１３０６では、コピー後のLBAとPBAとの対応を作業用アドレス変換テーブルに追加する。
【０１８７】
ステップ１１２３では、ブロックのフラグ４０４のデータ構造４０６のデータ種別を調べ、データ種別が退避したアドレス変換テーブルである退避データ４０５である場合にステップ１１１３に進み、そうでない場合にステップ７１３に進む。
【０１８８】
ステップ７１３では次のブロックにシークする。
【０１８９】
ステップ７１０のループの終了後、ステップ１１０３に進む。
【０１９０】
ステップ１１０３では、作業用アドレス変換テーブルとアドレス変換テーブル４０７とを入れ換え、以後のアクセスにおいて領域再利用処理の終了したアドレス変換テーブルを参照可能にする。
【０１９１】
なお、領域再利用処理中にホストからのアクセスに応じてアドレス変換をする場合、以下の手順で変換する。
(1) アドレス変換テーブル４０７を参照してLBAからPBAへ変換する。
(2) 変換後のPBAがループ１１１０やループ７１０で作業中のアドレスよりも大きいか検査する。
(3) 作業中のアドレスよりも大きい場合には、そのPBAを使う。
(4) 作業中のアドレスよりも小さい場合には、作業用アドレス変換テーブルを参照してLBAからPBAに変換したPBAを使う。
【０１９２】
本実施の形態により、通常のHDDのボリュームへのアクセスを許したまま領域再利用の処理が可能になる効果がある。
【図面の簡単な説明】
【０１９３】
【図１】本発明によるディスク装置の制御方法の第一の実施の形態のソフトウェア処理レイヤのブロック図。
【図２】従来の技術によるHDDの制御方法のソフトウェア処理レイヤのブロック図。
【図３】本発明によるディスク装置の制御方法の第一の実施の形態によるWRITE処理のPAD図。
【図４】本発明によるディスク装置の制御方法の第一の実施の形態によるデータフォーマットを示す図。
【図５】本発明によるディスク装置の制御方法の第一の実施の形態によるREAD処理のPAD図。
【図６】本発明によるディスク装置の制御方法の第二の実施の形態によるデータフォーマットを示す図。
【図７】本発明によるディスク装置の制御方法の第三の実施の形態によるアドレス変換テーブルの障碍復帰方法のPAD図。
【図８】本発明によるディスク装置の制御方法の第四の実施の形態によるアドレス変換テーブルの障碍復帰方法のPAD図。
【図９】本発明によるディスク装置の制御方法の第五の実施の形態によるスナップショット構築方法のPAD図。
【図１０】本発明によるディスク装置の制御方法の第六の実施の形態によるWRITE無効化方法のPAD図。
【図１１】本発明によるディスク装置の制御方法の第七の実施の形態による領域再利用方法のPAD図。
【図１２】本発明によるディスク装置の制御方法の第七の実施の形態によるサブルーチン１１１２のPAD図。
【図１３】本発明よるディスク装置の制御方法の第七の実施の形態によるサブルーチン１１２２のPAD図。
【図１４】本発明によるディスク装置の第一の実施の形態のハードウェアのブロック図。
【図１５】SCSIのWRITE（１６）コマンドを示す図。
【図１６】SCSIのREAD（１６）コマンドを示す図。
【図１７】片方向リンクトリストの概念図。
【図１８】双方向リンクトリストの概念図。
【図１９】本発明によるディスク装置の第七の実施の形態による領域再利用方法の概念図。
【符号の説明】
【０１９４】
１００ 本発明によるディスク装置の制御方法の第一の実施の形態のソフトウェア処理レイヤ
１０１ ホストとHDDの通信プロトコルであるATAやSCSIを処理するプロトコル処理レイヤ
１０２ ホストが指定する論理ブロックアドレス（LBA）ログ形式でアクセスする物理ブロックアドレス（PBA）に変換するログ変換レイヤ
１０３ 指定したPBAが欠陥セクタである場合に予備のセクタと交替するための欠陥セクタ交替レイヤ
１０４ 指定したPBAでHDDの記憶媒体上にアクセスする物理アクセス処理
２０１ ホストが指定するLBAを数式処理によりPBAに変換するアドレス変換レイヤ
４００ 本発明による第一の実施の形態のデータフォーマット
４０１ HDDの記録媒体のアドレス空間のイメージ
４０２ 一回の書き込み単位
４０３ ユーザデータ
４０４ フラグ
４０５ HDDの記録媒体上に退避したアドレス変換テーブルの退避データ
４０６ フラグ内部のデータ構造
４０７ HDDのキャッシュメモリ上のアドレス変換テーブル
４０８ HDDの記憶媒体上に退避したアドレス変換テーブルを管理するHDDのキャッシュメモリ上の物理ブロックアドレス管理テーブル
６００ 本発明の第二の実施の形態のデータフォーマット
６０１ フラグ
６０２ 一回の書き込み単位
６０３ フラグ内部のデータ構造
１４００ 本発明によるディスク装置の第一の実施の形態のハードウェアのブロック図
１４０１ フラッシュロム
１４０２ 主記憶
１４０３ キャッシュメモリ
１４０４ マイクロプロセッサ（MPU）
１４０５ ハードディスクコントローラ（HDC）およびSCSIプロトコルコントローラ（SPC）
１４０６ サーボコントローラ
１４０７ リードライトチャネル
１５００ SCSIのWRITE（１６）コマンド
１５０１ オペレーションコード（OPERATION CODE）
１５０２ 論理ブロックアドレス（LOGICAL BLOCK ADDRESS）
１５０３ 転送長（TRANSFER LENGTH）
１６００ SCSIのREAD（１６）コマンド
１６０１ オペレーションコード（OPERATION CODE）
１６０２ 論理ブロックアドレス（LOGICAL BLOCK ADDRESS）
１６０３ 転送長（TRANSFER LENGTH）
１７００ 片方向リンクトリストの概念図
１７０１ 今回のアドレス変換テーブルの待避ブロックから前回のアドレス変換テーブルの待避ブロックへのリンク
１８００ 双方向リンクトリストの概念図
１８０１ 前回のアドレス変換テーブルの待避ブロックから今回のアドレス変換テーブルの待避ブロックへのリンク
【図１】
2005293774.tif 000003
【図２】
2005293774.tif 000004
【図３】
2005293774.tif 000005
【図４】
2005293774.tif 000006
【図５】
2005293774.tif 000007
【図６】
2005293774.tif 000008
【図７】
2005293774.tif 000009
【図８】
2005293774.tif 000010
【図９】
2005293774.tif 000011
【図１０】
2005293774.tif 000012
【図１１】
2005293774.tif 000013
【図１２】
2005293774.tif 000014
【図１３】
2005293774.tif 000015
【図１４】
2005293774.tif 000016
【図１５】
2005293774.tif 000017
【図１６】
2005293774.tif 000018
【図１７】
2005293774.tif 000019
【図１８】
2005293774.tif 000020
【図１９】
2005293774.tif 000021