(57)【要約】【課題】隣接トラックを部分的に重ね書きするような場合であっても巨大なアドレス変換表を必要とせず、データ書き込みを行なった場合に書き込み対象以外のアドレスに記録されたデータを破壊しないディスク装置を提供する。【解決手段】ディスク装置の内部に、ログ領域３１１とダーティセクタ表３１２を設ける。上位装置から書き込み要求があったセクタのデータをセクタのデータバッファ３３３に保存し、セクタのアドレスをログに記録済みのセクタのLBA３４１に登録し、セクタのデータバッファ３３３に登録したデータのオフセットをログに記録済みのデータへのオフセット３４２に登録する。ログ領域３１１に保存したデータをユーザデータ空間３０１に反映する際には、ディスク装置内部のデータ整合性を保つように、必要ならば作業領域３１３を使ってログ領域３１１からユーザデータ空間３０１にデータをコピーする。【選択図】図３
2007012139.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体と、上位装置との間でコマンドやデータの送受信を行ない前記記憶媒体に対して書き込み又は読み出しを行なう制御部とを備えるディスク装置のデータ書き込み方法において、
前記制御部が、
前記上位装置から書き込み命令とデータとを受信するステップ、
前記受信したデータと前記データを書き込むべきアドレスとを前記ディスク装置内部のログに追加するステップ、
を実行することを特徴とするデータ書き込み方法。
【請求項２】
請求項１に記載のデータ書き込み方法において、前記ログが前記記憶媒体上に存在することを特徴とするデータ書き込み方法。
【請求項３】
請求項１に記載のデータ書き込み方法において、前記ディスク装置が不揮発メモリを備え、前記ログが前記不揮発メモリ上に存在することを特徴とするデータ書き込み方法。
【請求項４】
請求項１に記載のデータ書き込み方法において、
前記制御部が、前記ログに保存されたデータを前記ログに保存されたアドレスに書き込むステップを実行することを特徴とするデータ書き込み方法。
【請求項５】
請求項４に記載のデータ書き込み方法において、
前記制御部が、前記ログのサイズが予め定めた閾値を越えた場合に前記書き込むステップを実行することを特徴とするデータ書き込み方法。
【請求項６】
請求項１に記載のデータ書き込み方法において、
前記制御部が、前記アドレスを前記ディスク装置内部の揮発メモリ上のリストに登録するステップを実行することを特徴とするデータ書き込み方法。
【請求項７】
請求項４に記載のデータ書き込み方法において、
前記制御部が、
定められた連続アドレス分のデータを生成するステップ、
前記データを前記記憶媒体に書き込むステップ、
を実行することを特徴とするデータ書き込み方法。
【請求項８】
請求項６に記載のデータ書き込み方法において、
前記ディスク装置がデータ一時保存用のキャッシュメモリを備え、
前記制御部が、
前記上位装置から読み出し命令を受信するステップ、
前記読み出し命令の要求するアドレスのデータが前記キャッシュメモリに保存されているか検査するステップ、
前記キャッシュメモリに保存されている場合に、前記キャッシュメモリに保存されているデータを前記読み出し命令の応答として前記上位装置に送信するステップ、
前記キャッシュメモリに保存されていない場合に、前記揮発メモリ上のリスト内に前記読み出し命令の要求するアドレスが保存されているか検査するステップ、
前記揮発メモリ上のリストに前記読み出し命令の要求するアドレスが保存されている場合に、前記ログから前記読み出し命令の要求するデータを読み出すステップ、
前記ログから読み出したデータを前記読み出し命令の応答として送信するステップ、
前記揮発メモリ上のリストに保存されていない場合に、前記ログ内に前記読み出し命令の要求するアドレスが保存されているか検査するステップ、
前記ログ内に前記読み出し命令の要求するアドレスが保存されている場合に、前記ログから前記読み出し命令の要求するデータを読み出すステップ、
前記ログから読み出したデータを前記読み出し命令の応答として送信するステップ、
前記ログ内に前記読み出し命令の要求するアドレスが保存されていない場合に、前記記憶媒体から前記読み出し命令の要求するデータを読み出すステップ、
前記記憶媒体から読み出したデータを前記読み出し命令の応答として送信するステップ、
を実行することを特徴とするデータ書き込み方法。
【請求項９】
請求項１に記載のデータ書き込み方法において、
前記制御部が、
前記上位装置からのログ参照命令を受信するステップ、
前記ログ参照命令の応答として前記ログ内のアドレス及び／又はデータを前記上位装置に送信するステップ、
を実行することを特徴とするデータ書き込み方法。
【請求項１０】
記憶媒体と、
上位装置との間でコマンドやデータの送受信を行ない前記記憶媒体に対して書き込み又は読み出しを行なう制御部と、
前記上位装置から受信した書き込み命令とデータとから、当該データと当該データを書き込むべきアドレスとを前記記憶媒体上に存在するログ又は不揮発メモリ上に存在するログに追加するログ書き込み手段と、
を備えることを特徴とするディスク装置。
【請求項１１】
請求項１０に記載のディスク装置において、前記ログに保存されたデータを前記ログに保存されたアドレスに書き込むログフラッシュ手段を備えることを特徴とするディスク装置。
【請求項１２】
請求項１１に記載のディスク装置において、前記ログフラッシュ手段は、定められた連続アドレス分のデータを生成した後に前記データを前記記憶媒体に書き込むことを特徴とするディスク装置。
【請求項１３】
請求項１２に記載のディスク装置において、コピー状態管理手段を有し、前記コピー状態管理手段が前記データの前記記憶媒体への書き込み完了を示していない場合に、前記ログフラッシュ手段は前記データの前記記憶媒体への書き込みをやり直すことを特徴とするディスク装置。
【請求項１４】
請求項１０に記載のディスク装置において、データ一時保存用のキャッシュメモリと、データ読み出し手段とを備え、
前記データ読み出し手段は、
前記上位装置からの読み出し命令を受信した場合に、前記読み出し命令の要求するアドレスのデータが前記キャッシュメモリに保存されているか検査し、
前記キャッシュメモリに保存されている場合に、前記キャッシュメモリに保存されているデータを前記読み出し命令の応答として前記上位装置に送信し、
前記キャッシュメモリに保存されていない場合に、前記ログ内に前記読み出し命令の要求するアドレスが保存されているか検査し、
前記ログ内に前記読み出し命令の要求するアドレスが保存されている場合に、前記ログから前記読み出し命令の要求するデータを読み出し、前記ログから読み出したデータを前記読み出し命令の応答として送信し、
前記ログ内に前記読み出し命令の要求するアドレスが保存されていない場合に、前記記憶媒体から前記読み出し命令の要求するデータを読み出し、前記記憶媒体から読み出したデータを前記読み出し命令の応答として送信することを特徴とするディスク装置。
【請求項１５】
請求項１０に記載のディスク装置において、揮発メモリと、データ一時保存用のキャッシュメモリと、データ読み出し手段とを備え、
前記ログ書込手段は、前記アドレスを前記揮発メモリ上のリストに登録し、
前記データ読み出し手段は、
前記上位装置からの読み出し命令を受信した場合に、前記読み出し命令の要求するアドレスのデータが前記キャッシュメモリに保存されているか検査し、
前記キャッシュメモリに保存されている場合に、前記キャッシュメモリに保存されているデータを前記読み出し命令の応答として前記上位装置に送信し、
前記キャッシュメモリに保存されていない場合に、前記揮発メモリ上のリスト内に前記読み出し命令の要求するアドレスが保存されているか検査し、
前記揮発メモリ上のリストに前記読み出し命令の要求するアドレスが保存されている場合に、前記ログから前記読み出し命令の要求するデータを読み出し、前記ログから読み出したデータを前記読み出し命令の応答として送信し、
前記揮発メモリ上のリストに保存されていない場合に、前記ログ内に前記読み出し命令の要求するアドレスが保存されているか検査し、
前記ログ内に前記読み出し命令の要求するアドレスが保存されている場合に、前記ログから前記読み出し命令の要求するデータを読み出し、前記ログから読み出したデータを前記読み出し命令の応答として送信し、
前記ログ内に前記読み出し命令の要求するアドレスが保存されていない場合に、前記記憶媒体から前記読み出し命令の要求するデータを読み出し、前記記憶媒体から読み出したデータを前記読み出し命令の応答として送信することを特徴とするディスク装置。
【請求項１６】
請求項１０に記載のディスク装置において、
前記上位装置からのログ参照命令を受信した場合に、前記ログ参照命令の応答として前記ログ内のアドレス及び／又はデータを前記上位装置に送信するログ参照手段を備えることを特徴とするディスク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスク装置のデータ書き込み方法に関し、特に記憶媒体に書き込むべきデータをディスク装置の内部のログに蓄積した後に、ログに蓄積したデータを記憶媒体に反映するデータ書き込み方法に関する。
【背景技術】
【０００２】
ディスク装置へのデータの書き込み速度の向上させる技術として、特開2002-323959号公報に記載の「磁気ディスク制御装置のログ主体不揮発性書き込みキャッシュ・システム及び方法」がある。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. に記載の RAID-5 の構成のディスクサブシステムにおいてディスク装置へのランダムな書き込みが増えるとディスクサブシステムの性能が低下する問題がある。この性能低下の問題を解決するため、特開2000-323959号公報に記載の方法では、ディスク装置に書き込むべき内容をログに蓄積し、ディスクサブシステムの活動状態が低下した後でログに含まれるデータをディスク装置に書き込む。その結果ランダムな書き込みが順次書き込みに変換される。順次書き込みの性能がランダム書き込みの性能を上回るため、ディスクサブシステムの性能を向上できる。
【０００３】
ディスク装置の通常の書き込みではトラック同士の間隔を書き込みヘッドの幅よりも狭くできないため、書き込みヘッド幅により最短のトラック間隔が決まる。WO99/45534に記載の「磁気ディスク装置」では隣接トラックを部分的に重ね書きすることで、トラック幅を短縮するとともにトラック間隔も短縮する。これによりトラック密度が向上しディスク装置の容量を向上する。
【特許文献１】特開2002-323959号公報
【特許文献２】WO99/45534
【非特許文献１】D. A. Patterson, G. A. Gibson, R. H. Katz, "A Case for Redundant Arraysof Inexpensive Disks (RAID)," Proceedings of the International Conference on Management of Data (SIGMOD), June 1988.
【発明の開示】
【発明が解決しようとする課題】
【０００４】
磁気ディスク装置ではディスク装置へのデータ書き込み完了を上位装置に伝えた段階で、書き込んだデータがディスク装置内に永続的に存在することが保証される。これに対して特にWO99/445534に記載の「磁気ディスク装置」では隣接トラックを部分的に重ね書きする構造上、あるトラックにデータを書き込むとそのトラックと部分的に重ね書きされたトラックのデータを破壊する。つまりWO99/445534に記載の「磁気ディスク装置」ではデータを書き込むと、データを書き込んだアドレス以外のアドレスのデータが破壊され、データが消失するという問題がある。どのアドレスのデータが壊れるかはどのトラックが部分的に重なっているかに依存するため、上位装置からはどのアドレスのデータが壊れるかを予測することができない問題がある。
【０００５】
特開2002-323959号公報に記載の方法は、ディスク装置にデータを書き込むと書き込んだデータは永続的に保存され、データ書き込みを行なっていないアドレスのデータを壊さない、という通常の磁気ディスク装置の動作を前提としているため、隣接トラックを部分的に重ね書きする構成のディスク装置に適用すると、ログに蓄積したデータを磁気ディスク装置に書き込む段階で磁気ディスク装置のデータを破壊する問題がある。
【０００６】
WO99/445534に記載の「磁気ディスク装置」ではこのようなデータ破壊を防止するため、トラックやセクタ単位で追記することにして論理ブロックアドレス(Logical Block Address, LBA)と物理ブロックアドレス(Physical Block Address, PBA)との対応をアドレス変換表により管理することを提案している。しかしこの方法ではアドレス変換表が巨大になるという問題がある。例えば容量が100GBのディスク装置でセクタ単位にアドレス変換を管理する場合には、セクタ数が200Mあるため、LBAは28bit幅が必要になりアドレス変換表の一つのエントリは56bitになり、アドレス変換表のサイズが1.4GBになる。このような巨大なアドレス変換表はディスク装置の記憶媒体上に保存することになるため、ディスク装置の容量が低下するばかりでなく、アドレス変換表の検索にも時間がかかるためディスク装置の性能も低下するという問題がある。
【０００７】
本発明の目的は、隣接トラックを部分的に重ね書きするような場合であっても巨大なアドレス変換表を必要とせず、データ書き込みを行なった場合に書き込み対象以外のアドレスに記録されたデータを破壊しないディスク装置を提供することである。
【課題を解決するための手段】
【０００８】
前記目的を達成するため、本発明によるデータ書き込み方法は、以下の工程を採用する。
【０００９】
すなわち、本発明は、記憶媒体と、上位装置との間でコマンドやデータの送受信を行ない前記記憶媒体に対して書き込み又は読み出しを行なう制御部とを備えるディスク装置のデータ書き込み方法において、制御部が、上位装置から書き込み命令とデータとを受信するステップ、受信したデータとデータを書き込むべきアドレスとをディスク装置内部のログに追加するステップ、を実行する。ログは、記憶媒体上に、あるいはディスク装置が備える不揮発メモリ上に存在する。
【００１０】
制御部は、所定のタイミングで、ログに保存されたデータをログに保存されたアドレスに書き込むステップを実行する。書き込むタイミングは、例えば、ログのサイズが予め定めた閾値を越えたときである。
【００１１】
制御部は、データを書き込むアドレスをディスク装置内部の揮発メモリ上のリストに登録するステップを実行してもよい。
【００１２】
制御部は、ログに保存されたデータをログに保存されたアドレスに書き込むに当たって、定められた連続アドレス分のデータを生成するステップ、そのデータを記憶媒体に書き込むステップ、を実行する。
【００１３】
一つの態様として、ディスク装置がデータ一時保存用のキャッシュメモリを備え、制御部が、上位装置から読み出し命令を受信するステップ、読み出し命令の要求するアドレスのデータがキャッシュメモリに保存されているか検査するステップ、キャッシュメモリに保存されている場合に、キャッシュメモリに保存されているデータを読み出し命令の応答として上位装置に送信するステップ、キャッシュメモリに保存されていない場合に、揮発メモリ上のリスト内に読み出し命令の要求するアドレスが保存されているか検査するステップ、揮発メモリ上のリストに読み出し命令の要求するアドレスが保存されている場合に、ログから読み出し命令の要求するデータを読み出すステップ、ログから読み出したデータを読み出し命令の応答として送信するステップ、揮発メモリ上のリストに保存されていない場合に、ログ内に読み出し命令の要求するアドレスが保存されているか検査するステップ、ログ内に読み出し命令の要求するアドレスが保存されている場合に、ログから読み出し命令の要求するデータを読み出すステップ、ログから読み出したデータを読み出し命令の応答として送信するステップ、ログ内に読み出し命令の要求するアドレスが保存されていない場合に、記憶媒体から読み出し命令の要求するデータを読み出すステップ、記憶媒体から読み出したデータを読み出し命令の応答として送信するステップ、を実行する。
【００１４】
また、制御部は、上位装置からのログ参照命令を受信するステップ、ログ参照命令の応答としてログ内のアドレス及び／又はデータを上位装置に送信するステップ、を実行する。
【００１５】
また、前記目的を達成するため、本発明によるディスク装置は、以下の手段を採用する。
【００１６】
すなわち、本発明によるディスク装置は、記憶媒体と、上位装置との間でコマンドやデータの送受信を行ない記憶媒体に対して書き込み又は読み出しを行なう制御部と、上位装置から受信した書き込み命令とデータとから、当該データと当該データを書き込むべきアドレスとを記憶媒体上に存在するログ又は不揮発メモリ上に存在するログに追加するログ書き込み手段と、を備える。
【００１７】
本発明によるディスク装置は、また、ログに保存されたデータをログに保存されたアドレスに書き込むログフラッシュ手段を備える。ログフラッシュ手段は、定められた連続アドレス分のデータを生成した後に、そのデータを記憶媒体に書き込む。
【００１８】
本発明によるディスク装置は、また、コピー状態管理手段を有し、コピー状態管理手段がログフラッシュ手段によるデータの記憶媒体への書き込み完了を示していない場合に、ログフラッシュ手段はデータの記憶媒体への書き込みをやり直す。
【００１９】
本発明によるディスク装置の一態様は、データ一時保存用のキャッシュメモリと、データ読み出し手段とを備え、データ読み出し手段は、上位装置からの読み出し命令を受信した場合に、読み出し命令の要求するアドレスのデータがキャッシュメモリに保存されているか検査し、キャッシュメモリに保存されている場合に、キャッシュメモリに保存されているデータを読み出し命令の応答として上位装置に送信し、キャッシュメモリに保存されていない場合に、ログ内に読み出し命令の要求するアドレスが保存されているか検査し、ログ内に読み出し命令の要求するアドレスが保存されている場合に、ログから読み出し命令の要求するデータを読み出し、ログから読み出したデータを読み出し命令の応答として送信し、ログ内に読み出し命令の要求するアドレスが保存されていない場合に、記憶媒体から読み出し命令の要求するデータを読み出し、記憶媒体から読み出したデータを読み出し命令の応答として送信する。
【００２０】
本発明によるディスク装置の別の態様は、揮発メモリと、データ一時保存用のキャッシュメモリと、データ読み出し手段とを備え、ログ書込手段は、データを書き込むべきアドレスを揮発メモリ上のリストに登録し、データ読み出し手段は、上位装置からの読み出し命令を受信した場合に、読み出し命令の要求するアドレスのデータがキャッシュメモリに保存されているか検査し、キャッシュメモリに保存されている場合に、キャッシュメモリに保存されているデータを読み出し命令の応答として上位装置に送信し、キャッシュメモリに保存されていない場合に、揮発メモリ上のリスト内に読み出し命令の要求するアドレスが保存されているか検査し、揮発メモリ上のリストに読み出し命令の要求するアドレスが保存されている場合に、ログから読み出し命令の要求するデータを読み出し、ログから読み出したデータを読み出し命令の応答として送信し、揮発メモリ上のリストに保存されていない場合に、ログ内に読み出し命令の要求するアドレスが保存されているか検査し、ログ内に読み出し命令の要求するアドレスが保存されている場合に、ログから読み出し命令の要求するデータを読み出し、ログから読み出したデータを読み出し命令の応答として送信し、ログ内に読み出し命令の要求するアドレスが保存されていない場合に、記憶媒体から読み出し命令の要求するデータを読み出し、記憶媒体から読み出したデータを読み出し命令の応答として送信する。
【００２１】
本発明によるディスク装置は、また、上位装置からのログ参照命令を受信した場合に、ログ参照命令の応答としてログ内のアドレス及び／又はデータを上位装置に送信するログ参照手段を備える。
【発明の効果】
【００２２】
本発明によると、上位装置からディスク装置へのデータ転送量を削減することでディスク装置の実効性能が向上することができる。また、ディスク装置がデータ書き込み完了を通知した段階で、ディスク装置に書き込んだデータが永続的に存在するとともに、書き込み対象以外のデータが破壊されないことを保証できる。また、巨大なアドレス変換表が不要になり、記憶媒体への書き込み中に障碍が発生してバンドへの書き込みが中断した場合でも、記憶媒体に記録済みのデータがロストすることがない。
【発明を実施するための最良の形態】
【００２３】
発明の実施例について図面を参照して説明する。なお、同一の参照番号は同一の構成要素を示す。
【００２４】
本発明では、上位装置からのデータ書き込み命令を処理する際に、ディスク装置内部のログに書き込み、ログに記録されたセクタのデータと記憶媒体に記録されたセクタのデータとから新しいバンドのイメージを作業領域上に作成し、作成したイメージを記憶媒体に書き込む。
【００２５】
図１は、隣接トラックを部分的に重ね書きする場合のトラック配置の概念図である。トラック１０１から１０５では書き込みヘッド１２１で書き込んだトラックを部分的に重ね書きし、書き込みヘッド１２１よりも幅の狭い読み出しヘッド１２２で読み出すことで、書き込みヘッド１２１の幅よりもトラック幅１１１を狭くしている。図１ではトラック１０３の書き込み後にトラック１０４を書き込んでいる。トラック１０４の書き込みによりトラック１０５が消去される。このため隣接トラックを部分的に重ね書きする場合には、あるトラックに書き込みを開始すると、ある一定範囲のトラックを全て更新する必要がある。このようなトラック群をバンドと呼ぶ。
【００２６】
図２は、複数の連続するトラックからなるバンド構造の概念図である。図２において、２０１はバンド、２０２は二つのバンド間でデータ破壊を防止するためのバンドギャップ、である。図２のようにバンドの末尾のトラックのみ幅広にして、バンドギャップ２０２の領域を作ることで隣のバンドのデータ破壊を防止する。
【００２７】
図７は、ディスク装置のブロック図である。このディスク装置は、フラッシュメモリ７０１、主記憶７０２、キャッシュメモリ７０３、メモリコントローラ及びマイクロプロセッサ７０４、ハードディスクコントローラ及びSCSIプロトコルコントローラ７０５、ディスクインタフェース７０６、サーボコントローラ７０７、リードライトチャネル７０８、ヘッド７１１、記憶媒体７１２、アクチュエータアーム７１３、ボイスコイルモータ７１４を備える。
【００２８】
フラッシュロム７０１にはディスク装置の起動に必要なプログラムが格納される。主記憶７０２は、メモリコントローラ及びマイクロプロセッサ７０４の制御用プログラムと制御に必要な各種データの格納に使用する。キャッシュメモリ７０３は、ディスクインタフェース７０６経由で上位装置のディスクコントローラとの間で送受信するデータのキャッシュに使用する。上位装置との通信に用いる通信プロトコルは、ハードディスクコントローラ及びSCSIプロトコルコントローラ７０５のSCSIプロトコルコントローラ部分で処理される。SCSIプロトコルコントローラに送られたコマンドは、メモリコントローラ及びマイクロプロセッサ７０４のマイクロプロセッサ部分により書き込みヘッド及び読み出しヘッドの駆動命令に変換されて、ハードディスクコントローラ及びSCSIプロトコルコントローラ７０５のハードディスクコントローラ部分に送られる。ハードディスクコントローラは、受信した命令を元にサーボコントローラ７０７とリードライトチャネル７０８とを制御し、記憶媒体７１２へのデータの書き込み又は読み出しを実行する。アクチュエータアーム７１３の先端に取り付けたヘッド７１１を記憶媒体７１２の読み出し対象のセクタの位置に移動するように、サーボコントローラ７０７がボイスコイルモータ７１４を制御する。ヘッド７１１が読み出し対象のセクタに移動した後で、リードライトチャネル７０８がヘッド７１１に対してデータの送受信を実行する。この時、書き込みであればキャッシュメモリ７０３に保存されたデータを記憶媒体に書き込み、読み出しであれば記憶媒体に保存されたデータをキャッシュメモリ７０３に書き込む。
【００２９】
ディスク装置の電源が投入されると、メモリコントローラ及びマイクロプロセッサ７０４がフラッシュロム７０１から起動用のプログラムを読み出し、メモリコントローラ部分が主記憶７０２、キャッシュメモリ７０３を初期化し、ハードディスクコントローラ及びSCSIプロトコルコントローラ７０５経由でサーボコントローラ７０７とリードライトチャネル７０８を制御して、残りの制御プログラムと制御に必要な各種データをディスク装置の記憶媒体から読み出す。読み出した制御プログラムと各種データを主記憶７０２上に格納する。これらの制御プログラムには、データ書き込みプログラム７２１、ログフラッシュプログラム７２２、データ読み出しプログラム７２３、などがある。これらの制御プログラムについては図４、図５、図６でフロー図を用いて説明する。データ構造の一例については図３で説明する。
【００３０】
図８は、本発明によるデータ書き込み方法及びディスク装置の第一の実施例による、コマンド実行ループのフロー図である。このコマンド実行ループのプログラムは主記憶７０２上に置かれる無限ループである。
【００３１】
マイクロプロセッサ７０４が無限ループの実行を開始すると、ステップ８１０に進み、上位装置の発行するコマンドを受信したか検査する。受信している場合にはステップ８１１に進み、受信していない場合にはステップ８２０に進む。
【００３２】
ステップ８１１では、受信したコマンドが書き込みコマンドか検査する。書き込みコマンドである場合にはステップ８１２に進み、書き込みコマンドでない場合にはステップ８１３に進む。ステップ８１２では、データ書き込みプログラム７２１を実行する。ステップ８１２の終了後、ステップ８２２に進む。ステップ８２２では、ディスク装置がどの程度暇かを示すアイドルタイマの値を０にクリアする。ステップ８２２の終了後、ステップ８１０に戻る。
【００３３】
ステップ８１３では、受信したコマンドが読み出しコマンドか検査する。読み出しコマンドである場合にはステップ８１４に進み、読み出しコマンドでない場合にはステップ８１５に進む。ステップ８１４では、データ読み出しプログラム７２３を実行する。ステップ８１４の終了後、ステップ８２２に進む。
【００３４】
ステップ８１５では、本実施例で述べていないデータ書き込みプログラムもしくはデータ読み出しプログラム以外のプログラムを実行する。例えばログフラッシュプログラム７２２を実行する。ステップ８１５の終了後、ステップ８２２に進む。
【００３５】
ステップ８２０は、アイドルタイマの値が別途定める閾値以上か検査するステップである。閾値以上の場合にはステップ８２１に進み、閾値よりも小さい場合にはステップ８２３に進む。ステップ８２１ではログフラッシュプログラム７２２を実行する。ステップ８２１の終了後、ステップ８２２に進む。
【００３６】
ステップ８２３では、アイドルタイマの値に１を加える。アイドルタイマは、前回データ書き込みプログラム７２１などのプログラムを実行してから図８の無限ループを何回実行したかを表す。アイドルタイマの値が大きいほど、上位装置の発行するコマンドを受信しておらず、ディスク装置が暇であること、つまりディスク装置の負荷が小さいことを示す。アイドルタイマの値の閾値は別途S.M.A.R.T.などにより変更可能な変数であり、ディスク装置の使用目的に応じて最適化できる。ステップ８２３の終了後、ステップ８１０に戻る。
【００３７】
図３により、本発明で用いるデータ構造の例について説明する。ディスク装置の記憶媒体には、ユーザデータ領域３０１とシステム領域３１０とが存在する。ユーザデータ領域３０１は上位装置からLBAを指定してアクセス可能な領域であり、ユーザデータの保存に使われる。システム領域３１０には、ログ領域３１１、ダーティセクタ表３１２、作業領域３１３、が存在する。ユーザデータ領域３０１と異なり、上位装置はシステム領域３１０に対して通常のLBAを指定してアクセスできない。その代わりにシステム領域３１０にアクセスする場合には、ディスク装置のデータ領域にあり得ないLBAの指定、S.M.A.R.T.コマンド、ベンダーユニークコマンドなどを用いてアクセスする。ログ領域３１１のデータ構造３３０は、コマンドログ３３１とログに記録済みのセクタのデータへのオフセット３３２とからなるコマンド表３３４と、セクタのデータバッファ３３３とからなる。ダーティセクタ表３１２のデータ構造３４０は、ログに記録済みのセクタのLBA３４１とログに記録済みのデータへのオフセット３４２とからなる。作業領域３１３は、図５で説明するログをフラッシュするサブルーチンで使用する。
【００３８】
キャッシュメモリのデータ構造３２０は、キャッシュ済みのセクタのLBA３２１、キャッシュ済みセクタのデータ３２２、ダーティセクタリスト３２３とからなる。キャッシュ済みのセクタのLBA３２１とキャッシュ済みセクタのデータ３２２とは、通常のディスク装置で使われるデータ構造と同一である。ダーティセクタリスト３２３は、ログに記録済みのセクタのLBA３４１と同一もしくはそのサブセットである。主記憶７０２内のバンドのコピー状態管理変数３５１と作業領域３１３内のバンドのコピー状態管理変数３５２は、ログのフラッシュ作業の進捗状況を管理する。コピー状態管理変数３５１，３５２の初期状態の値は０、ユーザデータ領域３０１に書き込むべきデータを作業領域３１３に準備している状態の値は１、作業領域３１３からユーザデータ領域３０１にコピーしている状態の値は２、である。
【００３９】
次に、本発明によるディスク装置のデータ書き込みの動作の概略を説明する。通常のディスク装置では、上位装置の発行するデータ書き込みコマンドを受信すると、キャッシュメモリ７０３のキャッシュ済みのセクタのLBA３４１に書き込みコマンドの指定するLBAを保存し、キャッシュ済みのセクタのデータ３２２に書き込み対象のLBAのデータを保存するとともに、リードライトチャネル７０８を通して、記憶媒体のユーザデータ領域３０１のデータ書き込みコマンドの指定するLBAに対してセクタのデータを書き込む。これに対して本発明によるディスク装置では、キャッシュメモリ７０３にセクタのデータを保存する所は通常のディスク装置と同じであるが、ユーザデータ領域３０１にデータを書き込む代わりに、システム領域３１０のログ領域３１１、ダーティセクタ表３１２、ダーティセクタリスト３２３に書き込む。
【００４０】
ログ領域３１１への書き込みでは、コマンドログ３３１に上位装置の発行したデータ書き込みコマンドを記録し、書き込み対象のセクタのデータをセクタのデータバッファ３３３に書き込む。データバッファの先頭からのオフセットを、ログに記録済みのセクタのデータへのオフセット３３２に記録して、データ書き込みコマンドとセクタのデータバッファ３３３内のデータとの対応を管理する。
【００４１】
ダーティセクタ表３１２への書き込みでは、データ書き込みコマンドの書き込み対象のセクタのLBAを、ログに記録済みのセクタのLBA３４１に書き込み、セクタのデータバッファ３３３の先頭からのオフセットを、ログに記録済みのデータへのオフセット３４２に記録して、セクタのLBAとセクタのデータとの対応を管理する。
【００４２】
次に、本発明によるディスク装置のデータ読み出しの動作の概略を説明する。あるセクタのデータを読み出すには、ユーザデータ領域３０１とログ領域３１１のどちらに最新のデータが格納されているかを確認するためにダーティセクタ表３１２の参照が必要になる。ダーティセクタ表３１２をディスク装置の記憶媒体に保存する場合には、ダーティセクタ表３１２の参照が、データ読み出しの性能劣化の原因となり得る。このような場合には、ログに記録済みのセクタのLBA３４１を、キャッシュメモリ７０３内にダーティセクタリスト３２３として保存する。これにより、セクタのデータがログ領域３１１に記録されているかを高速に判定可能になり、ログ領域３１１やダーティセクタ表３１２への参照が必要最小限になり、データ読み出しの性能向上が可能になる。ディスク装置の記憶容量が100GBでセクタのデータバッファ３３３の容量が50MBの場合には、LBAが28bitでデータバッファのエントリ数が102400なので、ダーティセクタリスト３２３に必要な容量が350KBになる。
【００４３】
キャッシュメモリ７０３内のダーティセクタリスト３２３の容量を削減するには、ダーティセクタリスト３２３に登録するLBAをLRUアルゴリズムで管理する方法がある。キャッシュメモリ７０３は通常揮発メモリなので、ディスク装置の電源を切断すると記録した内容が失われる。このため、ディスク装置の電源投入時には、ダーティセクタ表３１２のログに記録済みのセクタのLBA３４１からダーティセクタリスト３２３を再構築して、キャッシュメモリ７０３に記録する必要がある。ログ領域３１１とダーティセクタ表３１２の全てを保存可能な大容量のフラッシュメモリ７０１をディスク装置に搭載する場合には、キャッシュメモリ７０３上のダーティセクタリスト３２３は不要になる。
【００４４】
次に、図４のフロー図を参照して、データ書き込み方法の手順を説明する。処理を開始するとステップ４１０に進む。ステップ４１０では、セクタのデータバッファ３３３に記録したセクタのデータの個数が閾値に到達したか検査する。閾値は、ディスク装置のパラメータとして工場出荷時に設定しておく他、別途ベンダーユニークコマンドやS.M.A.R.T.により工場出荷後にユーザの使用する環境で設定可能である。ステップ４１０の判定で閾値を越えている場合にはサブルーチン４１１に進んでログの内容をフラッシュし、越えていない場合にはステップ４２０に進む。サブルーチン４１１は、後で図５を参照して説明する。サブルーチン４１１の終了後、ステップ４２０に進む。
【００４５】
ステップ４２０では、ログに記録済みのLBAへの書き込みかどうかを検査する。ログに記録済みのLBAはダーティセクタ表３１２に登録されているので、ログに記録済みのセクタのLBA３４１に書き込み対象のLBAが存在するかを検索することで、LBAのデータがログに登録済みかを検査できる。ログに記録済みのLBAへの書き込みの場合にはステップ４２１に進み、そうでない場合にはステップ４０１に進む。ステップ４２１では、ログに記録済みの旧データを無効化する。データの無効化では、コマンドログ３３１の該当LBAに書き込んだコマンドを保存したエントリ、セクタのデータバッファ３３３から該当LBAのデータを保存したエントリ、ダーティセクタ表３１２の該当LBAのエントリ、に対してエントリの無効を表す値を書き込む。このようにエントリを無効化することで、使用済みの領域が再利用可能になる。ステップ４２１の終了後、ステップ４０１に進む。
【００４６】
ステップ４０１では、上位装置の発行したデータ書き込みコマンドと書き込み対象のセクタのデータをログに追加する。つまり、書き込み対象のセクタのデータをセクタのデータバッファ３３３に追加し、データ書き込みコマンドとセクタのデータバッファ３３３に追加した際のバッファの先頭からのオフセットをコマンド表に追加する。ここでは本発明によるディスク装置の動作状態モニタのためコマンド表３３４を保存しているが、動作状態のモニタが不要であれば、コマンド表３３４を保存しなくても良い。これによりログ領域３１１の容量を削減できる。ステップ４０１の終了後、ステップ４０２に進む。
【００４７】
ステップ４０２では、ダーティセクタ表を更新する。ユーザデータ空間３０１ではなくログ領域３１１に新規データを書き込む方式では、ユーザデータ空間に記録済みのデータが陳腐化している場合がある。このように陳腐化したデータを保存しているセクタを汚れたセクタ（ダーティセクタ）と呼ぶ。ユーザデータ空間にあるダーティセクタではなく、ログ内の最新データにアクセスするために、ダーティセクタとログ内の最新のデータへのポインタ（セクタのデータバッファ内のオフセット）を、ダーティセクタ表３１２に保存する。そこでステップ４０２では、書き込み対象のLBAの値とステップ４０１でセクタのデータバッファ３３３に追加したセクタのデータのオフセットとを、ダーティセクタ表３１２のログに記録済みのセクタのLBA３４１とログに記録済みのデータへのオフセット３４２にそれぞれ記録する。ステップ４０２の終了後、ステップ４０３に進む。
【００４８】
ステップ４０３では、ダーティセクタリスト３２３を更新する。つまり、書き込み対象のLBAをキャッシュメモリ内のダーティセクタリスト３２３に登録する。もしもキャッシュメモリ内のダーティセクタリスト３２３のサイズが小さく、セクタのデータバッファ３３３に登録可能な全てのセクタをダーティセクタリスト３２３に登録不可能な場合には、LRUアルゴリズムにより使用頻度の低いLBAの値をダーティセクタリスト３２３から取り除く。ステップ４０３の終了後、データ書き込み処理を終了する。
【００４９】
次に、図５のフロー図を参照して、ログをフラッシュする手順について説明する。隣接トラックどうしが部分的に重ね書きされたバンド構造をしていると、バンド内の特定のセクタのみを更新できない。そこで本実施例では、ログをフラッシュするためにログのデータを直接ユーザデータ空間３０１に書き出すのではなく、システム空間３１０内の作業領域３１３にバンド全体のディスクイメージを作成し、ディスクイメージ全体をバンドにコピーする。ログに記録済みのデータだけではバンド全体のデータに満たない場合には、ユーザデータ空間から不足分のデータを読み出してバンドのイメージを作成する。図５のログのフラッシュ手順では、一回の処理で一つのバンドの更新のみ行なう。複数のバンドの更新が必要な場合には、本サブルーチンを複数回実行する。
【００５０】
処理を開始するとステップ５０１に進む。ステップ５０１では、作業領域３１３を初期化してバンドのイメージを保存可能にする。この時、主記憶７０２内のバンドのコピー状態管理変数３５１と作業領域３１３内のバンドのコピー状態管理変数３５２との値を１に設定する。ステップ５０１の終了後、ステップ５０２に進む。ステップ５０２では、ユーザデータ空間３０１内の処理対象のバンドの先頭セクタへシークする。ステップ５０２の終了後、ステップ５１０に進む。
【００５１】
ステップ５１０では、ダーティセクタ表３１２を参照して処理対象のLBAが登録済みかによって、処理対象のセクタがダーティであるかどうかを判定し、ダーティである場合にはステップ５１１に進み、ダーティでない場合には５１２に進む。ステップ５１１では、処理対象のセクタはダーティであり、最新のデータはユーザデータ空間３０１のバンド上ではなくログ領域３１１のセクタのデータバッファ３３３上に存在するため、セクタのデータバッファ３３３から処理対象のセクタのデータを読み出す。ステップ５１１の終了後、ステップ５０３に進む。ステップ５１２では、処理対象のセクタはクリーン、すなわち最新のデータはユーザデータ空間３０１のバンド上に存在するため、ユーザデータ空間３０１から処理対象のセクタのデータを読み出す。ステップ５１２の終了後、ステップ５０３に進む。
【００５２】
ステップ５０３では、ステップ５１１もしくはステップ５１２で読み出したセクタのデータを作業領域３１３に追加する。ステップ５０３の終了後、ステップ５０４に進む。ステップ５０４では、処理対象のバンドの次のセクタへシークする。ステップ５０４の終了後、ステップ５２０に進む。ステップ５２０では、バンドの末尾に到達したかを検査する。バンドの末尾に到達した場合にはステップ５２１に進み、そうでない場合にはステップ５１０に進む。ステップ５２１では、バンド内の全てのセクタの最新データが作業領域３１３に存在しており、バンドを更新する準備が整っているので、作業領域３１３の内容をユーザデータ空間３０１のバンドにコピーする。コピー開始前に、主記憶７０２内のバンドのコピー状態管理変数３５１と作業領域３１３内のバンドのコピー状態管理変数３５２との値を２に設定する。バンドのコピーの完了後、ログ領域３１１やダーティセクタ表３１２で不要になった領域を無効化して再利用可能にする。さらに、主記憶７０２内のバンドのコピー状態管理変数３５１と作業領域３１３内のバンドのコピー状態管理変数３５２の値を０に設定する。
【００５３】
作業領域３１３の内容をユーザデータ空間３０１のバンドにコピーしている最中に停電や上位装置の暴走などの障碍が発生してコピーが中断すると、ユーザデータ空間３０１のバンドの状態が不定になりデータロストが発生する。本実施例では作業領域３１３内のバンドのコピー状態管理変数３５２にバンドのコピー状態を保持しているため、この変数を参照してコピーが異常終了した場合にコピーを適切に再実行できる。つまり、コピー状態管理変数３５２の値が０であれば、バンドへのコピーは正常終了しているので何もせず、値が１であればバンドに書き込むべきデータを用意している途中で処理が中断しているのでステップ５０１から実行をやり直し、値が２であればバンドへの書き込み途中に処理が中断しているのでステップ５２１から実行をやり直す。
【００５４】
次に、図６のフロー図を参照して、データ読み出しの手順について説明する。本実施例では、読み出し対象のセクタがキャッシュ済みもしくはダーティかどうかに応じて、セクタの最新のデータがキャッシュメモリ７０３、ログ領域３１１、ユーザデータ空間３０１のいずれかに存在する。そこでセクタのデータを読み出すには、どこに最新のデータが存在するかを調べる必要がある。
【００５５】
処理を開始すると、ステップ６１０に進む。ステップ６１０では、読み出し対象のセクタのデータがキャッシュメモリ７０３のキャッシュ済みセクタのデータ３２２に保存されているか検査する。キャッシュメモリにデータが保存されている場合には、ステップ６１１に進み、そうでない場合にはステップ６２０に進む。ステップ６１１では、キャッシュ済みセクタのデータ３２２から読み出し対象のセクタのデータを読み出す。ステップ６１１の終了後、セクタのデータ読み出し処理を終了する。
【００５６】
ステップ６２０では、読み出し対象のセクタがキャッシュメモリ７０３のダーティセクタリスト３２３に登録されているか検査する。登録されている場合にはステップ６２１に進み、そうでない場合にはステップ６３０に進む。ステップ６２１では、読み出し対象のセクタの最新のデータがログ領域３１１のセクタのデータバッファ３３３に存在するため、セクタのデータバッファ３３３から読み出し対象のセクタのデータを読み出す。ステップ６２１の終了後、セクタのデータ読み出し処理を終了する。
【００５７】
ステップ６３０では、ダーティセクタリスト３２３がセクタのデータバッファ３３３に記録した全てのセクタのLBAを保存しているか検査する。全て保存している場合にはダーティセクタ表３１２を参照する必要がないのでステップ６３１に進み、そうでない場合にはステップ６４０に進む。
【００５８】
ステップ６４０では、ダーティセクタ表３１２に読み出し対象のセクタが登録されているか検査する。登録されている場合にはステップ６２１に進み、そうでない場合にはステップ６３１に進む。ステップ６３１では、読み出し対象のセクタのデータがユーザデータ空間３０１のバンド上に存在するため、ユーザデータ空間３０１のバンドから読み出し対象のセクタのデータを読み出す。ステップ６３１の終了後、セクタのデータ読み出し処理を終了する。
【００５９】
本実施例では、記憶媒体に保存されたダーティセクタ表３１２を参照する以前に、記憶媒体よりも数桁高速に参照可能なキャッシュメモリ７０３に保存されたダーティセクタリスト３２３を参照してセクタがダーティかどうかを判定することで、データの読み出し速度を高速化する効果がある。
【００６０】
本実施例では、ログ領域３１１とダーティセクタ表３１２とがシステム空間３１０上に存在するが、これらの配置場所はシステム空間３１０上に限らない。フラッシュロム７０１の容量が十分に大きければフラッシュメモリ７０１上に置くことも可能である。またユーザデータ空間３０１上に置くことも可能である。また、作業領域３１３もシステム空間３１０上に存在するが、これも同様にフラッシュロム７０１上やユーザデータ空間３０１上に置くことも可能である。
【００６１】
また本実施例では、ディスク装置の動作状態モニタのため、上位装置の発行するデータ書き込みコマンドもログに記録しているが、必ずしもコマンドをログに記録する必要はない。コマンドをログに記録しない場合には、ログに必要な記憶容量を削減できる。
【００６２】
また本実施例では、ログのサイズが閾値を越えた場合にログをフラッシュするが、ログをフラッシュするタイミングはこれに限らない。例えば、ディスク装置の負荷が低下したタイミングや、上位装置がログのフラッシュコマンドを発行したタイミングでログをフラッシュすることもできる。
【００６３】
本実施例では、バンドの更新のためには上位装置は更新の必要なセクタについてのみデータ書き込みコマンドを発行すれば良い。これにより上位装置からディスク装置へのデータ転送量が削減可能になり、ディスク装置のインタフェースの占有時間を短縮できる。ログのフラッシュはディスク装置の負荷の低下したタイミングで行なえるので、インタフェース占有時間の短縮によりディスク装置の実効性能を向上する効果がある。
【００６４】
また本実施例では、ディスク装置が上位装置に書き込み完了を通知した段階で、データがログに書き込まれており、ユーザデータ空間のデータを破壊しないので、通常のディスク装置と同様にディスク装置に書き込んだデータが永続的に存在するとともに、書き込み対象以外のデータが破壊されないことを保証できる効果がある。
【００６５】
また本実施例では、アドレス変換表が必要なのはログに記録したセクタ分についてのみであるため、巨大なアドレス変換表が不要になる効果がある。
【００６６】
また本実施例では、バンドへの書き込み中に障碍が発生してバンドへの書き込みが中断した場合でも、バンドの最新のデータがログに残っているため障碍から復帰した後でバンドへの書き込みを再開可能であり、バンドのデータがロストしない効果がある。
【００６７】
本発明は、隣接トラックを部分的に重ね書きするトラックのレイアウトを持ち、特に複数の連続トラック群を一括して書き換えるバンド構造を持ったディスク装置に適用すると、バンドの更新時の上位装置とディスク装置との間のデータ転送量を削減するとともに、更新時の障碍発生によるデータロストを防止できるため、特に有用である。
【図面の簡単な説明】
【００６８】
【図１】隣接トラックを部分的に重ね書きする場合のトラック配置の概念図。
【図２】複数の連続するトラックからなるバンド構造の概念図。
【図３】本発明によるデータ書き込み方法及びディスク装置のデータ構造例を示す概略図。
【図４】本発明によるデータ書き込みのフロー図。
【図５】本発明によるログをフラッシュするサブルーチンのフロー図。
【図６】本発明によるデデータ読み出しのフロー図。
【図７】ディスク装置のブロック図。
【図８】本発明によるコマンド実行ループのフロー図。
【符号の説明】
【００６９】
１０１ トラック
１０２ トラック
１０３ トラック
１０４ トラック
１０５ トラック
１１１ トラック幅
１２１ 書き込みヘッド
１２２ 読み出しヘッド
２０１ バンド
２０２ 二つのバンド間でデータ破壊を防止するためのバンドギャップ
３０１ ユーザデータ領域
３１０ システム領域
３１１ ログ領域
３１２ ダーティセクタ表
３１３ 作業領域
３２０ キャッシュメモリのデータ構造
３２１ キャッシュ済みセクタのLBA
３２２ キャッシュ済みセクタのデータ
３２３ ダーティセクタリスト
３３０ ログ領域内のデータ構造
３３１ コマンドログ
３３２ ログに記録済みのセクタのデータへのオフセット
３３３ セクタのデータバッファ
３３４ コマンド表
３４０ ダーティセクタ表のデータ構造
３４１ ログに記録済みのセクタのLBA
３４２ ログに記録済みのデータへのオフセット
３５１ 主記憶内のバンドのコピー状態管理変数
３５２ 作業領域内のバンドのコピー状態管理変数
７０１ フラッシュメモリ
７０２ 主記憶
７０３ キャッシュメモリ
７０４ メモリコントローラ及びマイクロプロセッサ
７０５ ハードディスクコントローラ及びSCSIプロトコルコントローラ
７０６ ディスクインタフェース
７０７ サーボコントローラ
７０８ リードライトチャネル
７１１ ヘッド
７１２ 記憶媒体
７１３ アクチュエータアーム
７１４ ボイスコイルモータ
７２１ データ書き込みプログラム
７２２ ログフラッシュプログラム
７２３ データ読み出しプログラム
【図１】
2007012139.tif 000003
【図２】
2007012139.tif 000004
【図３】
2007012139.tif 000005
【図４】
2007012139.tif 000006
【図５】
2007012139.tif 000007
【図６】
2007012139.tif 000008
【図７】
2007012139.tif 000009
【図８】
2007012139.tif 000010