(57)【特許請求の範囲】
【請求項１】
アプリケーションが第１バッファを介してデータを転送する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器と、の間における前記転送データの欠落を検出する方法であって、
（ａ）第１情報機器において、アプリケーションのための第１バッファに蓄積された転送データを分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）第１情報機器において、第１バッファに保管された転送データに含まれる前記分割データと関連付けてｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップと、
（ｃ）第２情報機器において、アプリケーションにより送られた前記転送データを受取り第２バッファに保管するとともにｗｒｉｔｅハッシュ値を受取り、ｗｒｉｔｅハッシュ値を前記転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２情報機器において、第２バッファに保管された前記分割データを読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップと、
（ｅ）前記専用バッファに保管されたｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値とを比較するステップと、
（ｆ）前記比較において２つのハッシュ値が一致しない場合、前記分割データの転送時点において転送データに欠落あると認定するステップとを含み、
前記分割データは、一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を実行する方法。
【請求項２】
アプリケーションが第１バッファを介してデータを転送する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器との間に、第１情報機器が実行する、前記転送データの欠落を検出する方法であって、
（ａ）アプリケーションのための第１バッファに蓄積された転送データを時間的転送方向について分割し、前記分割されたデータ（分割データ）を読出し前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けてｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを含み、
前記分割データは、一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を実行する方法。
【請求項３】
アプリケーションが第１バッファを介してデータを転送する第１情報機器と、
第１情報機器に外部ネットワークを介して通信可能に接続され、第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、第２情報機器が前記転送データの欠落を検出する方法であって、第１情報機器が（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを含み、前記分割データは一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を特徴とする前記ステップを実行する場合に、第２情報機器が実行する前記転送データの欠落を検出する方法であって、
（ｃ）アプリケーションにより送られた前記転送データを受取り第２バッファに保管するとともに前記ｗｒｉｔｅハッシュ値を受取り、前記ｗｒｉｔｅハッシュ値を前記転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２バッファに保管された前記分割データを読出し、前記分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップとを含む、方法。
【請求項４】
（ｅ）前記専用バッファに保管されたｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値とを比較するステップと、
（ｆ）前記比較において２つのハッシュ値が一致しない場合、前記分割データの転送時点において転送データの欠落あると認定するステップと、を更に含む請求項３に記載の方法。
【請求項５】
ステップ（ｅ）は、第２情報機器において前記専用バッファに保管されたｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値とを対比する請求項４に記載の方法。
【請求項６】
前記分割データの欠落を検出するステップ（ｆ）は、前記転送データの欠落を検出した場合、回復処理を実行することを特徴とする請求請４または５に記載の方法。
【請求項７】
アプリケーションが第１バッファを介しデータを転送する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器との間に、第１情報機器が実行する転送データの欠落を検出するプログラムであって、
（ａ）第１情報機器において、アプリケーションのための第１バッファに蓄積された転送データを分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）第１情報機器において、アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを含み、
前記分割データは、一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を第１情報機器に実施させるプログラム。
【請求項８】
アプリケーションが第１バッファを介して記録データのデータ転送を行う第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、第２情報機器が前記転送データの欠落を検出するプログラムであって、第１情報機器が（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを含み、前記分割データは一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を特徴とする前記ステップを実行する場合に、第２情報機器が実行する前記転送データの欠落を検出するプログラムであって、
（ｃ）アプリケーションにより送られた前記転送データを受取り第２バッファに保管するとともに前記ｗｒｉｔｅハッシュ値を受取り、前記ｗｒｉｔｅハッシュ値を前記転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２バッファに保管された前記分割データを読出し、前記分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップとを含み、
前記分割データは、一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を第２情報機器に実行させるプログラム。
【請求項９】
アプリケーションが第１バッファを介してデータを転送する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器との間おいて、前記転送データの欠落を検出する第１情報機器であって、
（ａ）アプリケーションのための第１バッファに蓄積された転送データを分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを含み、
前記分割データは、一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を実行する第１情報機器。
【請求項１０】
アプリケーションが第１バッファを介してデータを転送する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、第１情報機器の前記アプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、前記転送データの欠落を検出する第２情報機器であって、第１情報機器が（ａ）アプリケーションのための第１バッファに蓄積された転送データを分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを含み、前記分割データは一定時間での第１バッファに蓄積する可変データ量であり、前記ハッシュ値は前記可変データ量の分割データに対して計算されること、を特徴とする前記ステップを実行する場合に、前記転送データの欠落を検出する第２情報機器であって、
（ｃ）アプリケーションにより送られた前記転送データを受取り第２バッファに保管するとともにｗｒｉｔｅハッシュ値を受取り、ｗｒｉｔｅハッシュ値を前記転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２情報機器のための第２バッファに保管された前記分割データを読出し、前記分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップとを、を実行して前記転送データの欠落を検出する第２情報機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部ネットワークを介して接続された情報機器間のデータ転送の欠落を検出することに関する。より詳しくは、外部ネットワークを介して接続されたサーバ及び外部記憶システム間のデータ転送の欠落を検出する方法に関する。
【背景技術】
【０００２】
図１は、複数のサーバが外部ネットワークを介して複数の外部ストレージに接続されていることを示す。サーバはデータを記憶装置（記憶システム、ストレージ）へ転送し保管する。サーバで稼動するストレージ・アプリケーションは、ＯＳのファイルシステムを経てＨＢＡ(Host Bus Adapter)デバイスドライバにデータを渡す。ＨＢＡは、ファイバ・チャネルと呼ばれるデータ転送経路にデータを送信する。データは、ファイバ・チャネルの途中に存在するＳＡＮ(Storage Area Network)を経由して、外部ストレージに到達し保管される。【０００３】
外部ネットワークは、それのデータ転送経路に含まれる多様なコンポーネントを含む。サーバは、外部ネットワークを介するデータ転送においては期待通りにはすべてのデータをストレージに到達せずに一部のデータが欠落する場合がある。データの欠落は、データ完全性 (Data integrity)において致命的な問題である。【０００４】
技術的には、各々サーバなど情報機器間のデータ転送区間においては、チェックサム(Check Sum)やＣＲＣ(Cyclic Redundancy Check)が行われている。各々サーバなど情報機器間データ転送の引渡しを取り持つ機能で不具合があればこれらの機能は効果を持たない。これらの機能は、ＯＳレベルでのデータの連続性確保（データ欠落の検出）をする観点の技術ではない。【０００５】
特許文献１は、ファイルシステムに保存されているデータを転送完了後に、ハッシュ値で確認し、エラーが検出されれば、すべてのデータを再送する。【０００６】
特許文献２は、サーバ間のデータ転送を確実にするために、データを分割しながら転送してその単位ごとにハッシュ値を生成するが、通し番号でデータの欠落をみている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−２６８５４２号公報
【特許文献２】特開２００４−１８５１８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、引用例文献では、ファイルシステム上のデータにしか対応できない。また、従来の技術では、ＯＳレベルでのリアルタイムでのデータの連続性を確保できない。つまり、データブロックの流れが途切れていないというデータの連続性を保証する必要がある。特に大規模データの一部データ欠落を検出する場合、全データの転送終了後になって検出するために時間的損失となっていた。【０００９】
従って、本発明の目的は、データ転送の情報機器の両端においてデータ欠落(lack of data)を検出してデータの連続性を保証することである。
また、本発明の目的は、アプリケーション・レベルでのデータの連続性の観点でのデータ完全性(Data integrity) を保証することである。
【課題を解決するための手段】
【００１０】
かかる目的のもと、本発明は、アプリケーションが第１バッファを介してデータの転送を実行する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器と、の間における転送データの欠落を検出する方法である。ここで、この方法は、
（ａ）第１情報機器において、アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的転送方向について分割し、分割されたデータ（分割データ）を読出し、その分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）第１情報機器において、アプリケーションにより第１バッファに保管された転送データに含まれる分割データと関連付けてｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップと、
（ｃ）第２情報機器において、アプリケーションにより送られた転送データを受取り第２バッファに保管するとともにｗｒｉｔｅハッシュ値を受取り、ｗｒｉｔｅハッシュ値を転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２情報機器において、第２バッファに保管された分割データを読出し、分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップと、
（ｅ）専用バッファに保管されたｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値とを比較するステップと、
（ｆ）比較において２つのハシュ値が一致しない場合、分割データの転送時点においてデータの欠落あると認定するステップとを実施する。【００１１】
更にかかる目的のもと、本発明は、アプリケーションが第１バッファを介してデータの転送を行う第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器の前記アプリケーションからの転送データを第２バッファに保管する第２情報機器と、の間において、第１情報機器が実行する前記転送データの欠落を検出する方法である。ここで、この方法は、
（ａ）第１情報機器において、アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的な転送方向について分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）第１情報機器において、アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップと、を実施することを特徴とする。【００１２】
更にかかる目的のもと、本発明は、アプリケーションが第１バッファを介してデータの転送を行う第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器と、の間において、第２情報機器が前記転送データの欠落を検出する方法であって、第１情報機器が（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的転送方向について分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップと、を実行する場合に、第２情報機器が実行する前記転送データの欠落を検出する方法である。ここで、この方法は、
（ｃ）第２情報機器において、アプリケーションにより送られた転送データを受取り第２バッファに保管するとともにｗｒｉｔｅハッシュ値を受取り、ｗｒｉｔｅハッシュ値を前記転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２情報機器において、第２バッファに保管された分割データを読出し、該分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップと、を実行することを特徴とする。【００１３】
また、この方法は、
（ｅ）専用バッファに保管されたｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値とを比較するステップと、
（ｆ）比較ステップにおいて２つのハシュ値が一致しない場合、前記分割データの転送時点において転送データに欠落あると認定するステップと、を更に含むことを特徴とする。【００１４】
また、ステップ（ｅ）は、第２情報機器において前記専用バッファに保管されたｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値とを対比することを特徴とする。【００１５】
また、分割データは転送データを固定データ量毎したものであり、ハッシュ値は転送データの固定データ毎に計算されることを特徴とする。【００１６】
また、分割データはアプリケーションが一定時間に第１バッファに保管する可変データ量であり、ハッシュ値は前記可変データ量の分割データに対して計算されることを特徴とする。【００１７】
また、ステップ（ｆ）は、転送データの欠落を検出した場合回復処理（再度前記分割データの第２情報機器への書込み）を実行することを特徴とする。【００１８】
更に、本発明は、アプリケーションが第１バッファを介してデータの転送を行う第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器の前記アプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、第１情報機器が実行する転送データの欠落を検出するプログラムである。ここで、このプログラムは、
（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的転送方向について分割し、その分割されたデータ（分割データ）を読出し、分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップと、を第１情報機器に実施させる。【００１９】
更に、本発明は、アプリケーションが第１バッファを介してデータの転送を行う第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器のアプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、第２情報機器が転送データの欠落を検出する方法であって、第１情報機器が（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的転送方向について分割し、分割されたデータ（分割データ）を読出し、分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを実行する場合に、第２情報機器が実行する転送データの欠落を検出するプログラムである。ここで、このプログラムは、
（ｃ）アプリケーションにより送られた転送データを受取り第２バッファに保管するとともにｗｒｉｔｅハッシュ値を受取り、該ｗｒｉｔｅハッシュ値を転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２バッファに保管された分割データを読出し、分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップと、を第２情報機器に実行させる。【００２０】
更に、本発明は、アプリケーションが第１バッファを介してデータの転送を実行する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器の前記アプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、前記転送データの欠落を検出する第１情報機器である。ここで、第１情報機器は、
（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的な転送方向について分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、
（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップと、を実行する。【００２１】
更に、本発明は、アプリケーションが第１バッファを介してデータの転送を実行する第１情報機器と、第１情報機器に外部ネットワークを介して通信可能に接続され、該第１情報機器の前記アプリケーションからの転送データを第２バッファに保管する第２情報機器との間において、前記転送データの欠落を検出する第２情報機器であって、第１情報機器が（ａ）アプリケーションにより書込みのために第１バッファに蓄積された転送データを時間的な転送方向について分割し、前記分割されたデータ（分割データ）を読出し、前記分割データについてハッシュ値を生成し該ハッシュ値をｗｒｉｔｅハッシュ値として第１情報機器の専用バッファに保管するステップと、（ｂ）アプリケーションにより第１バッファに保管された転送データに含まれる前記分割データと関連付けて前記ｗｒｉｔｅハッシュ値を第１情報機器から第２情報機器に送るステップとを実行する場合に、前記転送データの欠落を検出する第２情報機器である。ここで、第２情報機器は、
（ｃ）アプリケーションにより送られた転送データを受取り第２バッファに保管するとともに前記ｗｒｉｔｅハッシュ値を受取り、前記ｗｒｉｔｅハッシュ値を前記転送データに含まれる分割データと関連付けて第２情報機器の専用バッファに保管するステップと、
（ｄ）第２バッファに保管された分割データを読出し、前記分割データについてハッシュ値を生成しｒｅａｄハッシュ値として第２情報機器の専用バッファに保管するステップと、を実行する。
【発明の効果】
【００２２】
上述の手段を適用すれば、外部ネットワークに接続された情報機器間のデータ転送において、データの欠落をリアルタイムに検出できる。
【図面の簡単な説明】
【００２３】
【図１】複数のサーバが外部ネットワークを介して複数の外部ストレージに接続されていることを示す。
【図２】ネットワークストレージを構成する各デバイスとＨ／Ｗ及びＳ／Ｗ構成と、本発明が対象とするデータ欠落の発生範囲を示す。
【図３】本発明のハッシュ値の利用方法を示した概念図を示す。
【図４】本発明の分割データについてのデータ欠落検出のフローを示す。
【図５】ハッシュ確認のために交換して比較する３つのケースを示す。
【図６】本発明の複数のハッシュ値を利用方法の概念図を示す。
【発明を実施するための形態】
【００２４】
以下、サーバから外部ストレージにデータを転送して書込む場合について、実施の形態（実施例）を説明する。なお、本発明は一般には外部ネットワークを介して接続されたエンドツーエンド（ＥｎｄＴｏＥｎｄ）の情報機器間のデータ完全性を確認する場合に適用できる。
【００２５】
図２は、ネットワークを構成する各デバイスとＨ／Ｗ及びＳ／Ｗ構成と、本発明が対象とするデータ欠落の発生範囲を示す。アプリケーションやＯＳなどの上位レベルでのデータの転送において、一定のサイズまたは一定の時間ごとの転送データについてハッシュ値をサーバ側とストレージ側で計算する。２つのハッシュ値を比較して、データ転送の下位レベルの不具合をリアルタイムで検出しデータの完全性を確認する。ここで、図２に示すように上位レベルとは、外部ネットワークへのデータの書込み読込みの命令を実行する、エンドツーエンド機器２０，２２，２４のＯＳ、アプリケーション、及びストレージ制御ソフトウェアをいう。下位レベルとは、上位レベルの以下のデータ転送に関わるＨ／Ｗ２７，２９，及びＳ／Ｗ資源２８を含む。
【００２６】
下位レベルのデータ転送において、下位レベルのデータ処理ロジックの不具合により必ずしも上位レベルに適切な完了通知が届くとは限らない。たとえば、サイズの大きなデータを転送する際にデータはより小さな単位に分割されて転送される。分割転送中になんらかの障害が発生してエラー処理が実行されても、上位レベルにとって下位レベルのエラー処理が適切でない場合がある。上位レベルは転送が正常に完了したと判断しても、結果的に途中のデータは転送されない状況が発生しうる。このときに、上位レベルでのデータの連続性という観点で、途中のデータが未転送でデータの欠落が発生することをコマンドの再試行などにより回避できる。
【００２７】
上位レベルにおいてデータの連続性を検証する手段２３，２５を組込むことにより、下位レベルの範囲のＨ／Ｗ（ハードウエア）、Ｓ／Ｗ（ソフトウェア）構成では対応不可能なデータ欠落を検知できる。サーバ２０はＡＩＸをＯＳとしてストレージ・アプリケーション２１を駆動している。サーバ２２はＬＩＮＵＸをＯＳ２５としてストレージ・アプリケーションを駆動している。サーバは、ネットワーク・カード２９（例えばＨＢＡ：Host Bus Adapter）２９、そのドライバ２８、及び通信線２７を介してファイバ・チャネル・スイッチ２６に接続されている。ストレージ・システム２４は、制御ソフトウェア３０によりデータの記録媒体への書込み読出しを行う。ストレージ・システムは、例えばＨＢＡ２９及びそのドライバ２８が通信線を介してファイバ・チャネル・スイッチ２６に接続されている。ファイバ・チャネル・スイッチ２６は、外部ネットワーク、即ちＳＡＮ(Storage Area Network)を構成する。
【００２８】
サーバ（転送側）及びストレージ・システム（受信側）の手段２３，２５は、上位レベルと下位レベル間に介在して、本発明の機能を実行する。本発明の機能の詳細は、図４の処理フローにおいて説明される。本発明の手段は、アプリケーションでの書込みのためのデータ転送処理に連動して、データのバッファリング、ハッシュ値、ハッシュ値の対比などを実行する。本発明の機能を有するｃｏｐｙコマンドとｃｏｍｐａｒｅコマンドを実行する必要がある。これら機能を、ＯＳのライブラリ機能に含ませてもよいし、また、ストレージ・アプリケーションのライブラリに含ませても良い。
【００２９】
エンドツーエンドの下位レベルで生じるデータ欠落の原因の２つ例を説明する。
第１の事例として、ファイバーケールが断線して、データ欠落でもデータストレージに書き込まれたことを示す。データの転送中にＦＣケーブルの片方が断線して途中のデータが欠落する。ストレージの書込みアドレス箇所を読み出すと、以前に既に書かれていたデータが読める。ＦＣケーブルの片方が断線しても、残りの他方のパスが生きていればデータが転送されるはずであるが、ドライバのＦＣプロトコルに問題があったことによる。次の事例では、データの欠落は、エンドツーエンドがストレージ同士のデータ転送の欠落でも生じる。外部ネットワークへの接続をされたストレージ間のコピーでの書込み先のストレージにおいてデータの欠落が発生した。ストレージ側のネットワークアクセスを管理するフォームウエアにバグがあった。このバグが原因で、転送元から転送先にデータを送るときに転送先のアドレスを間違があったことによる。データを間違ったアドレスに転送するというのは、データを転送する際にデータの欠落が発生したとみなせる。
【００３０】
図３は、分割データ３０にハッシュ値を計算してｗｒｉｔｅハッシュ値３２として、分割データに関連付けられてバッファ３８に保管するイメージを示す。サーバ７０で駆動しているアプリケーションは記録媒体に記録され大規模なデータをストレージ７３に書込む命令を実行する、ことを想定している。アプリケーションは転送データを記憶領域（バッファ）４１に一時的に保管する。本発明の手段は、アプリケーション・ライブラリまたはＯＳを経由して転送データを専用の記憶領域（バッファ）３８に一時的に保管する。
【００３１】
専用のバッファ３８は、本発明の手段２３のためのものである。専用のバッファ３８は、アプリケーション２１が管理利用する必要がないためバッファ４１とは区別される。アプリケーション用のバッファ４１と本発明のソフトウェアの専用バッファ３８は物理的に一連のＤＲＡＭを区別して利用してもよい。ストレージ７３について上述のサーバ７０と同様にバッファの管理が適用される。専用のバッファ３９は、本発明の手段２５のためのものである。専用のバッファ３９はストレージ７３の制御ソフトウェア３０が管理利用する必要がないためバッファ４２とは区別される。
【００３２】
本発明の手段は、バッファ４１に一時的に保管された転送されるべきデータについて、ハッシュ値を計算する単位として分割されたデータ（分割データ３０）毎に管理する。分割データ３０は、転送するデータ単位でないことに注意する。転送の単位は通信のプロトコルで決定される。本発明は転送単位を変更することを目的としたものでない。本発明の手段は、アプリケーションのバッファ４１に保管されているデータから、データの転送処理とは別にハッシュ値を計算するために分割データ３０を特定する。本発明の手段は、分割データ３０からｗｒｉｔｅハッシュ値３２を生成して専用バッファ３８に一時的に保管する。
【００３３】
ｗｒｉｔｅハッシュ値３２と分割データ３０は互いに関連付けされていれば分離されて保管されてもよい。ｗｒｉｔｅハッシュ値は、分割データ３０に関連付けされ、別送される。各ハッシュ値と対応する分割データとの関連付けをする必要がある。ハッシュ値を生成する分割データは、アプリケーションのバッファ４１に保管された転送データの一部分である。各ハッシュ値にその値自体の他に関連付けのための属性情報を持たせる。例えば、その属性情報には、バッファ４１に保管された転送データの各分割データとハッシュ値との連結リスト(Linked List)を指標とする。指標には、バッファ４１の先頭アドレスから開始アドレス（オフセット）位置、及び固定バイト数などを含ませる。バッファ３８にはｗｒｉｔｅハッシュ値に、これら指標を対応させた連結リストを含む属性情報を付帯させて保管する。
【００３４】
なお、図３では、転送中のデータ３６は分割データ３０とｗｒｉｔｅハッシュ値３２が結合しているイメージを示す。実際の転送シーケンスではアプリケーションはハッシュ値の存在を認識しない。従って本発明の手段が扱うハッシュ値３２とアプリケーションが送る転送データとは互いに分離されて送られる。
【００３５】
ストレージ７３は、転送されたデータ３０を受取りバッファ４２に保管する。同様に、転送されたｗｒｉｔｅハッシュ値３２は対応する分割データ３０と対でバッファ３９に保管されているイメージを示す。ｗｒｉｔｅハッシュ値３２と分割データ３０は互いに関連付けされていれば分離されて保管されてもよい。ストレージ７３は、バッファ４２に保管された分割データ３０からｒｅａｄハッシュ値３４を計算し、バッファ３９に保管する。ストレージ７３のバッファ３９には、ｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値が存在する。本発明の手段は、後述する図４のフローのStep.５においてｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値を比較する。
【００３６】
図４は、本発明の分割データに基づくデータ完全性確認のフローを示す。本発明のｗｒｉｔｅハッシュ値とＲｅａｄハッシュ値の生成（計算）、交換、比較するフローについて、図を参照しながら説明する。
Step１（４０）： データ転送側・受信側にハッシュ値の保管領域（バッファ）３８，３９を確保する。
例えば、図３において、データ転送側はサーバであり、データ受信側はストレージである。計算されたハッシュ値の保存領域のために、一時作業領域として転送データの記憶領域（バッファ）４１，４２の未使用領域を使用してもよい。
Step２（４４ｏｒ４６）：データ転送側において、固定データ量単位または一定時間毎のデータ量でwriteハッシュ値を計算・保管する。データの転送側では、固定データ量単位でｗｒｉｔｅハッシュ値を計算する（４４）。または、事前に設定した時間毎に転送されたデータ量単位でｗｒｉｔｅハッシュ値を計算する（４６）。データ転送レートが一定でない場合には固定データ量毎だと（４４）、レートが低下したときにその転送中の分割データの確認に時間がかかりリアルタイムなデータ連続性の検証できない。
Step３（４７）：データ転送側からデータ受信側に分割データに関連付けてｗｒｉｔｅハッシュ値を送る。
Step４（４８ｏｒ４９）：データ受信側において固定データ量単位または一定時間毎のデータ量でreadハッシュ値を計算・保管する。データの受信側では、固定データ量単位でｒｅａｄハッシュ値を計算する（４４）。または、事前に設定した時間毎にｒｅａｄハッシュ値を計算する（４６）。
受信側では、同じ分割データについて送信側において使用されたハッシュ計算によりｒｅａｄハッシュ値を生成する。データ転送レートが一定でない場合には固定データ量毎だと（４４）、レートが低下したときにその転送中の分割データの確認に時間がかかりリアルタイムなデータ連続性の検証できない。
Step５（５０）：ｗｒｉｔｅハッシュ値・ｒｅａｄハッシュ値の交換と比較する。
ハッシュ値の転送側及び受信側間での交換は、例えば未使用の論理ブロック・アドレス（ＬＢＡ：Logical Block Address)に対する読み書きのコマンドで実行することができる。またＳＣＳＩコマンドを拡張してハッシュ値を交換することも考えられる。受信したハッシュ値は転送側及び受信側のバッファに保管する。 ｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値を比較する。ハッシュ値の比較は、図５において説明されように３通りの方法があり、サーバまたはストレージまたは両方で行われる。ハッシュ値の比較において一致（５２，Ｙｅｓ）すれば、そのまま処理を継続する。全データの転送が完了（６０，Ｙｅｓ）すれば、データ連続性が確認されデータ欠落がないと認定される。ハッシュ値の比較において一致しなければ（５２，Ｎｏ）、再度転送を実行する。同じ分割データについて転送（Step.１〜５）を再実行する（５３）。エラーをログ（記録）する。エラーのログの場所は、図５において説明されように３通りあり、ハッシュ値比較を実施した場合、サーバまたはストレージまたは両方である。同一の分割データについて、事前に設定したリトライ回数分（ｍａｘ値）だけリトライを行う（５１）。再実行が成功すれば（５２，Ｙｅｓ）、次のデータ転送に移行する（５４）。リトライ回数ｍａｘ値でも失敗すれば（５１，Ｙｅｓ）、サーバにエラー通知を返し後続の転送を中止する（６１）。
【００３７】
図５は、ハッシュ確認のために交換して比較する３つのケースを示す。Step５におけるハッシュ値の比較に関して、（１）受信側（ストレージ）、（２）転送側（サーバ）、または（３）両方で比較する実装が考えられる。これらのケースの違いは、信頼度の高いほうから（３）（２）（１）になる。逆にパフォーマンスの良いほうから（１）（２）（３）になる。両方でのハッシュ値の比較確認する（３）が一番確実だが、パフォーマンス的には不利になる。
（１）ストレージ側で比較する場合：
このケースは、ｗｒｉｔｅハッシュ値をサーバからストレージに転送してストレージで比較する。サーバ７０が Step１で決定した保管領域（バッファ）３８にｗｒｉｔｅハッシュ値を書き込む。バッファ３８から、ｗｒｉｔｅコマンドの完了時点でストレージ７３がｗｒｉｔｅハッシュ値を読み込む。この読み込みｗｒｉｔｅハッシュ値と、ストレージ側７３で保管していたｒｅａｄハッシュ値を比較する。この場合、ＳＣＳＩコマンドが異常終了となり、さらにサーバ側７０がリトライを行う。
（２）サーバ側で比較する場合：
このケースは、readハッシュ値をストレージからサーバに転送→サーバで比較する。ストレージ７３がStep１で決定した保管領域（バッファ）３９にｒｅａｄハッシュ値を書き込む。バッファ３９から、ｗｒｉｔｅコマンドの完了時点で、サーバ７０がｒｅａｄハッシュ値を読込む。この受信ｒｅａｄハッシュ値と、サーバ側でバッファ３８に保管していたｗｒｉｔｅハッシュ値を比較する。この場合、エラーを検出するのはサーバ側だけであり、ＳＣＳＩコマンドは正常完了となる。
（３）両方で比較する場合：
このケースは、サーバ及びストレージのそれぞれが生成したハッシュ値を互いに他方に転送し両方で比較する。この場合、ハッシュ値の結果も双方向に通知する。サーバ側７０のｗｒｉｔｅハッシュ値を保管する保管領域（バッファ）３８とストレージ側７３のｒｅａｄハッシュ値を保管する保管領域（バッファ）３９の２箇所を事前に決定しておく。ｗｒｉｔｅコマンドの完了時点でそれぞれのデバイス（情報機器）がハッシュ値を比較する。
【００３８】
図６は、本発明の複数のハッシュ値を利用方法の概念図を示す。本発明は、１つの分割データについて複数のハッシュ関数の利用も含む。分割データのデータ欠落が生じてもｗｒｉｔｅハッシュ値とｒｅａｄハッシュ値の同一であること（衝突）で、連続性不具合を検出できないことを回避する必要がある。同一データについて複数のハッシュ値を比較することにより、データ欠落の検出の脱漏を小さくできる。
【００３９】
１つの実施例は、大規模なデータについてハッシュ値を計算する単位（分割データ）が固定データ量単位でハッシュ値を計算する場合である。検証する固定長のサイズは、転送レートを考慮して設定可能とする。４Gbpsの場合、２００MBごとにハッシュ値を計算するように設定すると、0.5 秒ごとに確認することになる。ハッシュ値は小さいので、転送と比較はすぐに完了する。それに対して、書き込み確認のために、転送バイト数読み戻して比較すると読み込みプラス比較のオーバーヘッドが発生する。ファイバ・チャネルの転送レートが４Ｇｂｐｓとすると４００MB/Sである。例えば、４GB のデータの場合、１０秒の転送がかかる。読み込みに１０秒かかるので、比較時間を５秒とすると、転送確認が10+10+5秒の２５秒かかることになる。本発明のハッシュ確認の場合、ハッシュデータが１KBとすると、転送時間が２．５×１０のマイナス６乗程度である。4GBのデータ転送でハッシュ計算の固定長を４００MB とする場合、ハッシュ値の転送は、４回送ることになる。この場合、総転送時間は、１０のマイナス５乗程度である。書き込み転送時間とハッシュ値の転送時間の合計時間は、書き込み転送時間とほとんど同じであるとみなせる。読み戻して比較する場合と比べると半分以下の時間でデータの連続性が確認できる。例えば、通常データの連続性確認のためには、copyコマンドとcompareコマンドを実行する必要がある。ＯＳのライブラリ機能に本発明を適用すれば、copyコマンドだけで、ほとんどオーバーヘッドなしに、連続性の確認も同時に実施できる。Windows において、ファイルやフォルダーの移動を行う場合、移動元ファイルと移動先のファイルが比較できないが、本発明を適用すれば、移動操作のみで移動後のデータの連続性も保証される。
【００４０】
ハッシュ値の計算が、図６の（１）に示す、１つの同一分割データに複数のハッシュ関数を用いる場合である。ハッシュ値を用いる場合では、ハッシュの衝突の可能性がある。そのため、異なるハッシュ値を用いて各々の計算結果を比較してすべてが一致した場合のみ正常とすることにより、ハッシュ値の衝突を回避する。高い信頼性が求められる場合、複数のアルゴリズムを同時に計算して比較する。たとえば、SHA1 と SHA512 を組み合わせるなどが考えられる。複数のハッシュ関数（ハッシュアルゴリズム）を併用すれば、ハッシュ値の衝突による誤識の可能性を軽減できる。
-----------ハッシュアルゴリズムの表-----------------
アルゴリズム      ハッシュ長
SHA1           160 bit
SHA256         256 bit = 32 bytes
SHA512         512 bit = 64 bytes
-------------------------------------------------
【００４１】
図６の（２）は、１つの分割データと２つの分割データでもハッシュ値を計算する場合を示す。ハッシュ値の計算において、異なる固定長単位で補完的にハッシュ値を計算することで、データ欠落をより確実に検出可能となる。１つの分割データ毎のハッシュ値を生成する。その分割データを含む連続する２またはそれ以上の分割データについてハッシュ値を生成する。転送分割データの単位でのデータ欠落が生じた場合に、確実に１つのハッシュ値の比較でデータの脱漏が検出できる。１つの分割データについて、実質的に２つのハッシュ値の生成と、その転送、比較のために時間を要する。１つのハッシュ値の生成、転送、比較は、分割データ自体の転送、比較と比べる時間と十分小さい（１％未満）。２つのハッシュ値の生成等でもリアルタイムのデータ欠落の検出には影響は小さい。複数のハッシュ値で検査することにより、１つのハッシュ値では不十分なデータ欠落検出率を、向上できる。
【００４２】
図６の（３）は、２つの分割データの境界に跨るデータにつてハッシュ値を計算する場合を示す。  また、固定長単位では、ハッシュを計算する固定長単位ごとに、オーバーラップしない部分が存在することになる。ここのオーバーラップしない部分を排除するために、検査開始のデータの位置をいくつかずらした位置で、ハッシュ値を計算する。分割データに跨るデータの欠落が発生する場合、データの転送において区切れ目なくハッシュ値を計算し続けることが可能になる。したがって、このデータ欠落検出方法は、連続するデータ欠落の検出可能性を高めエンドツーエンド間でデータ完全性について高い信頼性が提供できる。
【００４３】
別の実施例は、大規模なデータのハッシュ値を計算する単位（分割データ）が一定時間毎の転送データ量でハッシュ値を計算する場合である。一定時間でアプリケーションのバッファ４１に蓄積保管されたデータ量を分割データとしてハッシュ値を計算する。一般に、バックアップ用途での転送や、ストレージ間の非同期転送の場合では１対の情報機器間が一定の転送帯域を占有できない。例えば、大容量データのリモートバックアップやストレージの非同期転送のおいては、コストの観点で低転送量の通信回線しかない場合がある。また、通信回線が共用の場合、帯域保証がないので転送レートが時間的に変化する。ある時間帯では、使用できる帯域が非常に小さくなる場合がある。たとえば、１０TBのデータを転送するとき、低転送量の通信回線では１０日間かかるとする。上記のように、１TBごとにハッシュ値を計算する場合、１日に一回しかデータの整合性を確認しないので、リアルタイムにはデータの不整合を検出できない。このような場合、転送サイズが規定値に満たなくても、１０秒単位や１分単位などで区切り、ハッシュ値を計算・送付・確認すれば、リアルタイムにデータの整合性が確認可能となる。上記の例では、１分単位では、およそ７００MBごとにハッシュを計算することになる。１分単位の整合性検出と１日単位の整合性検出では、１４００倍程度の再送の効率差につながる。また、データ転送量が少ない場合、ハッシュ値の衝突の可能性が低くなるので、事前に設定しておいた転送量と対応するハッシュアルゴリズムの表から、ハッシュ関数を動的に選択することにより、ハッシュ計算の高速化が可能になる。
【００４４】
なお、一定時間の毎の転送データ量は、ハッシュ値を計算する単位（分割データ）であって、受信（ストレージ）側に転送されるデータ量単位でない。サーバでのバッファ４１へ蓄積されるデータを一定時間で区切り、それを分割データとしてハッシュ値を計算する。分割データとは、ハッシュ値の計算単位であり、必ずしも、サーバとストレージ間のデータ転送のデータ量単位を意味するものではない。
【００４５】
以上本発明のソフトウェア手段は、外部ネットワークを介したエンドツーエンド端末に対応サーバ及びストレージに実装される。アプリケーションの変更、ライブラリ・コールの拡張、または、ファンクションコールの拡張で実装する。ライブラリ・コール、または、ファンクションコールの拡張の場合、既存のアプリケーションには影響を与えない。
【００４６】
上記手段を実装すれば、多様な部品を含む外部ネットワークを経由して接続されるエンドツーエンドの情報機器間のデータ転送において、データの欠落をリアルタイムに検出できる。このデータ欠落検出によりデータ回復処理をリアルタイムにできる有利な効果を有する。また、本発明では、転送データのデータ化け(garbled data)も検出できるため、データの完全性の補強になる。
【００４７】
以上、本発明を実施の形態を用いて説明したが、本発明の範囲は上記実施例には限定されない。本発明は、外部ネットワークを介して接続されたサーバからサーバ、ストレージからストレージ、ストレージからサーバに適用できる。また、アプリケーションは、ストレージ・アプリケーションに限定されない。アプリケーションは、広くユーティリティーなど各種ツールも含まれる。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００４８】
２０，２２，７０…サーバ、
２７…通信線，ＦＣケーブル、
２６…ファイバ・チャネル・スイッチ、
２９…ハードウエア（Ｈ／Ｗ），ＨＢＡ  
２４，７３…ストレージ、
３８，３９…ハッシュ値のための専用のバッファ（保管領域）、
４１，４２…転送データのためのバッファ、
【図１】
0005852674.tif 000002
【図２】
0005852674.tif 000003
【図３】
0005852674.tif 000004
【図４】
0005852674.tif 000005
【図５】
0005852674.tif 000006
【図６】
0005852674.tif 000007