(57)【要約】【課題】リストア時の負荷を低減すること。【解決手段】記憶部１ａは、データブロックを記憶する区画を複数含む記憶装置２に対して、バックアップされた区画ごとに最新のデータブロックを示す情報を含むイメージ情報Ｍ１を記憶する。演算部１ｂは、記憶装置２の複数の区画に記憶されている複数のデータブロックを含むバックアップデータＧ３を取得し、複数のデータブロックに応じてイメージ情報Ｍ１を更新する。演算部１ｂは、バックアップデータＧ３とは異なるタイミングで取得されたバックアップデータＧ１に含まれるデータブロックと更新後のイメージ情報Ｍ１により示されるデータブロックとを区画ごとに比較する。演算部１ｂは、比較に応じて区画ごとの差分の有無を示す差分位置情報Ｐ１をバックアップデータＧ１に対して生成する。【選択図】図１
2018025839.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
データブロックを記憶する区画を複数含む記憶装置に対して、バックアップされた区画ごとに最新のデータブロックを示す情報を含むイメージ情報を記憶し、
前記記憶装置の複数の区画に記憶されている複数のデータブロックを含む第１のバックアップデータを取得し、前記複数のデータブロックに応じて前記イメージ情報を更新し、
前記第１のバックアップデータとは異なるタイミングで取得された第２のバックアップデータに含まれる第１のデータブロックと更新後の前記イメージ情報により示される第２のデータブロックとを区画ごとに比較し、比較に応じて区画ごとの差分の有無を示す差分位置情報を前記第２のバックアップデータに対して生成する、
処理を実行させるバックアップ／リストアプログラム。
【請求項２】
前記第２のバックアップデータを前記記憶装置にリストアする際に、前記第２のバックアップデータに対応する前記差分位置情報に基づいて、差分なしの区画の場合、前記第１のデータブロックと前記記憶装置に記憶された第３のデータブロックとの比較に応じて前記第１のデータブロックを前記記憶装置に書き込むか否かを決定し、また、差分ありの区画の場合、前記比較を省略して、前記第１のデータブロックを前記記憶装置に書き込むように制御する、請求項１記載のバックアップ／リストアプログラム。
【請求項３】
リストアに用いた前記第２のバックアップデータを取得し、前記第２のバックアップデータに含まれる前記複数のデータブロックに応じて前記イメージ情報を更新し、前記第１のバックアップデータおよび前記第２のバックアップデータの区画ごとの前記比較に応じて、前記第１のバックアップデータに対する前記差分位置情報を生成する、請求項２記載のバックアップ／リストアプログラム。
【請求項４】
前記記憶装置から前記第１のバックアップデータを取得する際に、ファイルシステムにより使用されている区画に限定して、前記第１のバックアップデータを取得する、請求項１乃至３の何れか１項に記載のバックアップ／リストアプログラム。
【請求項５】
前記イメージ情報の更新では、前記第１のバックアップデータが前記イメージ情報に含まれる第１の区画に対応するデータブロックを含む場合、前記第１の区画に対して前記第１のバックアップデータの識別情報を前記イメージ情報に記録する、請求項４記載のバックアップ／リストアプログラム。
【請求項６】
データブロックを記憶する区画を複数含む記憶装置に対して、バックアップされた区画ごとに最新のデータブロックを示す情報を含むイメージ情報を記憶する記憶部と、
前記記憶装置の複数の区画に記憶されている複数のデータブロックを含む第１のバックアップデータを取得し、前記複数のデータブロックに応じて前記イメージ情報を更新し、前記第１のバックアップデータとは異なるタイミングで取得された第２のバックアップデータに含まれる第１のデータブロックと更新後の前記イメージ情報により示される第２のデータブロックとを区画ごとに比較し、比較に応じて区画ごとの差分の有無を示す差分位置情報を前記第２のバックアップデータに対して生成する演算部と、
を有する版数管理装置。
【請求項７】
コンピュータが、
データブロックを記憶する区画を複数含む記憶装置に対して、バックアップされた区画ごとに最新のデータブロックを示す情報を含むイメージ情報を記憶し、
前記記憶装置の複数の区画に記憶されている複数のデータブロックを含む第１のバックアップデータを取得し、前記複数のデータブロックに応じて前記イメージ情報を更新し、
前記第１のバックアップデータとは異なるタイミングで取得された第２のバックアップデータに含まれる第１のデータブロックと更新後の前記イメージ情報により示される第２のデータブロックとを区画ごとに比較し、比較に応じて区画ごとの差分の有無を示す差分位置情報を前記第２のバックアップデータに対して生成する、
バックアップ／リストア方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はバックアップ／リストアプログラム、版数管理装置およびバックアップ／リストア方法に関する。
【背景技術】
【０００２】
情報処理システムでは、データのバックアップ処理が行われることがある。バックアップ処理を実行する情報処理装置は、当該情報処理装置またはネットワークを介して接続された他の情報処理装置が用いる記憶装置に格納されたデータの複製を取得し、バックアップデータとして別の記憶装置に格納する。バックアップデータは、例えば、バックアップの取得元の記憶装置に対し、バックアップ取得時点のデータを復元（リストア）するために利用される。バックアップデータは、複数のタイミング（周期的なタイミングなど）で取得されることもある。
【０００３】
例えば、クライアントのファイルを所望のバージョンに復元する際に、バックアップされている所望のバージョンのファイルとクライアント側の現在のバージョンのファイルとの差分の部分のみを復元するサーバの提案がある。
【０００４】
なお、ファイル変更時に対象ファイルのバックアップファイルを作成し、対象ファイルのハッシュ値を算出して記録し、ハッシュ値により対象ファイルの改変を検出するとバックアップファイルを書き戻すことで、対象ファイルを保護する電子装置の提案もある。
【０００５】
また、ライトデータのハッシュ値と格納済データのハッシュ値とを比較し、重複するデータを格納しないようにするフラッシュメモリの提案もある。更に、毎回のバックアップの際に、前世代からの更新部分のみを差分データとして記憶するストレージ装置の提案もある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２０１２−５２３０４４号公報
【特許文献２】特開２０１２−４３１６０号公報
【特許文献３】特開２０１２−８９９７号公報
【特許文献４】国際公開第２０１５／１６２７５８号
【特許文献５】特開２０１０−１４００６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、情報処理装置がバックアップデータをリストアする際、現在のデータと異なる部分を復元対象とし、同じ部分を復元対象外として復元部分を減らすことがある。そのために、情報処理装置は、バックアップデータを区画（例えば、セクタ）単位に区切って管理し、リストア時に、バックアップデータと現在のデータとを区画ごとに読み取って比較することが考えられる。そして、情報処理装置は、データ内容の異なる区画、および、同じ区画を順次判定しながら、データ内容の異なる区画に対してリストアを行う。
【０００８】
しかし、この方法では、リストア先の記憶装置に現在格納されているデータを全ての区画について読み出し、バックアップデータと比較する。このため、リストア処理による負荷が増大し、リストアの所要時間が長引くおそれがある。
【０００９】
１つの側面では、本発明は、リストア時の負荷を低減することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、バックアップ／リストアプログラムが提供される。このバックアップ／リストアプログラムは、コンピュータに、データブロックを記憶する区画を複数含む記憶装置に対して、バックアップされた区画ごとに最新のデータブロックを示す情報を含むイメージ情報を記憶し、記憶装置の複数の区画に記憶されている複数のデータブロックを含む第１のバックアップデータを取得し、複数のデータブロックに応じてイメージ情報を更新し、第１のバックアップデータとは異なるタイミングで取得された第２のバックアップデータに含まれる第１のデータブロックと更新後のイメージ情報により示される第２のデータブロックとを区画ごとに比較し、比較に応じて区画ごとの差分の有無を示す差分位置情報を第２のバックアップデータに対して生成する、処理を実行させる。
【発明の効果】
【００１１】
１つの側面では、リストア時の負荷を低減できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の版数管理装置を示す図である。
【図２】第２の実施の形態のバックアップシステムを示す図である。
【図３】バックアップサーバのハードウェア例を示す図である。
【図４】バックアップシステムの機能例を示す図である。
【図５】バックアップファイルの例を示す図である。
【図６】バックアップ一覧テーブルの例を示す図である。
【図７】仮想ディスクイメージの例を示す図である。
【図８】差分位置情報の例を示す図である。
【図９】バックアップ時のサーバ処理例を示すフローチャートである。
【図１０】バックアップ時のエージェント処理例を示すフローチャートである。
【図１１】リストア時のサーバ処理例を示すフローチャートである。
【図１２】リストア時のエージェント処理例を示すフローチャートである。
【図１３】仮想ディスクイメージ生成例を示すフローチャートである。
【図１４】差分位置情報の生成例を示すフローチャートである。
【図１５】バックアップの具体例（その１）を示す図である。
【図１６】バックアップの具体例（その２）を示す図である。
【図１７】リストアの具体例を示す図である。
【図１８】バックアップおよびリストアの時系列の例を示す図である。
【図１９】リストア時のＩ／Ｏの例を示す図である。
【図２０】リストア時のＩ／Ｏの比較例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の版数管理装置を示す図である。版数管理装置１は、記憶装置２に接続されている。版数管理装置１は、記憶装置２に記憶されたデータのバックアップを取得する。記憶装置２は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの不揮発性記憶装置を内蔵する。記憶装置２は、版数管理装置１とネットワークを介して接続された情報処理装置（図示を省略）に内蔵されていてもよい。
【００１４】
記憶装置２の記憶領域は、複数の区画に分割されている。区画は、所定サイズの単位領域である。区画は、例えばセクタでもよい。セクタは、所定サイズ（例えば、５１２バイトや４キロバイトなど）の単位領域である。区画は、区画の識別情報により区別される。区画の識別情報は、例えば区画番号である。図１の例では、記憶装置２は、区画番号“１”、“２”、“３”に対応する３つの区画を含む。１つの区画に記憶される情報を、データブロックと称する。図１および以下の説明では、「データブロック」を「ブロック」と略記する。
【００１５】
版数管理装置１は、記憶装置２に記憶されたデータに対して、異なるタイミングで複数のバックアップを取得する。版数管理装置１により取得されるバックアップのデータをバックアップデータと称する。バックアップデータは、バックアップ取得時点において、記憶装置２に記憶されていたデータの複製である。版数管理装置１は、ファイルシステムにより使用されている区画に限定してバックアップを取得する。すなわち、あるタイミングで取得されたバックアップデータは、記憶装置２の複数の区画のうち、ファイルシステムにより使用されている区画のブロックを含み、ファイルシステムにより使用されていない区画のブロックを含まない。版数管理装置１は、複数のバックアップデータを、バックアップ取得時の早い順に、版数“１”、版数“２”、・・・のように版数管理する。版数管理装置１は、記憶部１ａおよび演算部１ｂを有する。
【００１６】
記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤやＳＳＤなどの不揮発性記憶装置でもよい。演算部１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１ｂはプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合（マルチプロセッサ）も含み得る。
【００１７】
演算部１ｂは、記憶装置２に対するバックアップデータを取得し、記憶部１ａに保存する。演算部１ｂは、取得したバックアップデータを、版数管理装置１に接続された記憶装置２以外の記憶装置（図示を省略）に格納して保存してもよい。演算部１ｂは、所定の周期で、または、バックアップ開始指示のユーザによる入力を受け付けたタイミングで、バックアップデータの取得を開始する。
【００１８】
例えば、演算部１ｂは、記憶装置２に対して２つの異なるタイミングで取得されたバックアップデータＧ１，Ｇ２を取得済である。バックアップデータＧ１は、バックアップデータＧ２よりも前に取得されたバックアップデータである。バックアップデータＧ１は、各区画に対して次に示すブロックのバックアップを含む。区画番号“１”の区画に対するバックアップは、ブロックＸ１である。区画番号“２”の区画に対するバックアップは、ブロックＸ２である。区画番号“３”の区画に対するバックアップは、ブロックＸ３である。
【００１９】
バックアップデータＧ２は、バックアップデータＧ１よりも後に取得されたバックアップデータである。バックアップデータＧ２は、各区画に対して次に示すブロックのバックアップを含む。区画番号“１”の区画に対するバックアップは、ブロックＸ１である。区画番号“２”の区画に対するバックアップは、ブロックＹ２である。区画番号“３”の区画に対するバックアップは、ブロックＹ３である。
【００２０】
バックアップデータＧ１，Ｇ２の比較によれば、バックアップデータＧ２の取得時では、バックアップデータＧ１の取得時に対し、区画番号“１”の区画のブロックは変更されておらず、区画番号“２”、“３”の各区画のブロックは変更されている。
【００２１】
演算部１ｂは、記憶装置２のイメージ情報Ｍ１を生成し、記憶部１ａに格納する。イメージ情報Ｍ１は、記憶装置２について、バックアップされた区画ごとの最新のブロックを示す情報を含む。イメージ情報Ｍ１は、区画ごとに、最新のブロックを保持するバックアップデータの識別情報を含む。図１では、最新のブロックを保持するバックアップデータの識別情報を、ブロック名の末尾に“＠”（アットマーク）を付して表している（“ブロックＹ２＠”など）。
【００２２】
例えば、バックアップデータＧ２の取得直後では、イメージ情報Ｍ１は、次のような情報を含む。第１には、区画番号“１”とバックアップデータＧ２の識別情報との対応関係の情報である。第２には、区画番号“２”とバックアップデータＧ２の識別情報との対応関係の情報である。第３には、区画番号“３”とバックアップデータＧ２の識別情報との対応関係の情報である。以下、演算部１ｂがバックアップデータＧ３を新たに取得する際の処理を説明する。
【００２３】
演算部１ｂが今回バックアップ処理を開始する直前において、記憶装置２は、次の情報を記憶する。区画番号“１”の区画は、ブロックＺ１を記憶する。区画番号“２”の区画は、ブロックＹ２を記憶する。区画番号“３”の区画は、未使用である。未使用は、何れのブロックも格納されていないことを示す。本例では、バックアップデータＧ２の取得時点では、区画番号“３”の区画はブロックＹ３を記憶していた。バックアップデータＧ２の取得後、区画番号“３”の区画に記憶されたブロックＹ３は削除されたことになる（図１では、「削除済」と表記）。
【００２４】
演算部１ｂは、記憶装置２に対してバックアップデータＧ３を取得する（ステップＳ１）。バックアップデータＧ３は、各区画に対して次のブロックのバックアップを含む。区画番号“１”の区画に対するバックアップは、ブロックＺ１である。区画番号“２”の区画に対するバックアップは、ブロックＹ２である。区画番号“３”の区画は、未使用である。このため、演算部１ｂは、区画番号“３”の区画については、バックアップを取得しない。
【００２５】
演算部１ｂは、バックアップデータＧ３に含まれる複数のブロックに応じて、イメージ情報Ｍ１を更新する（ステップＳ２）。上記の例では、区画番号“１”の区画の最新のブロックは、バックアップデータＧ３に含まれる。このため、演算部１ｂは、イメージ情報Ｍ１における区画番号“１”にバックアップデータＧ３の識別情報を対応付ける（例えば、“ブロックＺ１＠”のポイント先をバックアップデータＧ３とする）。同様に、区画番号“２”の区画の最新のブロックは、バックアップデータＧ３に含まれる。このため、演算部１ｂは、イメージ情報Ｍ１における区画番号“２”にバックアップデータＧ３の識別情報を対応付ける（例えば、“ブロックＹ２＠”のポイント先をバックアップデータＧ３とする）。一方、区画番号“３”の区画の最新のブロックは、バックアップデータＧ２に含まれる。このため、演算部１ｂは、イメージ情報Ｍ１における区画番号“３”に対するバックアップデータの識別情報の変更を行わない（例えば、“ブロックＹ３＠”のポイント先をバックアップデータＧ２のままとする）。図１で例示したイメージ情報Ｍ１は、当該更新後の状態を図示している。
【００２６】
演算部１ｂは、今回取得した第１のバックアップデータとは異なるタイミングで取得された第２のバックアップデータに含まれる第１のブロックと、更新後のイメージ情報Ｍ１により示される第２のブロックとを区画ごとに比較する。演算部１ｂは、比較に応じて区画ごとの差分の有無を示す差分位置情報を第２のバックアップデータに対して生成する（ステップＳ３）。上記の例では、第１のバックアップデータは、バックアップデータＧ３である。また、第２のバックアップデータは、バックアップデータＧ１，Ｇ２である。
【００２７】
より具体的には、演算部１ｂは、バックアップデータＧ１に含まれるブロックと、更新後のイメージ情報Ｍ１により示されるブロックとを区画ごとに比較する。すなわち、演算部１ｂは、区画番号“１”の区画について、バックアップデータＧ１に含まれるブロックＸ１と、イメージ情報Ｍ１により示されるブロックＺ１とを比較する。ブロックＸ１，Ｚ１は互いに異なる。このため、演算部１ｂは、バックアップデータＧ１とイメージ情報Ｍ１とでは、区画番号“１”の区画に差分があると判断する。
【００２８】
また、演算部１ｂは、区画番号“２”の区画について、バックアップデータＧ１に含まれるブロックＸ２と、イメージ情報Ｍ１により示されるブロックＹ２とを比較する。ブロックＸ２，Ｙ２は互いに異なる。このため、演算部１ｂは、バックアップデータＧ１とイメージ情報Ｍ１とでは、区画番号“２”の区画に差分があると判断する。
【００２９】
また、演算部１ｂは、区画番号“３”の区画について、バックアップデータＧ１に含まれるブロックＸ３と、イメージ情報Ｍ１により示されるブロックＹ３とを比較する。ブロックＸ３，Ｙ３は互いに異なる。このため、演算部１ｂは、バックアップデータＧ１とイメージ情報Ｍ１とでは、区画番号“３”の区画に差分があると判断する。
【００３０】
そして、演算部１ｂは、バックアップデータＧ１とイメージ情報Ｍ１とでは、区画番号“１”、“２”、“３”の区分に差分があることを示す差分位置情報Ｐ１を、バックアップデータＧ１に対して生成する。ここで、図１では、差分位置情報において、差分があることを「差分」と表記し、差分がないことを「非差分」と表記する。
【００３１】
更に、演算部１ｂは、バックアップデータＧ２に含まれるブロックと、更新後のイメージ情報Ｍ１により示されるブロックとを区画ごとに比較する。そして、演算部１ｂは、バックアップデータＧ２とイメージ情報Ｍ１とでは、区画番号“１”の区分に差分があり、区画番号“２”、“３”の区画に差分がないと判断する。
【００３２】
そして、演算部１ｂは、バックアップデータＧ２とイメージ情報Ｍ１とでは、区画番号“１”の区画に差分があり、区画番号“２”、“３”の区画に差分がないことを示す差分位置情報Ｐ２を、バックアップデータＧ２に対して生成する。
【００３３】
なお、演算部１ｂは、今回取得したバックアップデータＧ３に対しても差分位置情報Ｐ３を生成する。バックアップデータＧ３の各区画は、イメージ情報Ｍ１の各区画に対して差分がない。このため、差分位置情報Ｐ３は、区画番号“１”、“２”の各区画について、イメージ情報Ｍ１の同区画と差分がないことを示す。
【００３４】
演算部１ｂは、生成した差分位置情報を記憶部１ａに格納し、リストア時に利用する。例えば、図１で示した記憶装置２の状態に対して、バックアップデータＧ１を用いてリストアを行う場合を考える。演算部１ｂは、バックアップデータＧ１に対応する差分位置情報Ｐ１を参照して、イメージ情報Ｍ１に対し、区画番号“１”、“２”、“３”の各区画において差分があることを検出する。このため、演算部１ｂは、バックアップデータＧ１に含まれる区画番号“１”、“２”、“３”に対応するブロックＸ１，Ｘ２，Ｘ３を記憶装置２の該当の区画に書き込む。その結果、バックアップデータＧ１の内容が、記憶装置２に復元される。演算部１ｂは、ブロックを書き戻すべき区画の確認に差分位置情報Ｐ１を用いることで、記憶装置２から全ての区画のブロックを順次読み出して、バックアップデータＧ１に含まれる各ブロックと比較しなくてよい。バックアップデータＧ１を用いてリストアを行う例では、区画番号“１”、“２”、“３”の全てについて、記憶装置２からのブロックの読み出し、および、読み出したブロックの比較を省略できる。
【００３５】
次に、図１で示した記憶装置２の状態に対して、バックアップデータＧ２を用いてリストアを行う場合を考える。演算部１ｂは、バックアップデータＧ２に対応する差分位置情報Ｐ２を参照して、イメージ情報Ｍ１に対し、区画番号“１”の区画において差分があることを検出する。このため、演算部１ｂは、バックアップデータＧ２に含まれる区画番号“１”のブロックＸ１を記憶装置２の区画番号“１”の区画に書き込む。
【００３６】
また、演算部１ｂは、区画番号“２”、“３”の区画において差分がないことを検出する。このため、演算部１ｂは、記憶装置２から区画番号“２”のブロックを読み出して、バックアップデータＧ２に含まれる区画番号“２”のブロックＹ２と比較する。該当区画が差分なしの場合に比較を行う理由は、イメージ情報Ｍ１を取得した時点に対し、記憶装置２の各ブロックの内容が更新されている可能性があるからである。この例では、区画番号“２”のブロックは、記憶装置２もバックアップデータＧ２もブロックＹ２で同じなので、演算部１ｂは、区画番号“２”の区画については何も行わない。
【００３７】
更に、演算部１ｂは、記憶装置２から区画番号“３”のブロックを読み出して、バックアップデータＧ２に含まれる区画番号“３”のブロックＹ３と比較する。記憶装置２における区画番号“３”の区画は、前述のように未使用状態なので、演算部１ｂは、バックアップデータＧ２に含まれる区画番号“３”のブロックＹ３を記憶装置２の区画番号“３”の区画に書き込む。こうして、バックアップデータＧ２の内容が、記憶装置２に復元される。この場合も、演算部１ｂは、ブロックを書き戻すべき区画の確認に差分位置情報Ｐ２を用いることで、記憶装置２から全ての区画のブロックを順次読み出して、バックアップデータＧ２に含まれる各ブロックと比較しなくてよい。バックアップデータＧ２を用いてリストアを行う例では、区画番号“１”について、記憶装置２からのブロックの読み出し、および、読み出したブロックの比較を省略できる。
【００３８】
このように、版数管理装置１は、差分位置情報を生成することで、リストア時に、差分位置情報により変更がない（非差分）と設定されている区画に限定して、バックアップデータと記憶装置２との比較を行う。版数管理装置１は、それ以外の区画については比較なしに（比較を省略して）バックアップデータのブロックを記憶装置２に書き込む。これにより、全ての区画について記憶装置２からの読み出し、および、バックアップデータとの比較を行うよりも、リストア時のステップ数を低減できる。その結果、リストア時の版数管理装置１および記憶装置２の負荷を低減できる。また、リストア処理を高速化でき、リストアの所要時間を短縮できる。
【００３９】
なお、上記で示した版数管理装置１による差分位置情報の生成は、リストア完了時にも実行される。すなわち、演算部１ｂは、リストアに用いたバックアップデータ（第１のバックアップデータに相当）を取得し、当該バックアップデータによりイメージ情報Ｍ１を更新する。これにより、当該バックアップデータによるリストア直後の記憶装置２の各区画の内容がイメージ情報Ｍ１に反映される。そして、演算部１ｂは、該当のバックアップデータとは異なるタイミングで取得されたバックアップデータ（第２のバックアップデータに相当）と、更新後のイメージ情報Ｍ１とを区画ごとに比較し、差分位置情報を生成する。こうして、演算部１ｂは、次回のリストアに備えることができる。
【００４０】
次に、版数管理装置１の機能を有するサーバコンピュータを例示して、当該機能をより詳細に説明する。
［第２の実施の形態］
図２は、第２の実施の形態のバックアップシステムを示す図である。第２の実施の形態のバックアップシステムは、バックアップサーバ１００および業務サーバ２００を含む。バックアップサーバ１００および業務サーバ２００は、ネットワーク１０に接続されている。ネットワーク１０は、例えば、ＬＡＮ（Local Area Network）である。ネットワーク１０は、インターネットやＷＡＮ（Wide Area Network）などの広域ネットワークでもよい。
【００４１】
バックアップサーバ１００は、業務サーバ２００で用いられるデータのバックアップを取得し、保持するサーバコンピュータである。バックアップサーバ１００は、第１の実施の形態の版数管理装置１の一例である。バックアップサーバ１００は、業務サーバ２００が備えるディスク装置（単にディスクと称することがある）のイメージバックアップを取得する。イメージバックアップでは、ディスクのセクタ単位にバックアップを取得する。バックアップサーバ１００は、イメージバックアップを１つのバックアップファイルとして生成する。
【００４２】
ここで、バックアップサーバ１００は、ファイルシステムにより使用中のセクタに限定して、イメージバックアップを取得する。使用中のセクタとは、ファイルシステムで使用中のデータを記憶するセクタである。使用中でないセクタとは、ファイルシステムで使用中のデータを記憶していないセクタである。バックアップサーバ１００が生成するバックアップファイルは、使用中のセクタのデータを含み、使用中でないセクタのデータを含まない。バックアップファイルでは、使用中でないセクタについてはデータなしと管理される。なお、以下の説明では、１つのセクタに記憶されたデータ（セクタ単位のデータ）を、セクタデータと称することがある。
【００４３】
バックアップサーバ１００は、取得したバックアップファイルを用いたリストアを行うこともある。例えば、バックアップサーバ１００は、ある時点に取得したバックアップファイルを用いて、業務サーバ２００のディスクに記憶されたデータを、バックアップ取得時のデータに復元する。
【００４４】
業務サーバ２００は、ユーザの業務を支援するサーバコンピュータである。業務サーバ２００は、業務用のデータを記憶するディスクを備える。ディスクに格納されたデータのバックアップおよびリストアは、バックアップサーバ１００により制御される。
【００４５】
ここで、バックアップサーバ１００は、リストア時に、バックアップファイルに含まれる全てのセクタデータを業務サーバ２００のディスクに書き込むわけではない。バックアップサーバ１００は、バックアップファイルに含まれる各セクタのセクタデータのうち、リストア先のディスクの同じセクタのセクタデータと異なるもの（差分）だけを、リストア先のディスクの該当のセクタに書き込む。このように、イメージバックアップのバックアップファイルと、リストア先のディスクに格納されたデータとの差分のみを、ディスクに書き出すリストア方法を、「差分リストア」と称することがある。バックアップサーバ１００は、差分リストアにおけるバックアップサーバ１００および業務サーバ２００の負荷を低減し、当該差分リストアの効率を改善するための機能を提供する。
【００４６】
図３は、バックアップサーバのハードウェア例を示す図である。バックアップサーバ１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。各ユニットはバックアップサーバ１００のバスに接続されている。業務サーバ２００もバックアップサーバ１００と同様のユニットを用いて実現できる。
【００４７】
プロセッサ１０１は、バックアップサーバ１００の情報処理を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４８】
ＲＡＭ１０２は、バックアップサーバ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００４９】
ＨＤＤ１０３は、バックアップサーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。バックアップサーバ１００は、フラッシュメモリやＳＳＤなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００５０】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、バックアップサーバ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００５１】
入力信号処理部１０５は、バックアップサーバ１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００５２】
媒体リーダ１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３としては、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３としては、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、プロセッサ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００５３】
通信インタフェース１０７は、ネットワーク１０を介して業務サーバ２００を含む他の情報処理装置と通信を行う。通信インタフェース１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００５４】
図４は、バックアップシステムの機能例を示す図である。バックアップサーバ１００は、バックアップ記憶部１１０、仮想ディスクイメージ記憶部１２０、差分位置記憶部１３０、バックアップ制御部１４０、リストア制御部１５０、仮想ディスクイメージ生成部１６０および差分位置取得部１７０を有する。
【００５５】
バックアップ記憶部１１０、仮想ディスクイメージ記憶部１２０および差分位置記憶部１３０は、ＲＡＭ１０２やＨＤＤ１０３に確保された記憶領域を用いて実現される。バックアップ制御部１４０、リストア制御部１５０、仮想ディスクイメージ生成部１６０および差分位置取得部１７０は、ＲＡＭ１０２に格納されたプログラム（バックアップ／リストア用のサーバプログラム）を、プロセッサ１０１が実行することで実現される。
【００５６】
バックアップ記憶部１１０は、バックアップサーバ１００により取得されたバックアップファイルを記憶する。例えば、バックアップファイルは、取得された順に、版数“１”、“２”、“３”、・・・のように版数管理される。バックアップファイルは、セクタの識別情報（セクタ番号と称する）と、セクタデータとの対応関係を含む。
【００５７】
ここで、バックアップファイルは、第１の実施の形態で例示したバックアップデータの一例である。また、セクタデータは、第１の実施の形態で例示したデータブロック（ブロック）の一例である。
【００５８】
仮想ディスクイメージ記憶部１２０は、仮想ディスクイメージを記憶する。仮想ディスクイメージは、業務サーバ２００のディスクの最新の状態を表す情報である。具体的には、仮想ディスクイメージは、セクタ番号と、当該セクタ番号に対応するセクタデータを含むバックアップファイルのうち、最新のバックアップファイルの識別情報とを対応付けた情報である。仮想ディスクイメージは、第１の実施の形態で例示したイメージ情報の一例である。
【００５９】
差分位置記憶部１３０は、差分位置情報を記憶する。差分位置情報は、バックアップデータごとに存在する。差分位置情報は、バックアップデータに含まれるセクタデータのうち、仮想ディスクイメージで示されるセクタデータと異なる（差分がある）セクタを管理するための情報である。一例として、差分位置情報では、差分の有無を差分フラグにより管理する。差分フラグ“１”（あるいは、“ｔｒｕｅ”）は、差分ありを示す。差分フラグ“０”（あるいは、“ｆａｌｓｅ”）は、差分なし（非差分）を示す。
【００６０】
バックアップ制御部１４０は、業務サーバ２００により保持されるデータのバックアップを取得する。例えば、バックアップ制御部１４０は、ユーザにより設定されたスケジュールに従って、あるいは、ユーザによるバックアップ開始指示の入力を受け付けたタイミングで、バックアップを開始する。バックアップ制御部１４０は、バックアップ開始通知を業務サーバ２００に送信する。バックアップ制御部１４０は、業務サーバ２００からバックアップ対象のセクタデータを順次受信し、受信した複数のセクタデータを含むバックアップファイルを生成し、バックアップ記憶部１１０に格納する。
【００６１】
リストア制御部１５０は、バックアップ記憶部１１０に記憶されたバックアップファイルを用いたリストア処理を制御する。例えば、リストア制御部１５０は、ユーザによるリストア開始指示の入力を受け付けたタイミングで、リストアを開始する。リストア開始指示は、リストアするバックアップファイルの版数の指定を含む。リストア制御部１５０は、リストア開始通知を業務サーバ２００に送信する。リストア制御部１５０は、該当のバックアップファイルに含まれるセクタデータと、該当のバックアップファイルに対応する差分位置情報の差分フラグの値とを、セクタ番号の昇順に、業務サーバ２００に送信する。
【００６２】
仮想ディスクイメージ生成部１６０は、バックアップ記憶部１１０に記憶された最新のバックアップファイルに基づいて、仮想ディスクイメージ記憶部１２０に記憶された仮想ディスクイメージを更新する。仮想ディスクイメージは、仮想ディスクイメージ記憶部１２０に１つ格納される。このため、仮想ディスクイメージ生成部１６０は、初回のバックアップ時に仮想ディスクイメージを生成して仮想ディスクイメージ記憶部１２０に格納した後は、当該仮想ディスクイメージを更新していくことになる。具体的には、仮想ディスクイメージ生成部１６０は、仮想ディスクイメージにおいて、最新のバックアップファイルでバックアップ対象となったセクタのセクタ番号に、当該最新のバックアップファイルの識別情報を対応付ける。
【００６３】
差分位置取得部１７０は、バックアップ記憶部１１０に記憶されたバックアップファイルと、仮想ディスクイメージ記憶部１２０に記憶された仮想ディスクイメージとをセクタごとに比較する。差分位置取得部１７０は、セクタごとの差分の有無を示す差分位置情報を該当のバックアップファイルに対して生成する。差分位置取得部１７０は、生成した差分位置情報を差分位置記憶部１３０に格納する。
【００６４】
業務サーバ２００は、ディスク２１０、バックアップ処理部２２０およびリストア処理部２３０を有する。ディスク２１０は、業務サーバ２００が備えるＨＤＤである。ただし、ディスク２１０は、ＳＳＤなどの他の種類の記憶装置でもよい。バックアップ処理部２２０およびリストア処理部２３０は、業務サーバ２００が備えるＲＡＭに記憶されたプログラム（バックアップ／リストア用のエージェントプログラム）を、業務サーバ２００が備えるプロセッサが実行することで実現される。
【００６５】
ディスク２１０は、業務サーバ２００における業務処理に用いられる各種のファイルを記憶する。ディスク２１０に記憶されるファイルは、業務サーバ２００のファイルシステムによって管理される。ファイルのサイズが１つのセクタの記憶容量（例えば、５１２バイトや４キロバイトなど）を超える場合、ファイルは複数のセクタに跨って格納される。
【００６６】
バックアップ処理部２２０は、バックアップサーバ１００からバックアップ開始通知を受け付ける。バックアップ処理部２２０は、バックアップ開始通知に応じて、ディスク２１０の各セクタのセクタデータを読み出し、バックアップサーバ１００に送信する。
【００６７】
リストア処理部２３０は、バックアップサーバ１００からリストア開始通知を受け付ける。リストア処理部２３０は、バックアップサーバ１００から復元対象のセクタのセクタデータと当該セクタの差分フラグの値とを受信する。リストア処理部２３０は、差分フラグの値に応じて、受信したセクタデータのディスク２１０への書き込み方法を２つの方法の中から選択する。
【００６８】
具体的には、あるセクタについて差分フラグの値が“０”であれば、リストア処理部２３０は、第１の方法を選択する。第１の方法では、リストア処理部２３０は、該当のセクタのセクタデータを、ディスク２１０から読み出し、バックアップサーバ１００から受信したセクタデータと比較する。比較の結果、両セクタデータに差異があれば、リストア処理部２３０は、バックアップサーバ１００から受信したセクタデータを、ディスク２１０の該当のセクタに書き込む（上書きする）。比較の結果、両セクタデータに差異がなければ（両セクタデータが同じであれば）、リストア処理部２３０は、バックアップサーバ１００から受信したセクタデータを破棄し、ディスク２１０の該当のセクタのセクタデータをそのまま残す。
【００６９】
一方、あるセクタについて差分フラグの値が“１”であれば、リストア処理部２３０は、第２の方法を選択する。第２の方法では、リストア処理部２３０は、バックアップサーバ１００から受信したセクタデータを、第１の方法で示した比較を省略して（当該比較を行わずに）、ディスク２１０の該当のセクタに書き込む（上書きする）。
【００７０】
なお、リストア処理部２３０は、セクタデータおよび差分フラグが送られてこないセクタについて、該当のバックアップタイミングにおいてセクタデータが削除されていたセクタであると判断する。そして、リストア処理部２３０は、ファイルシステム上でディスク２１０における該当のセクタのセクタデータを削除する。
【００７１】
図５は、バックアップファイルの例を示す図である。バックアップファイルｇ１は、バックアップ記憶部１１０に格納される。バックアップファイルｇ１は、バックアップ制御部１４０によりファイル名が付与される。例えば、バックアップファイルｇ１のファイル名は、“ｂａｃｋｕｐ０１．ｂａｋ”である。バックアップ制御部１４０は、“ｂａｃｋｕｐＸＸ．ｂａｋ”の形式でバックファイルにファイル名を付与し、“ＸＸ”の部分には版数に相当する数字列を挿入する。バックアップ制御部１４０は、版数を２桁の数字列で“０１”、“０２”、・・・というように、バックアップタイミングが早いものから昇順に管理する。
【００７２】
バックアップファイルｇ１は、セクタ番号およびセクタデータを対応付けた複数のレコードを含む。セクタ番号は、ディスク２１０上のセクタのセクタ番号である。セクタデータは、該当のセクタに対してバックアップされたデータである。なお、以下の説明では、各セクタデータを識別するために、セクタデータを、“データＡ”、“データＢ”のように“データ”の文言の後に、大文字のアルファベット記号を付して表すことがある。
【００７３】
例えば、バックアップファイルｇ１は、セクタ番号“０”に対するデータＡというレコードを含む。バックアップファイルｇ１は、セクタ番号“２”に対するデータＢというレコードを含む。バックアップファイルｇ１は、セクタ番号“３”に対するデータＣというレコードを含む。
【００７４】
バックアップファイルｇ１では、セクタ番号“１”のレコードが含まれていない。これは、セクタ番号“１”のセクタに、ファイルシステムにとって有効なデータが存在していない（未使用である）ことを意味する。
【００７５】
図６は、バックアップ一覧テーブルの例を示す図である。バックアップ一覧テーブルｔ１は、バックアップ記憶部１１０に格納される。バックアップ一覧テーブルｔ１は、バックアップファイルの識別情報を管理するテーブルである。一例として、バックアップファイルの識別情報は、ファイルＩＤ（IDentifier）と称する番号で表されるものとする。バックアップ一覧テーブルｔ１は、ファイルＩＤおよびファイル名の項目を含む。
【００７６】
ファイルＩＤの項目には、ファイルＩＤが登録される。ファイル名の項目には、ファイル名が登録される。例えば、バックアップ一覧テーブルｔ１には、ファイルＩＤが“１”、ファイル名が“ｂａｃｋｕｐ０１．ｂａｋ”という情報が登録される。これは、ファイルＩＤ“１”で示されるバックアップファイル（バックアップファイルｇ１）のファイル名が“ｂａｃｋｕｐ０１．ｂａｋ”であることを示す。
【００７７】
また、バックアップ一覧テーブルｔ１には、ファイルＩＤが“２”、ファイル名が“ｂａｃｋｕｐ０２．ｂａｋ”という情報が登録される。これは、ファイルＩＤ“２”で示されるバックアップファイル（バックアップファイルｇ２）のファイル名が“ｂａｃｋｕｐ０２．ｂａｋ”であることを示す。
【００７８】
ここで、バックアップファイルｇ２についても説明を加える。バックアップファイルｇ２は、バックアップファイルｇ１よりも後に取得されたバックアップファイルである。バックアップファイルｇ２は、セクタ番号“０”に対するデータＡというレコードを含む。バックアップファイルｇ２は、セクタ番号“２”に対するデータＤというレコードを含む。
【００７９】
図７は、仮想ディスクイメージの例を示す図である。仮想ディスクイメージｍ１は、仮想ディスクイメージ記憶部１２０に格納される。仮想ディスクイメージｍ１は、セクタ番号およびファイルＩＤの項目を含む。
【００８０】
セクタ番号の項目には、セクタ番号が登録される。ファイルＩＤの項目には、ファイルＩＤが登録される。図７で例示される仮想ディスクイメージｍ１の内容は、バックアップ処理により、バックアップファイルｇ２が取得された直後の状態を示している。
【００８１】
例えば、仮想ディスクイメージｍ１には、セクタ番号が“０”、ファイルＩＤが“２”という情報が登録される。これは、セクタ番号“０”の最新のセクタデータを含むバックアップファイルが、ファイルＩＤ“２”に対応するバックアップファイルｇ２であることを示す。バックアップファイルｇ２のセクタ番号“０”のセクタデータは、データＡである。
【００８２】
また、仮想ディスクイメージｍ１には、セクタ番号が“２”、ファイルＩＤが“２”という情報が登録される。これは、セクタ番号“２”の最新のセクタデータを含むバックアップファイルが、ファイルＩＤ“２”に対応するバックアップファイルｇ２であることを示す。バックアップファイルｇ２のセクタ番号“２”のセクタデータは、データＤである。
【００８３】
また、仮想ディスクイメージｍ１には、セクタ番号が“３”、ファイルＩＤが“１”という情報が登録される。これは、セクタ番号“３”の最新のセクタデータを含むバックアップファイルが、ファイルＩＤ“１”に対応するバックアップファイルｇ１であることを示す。バックアップファイルｇ１のセクタ番号“３”のセクタデータは、データＣである。
【００８４】
図８は、差分位置情報の例を示す図である。差分位置情報ｐ１は、図７で例示した仮想ディスクイメージｍ１に対するバックアップファイルｇ１の差分位置情報である。差分位置情報ｐ１は、“０１０”というビット列で表される。差分位置情報ｐ１のビット列の先頭ビットは、バックアップファイルｇ１の先頭のレコード（セクタ番号“０”のレコード）に対応する。また、同ビット列の２番目のビットは、バックアップファイルｇ１の２番目のレコード（セクタ番号“２”のレコード）に対応する。このように、差分位置情報ｐ１のビット列の各ビットは、バックアップファイルｇ１の各レコードに、先頭から順に、それぞれ対応する。
【００８５】
図７の仮想ディスクイメージｍ１によれば、セクタ番号“０”に対する最新のセクタデータは、バックアップファイルｇ２に含まれるデータＡである。バックアップファイルｇ１のセクタ番号“０”のセクタデータもデータＡである。よって、差分位置情報ｐ１の先頭ビットは“０”（差分なし）となる。
【００８６】
また、仮想ディスクイメージｍ１によれば、セクタ番号“２”に対する最新のセクタデータは、バックアップファイルｇ２に含まれるデータＤである。バックアップファイルｇ１のセクタ番号“２”のセクタデータはデータＢである。両セクタデータは異なる。よって、差分位置情報ｐ２の２番目のビットは“１”（差分あり）となる。
【００８７】
更に、仮想ディスクイメージｍ１によれば、セクタ番号“３”に対する最新のセクタデータは、バックアップファイルｇ１に含まれるデータＣである。よって、差分位置情報ｐ１の先頭ビットは“０”（差分なし）となる。
【００８８】
図８では、差分位置情報ｐ２も例示している。差分位置情報ｐ２は、図７で例示した仮想ディスクイメージｍ１に対するバックアップファイルｇ２の差分位置情報である。差分位置情報ｐ２は、“００”というビット列で表される（ここで示す例では、何れのセクタも差分なし）。差分位置情報ｐ２のビット列の各ビットは、バックアップファイルｇ２の各レコードに、先頭から順に、それぞれ対応する。
【００８９】
なお、差分位置取得部１７０は、例えば、差分位置情報の識別名に、バックアップファイルの版数に相当する数値列を付与することで、差分位置情報とバックアップファイルとの対応関係を管理する。あるいは、差分位置取得部１７０は、バックアップファイルのファイルＩＤを差分位置情報に含めて、差分位置情報とバックアップファイルとの対応関係を管理してもよい。
【００９０】
次に、第２の実施の形態のバックアップシステムによるバックアップ手順を説明する。
図９は、バックアップ時のサーバ処理例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
【００９１】
（Ｓ１１）バックアップ制御部１４０は、スケジュールされたタイミング、または、ユーザによるバックアップ開始指示の入力を受け付けたタイミングなどで、バックアップを開始する。バックアップ制御部１４０は、バックアップ開始通知を業務サーバ２００に送信する。バックアップ制御部１４０は、セクタデータを格納するためのバックアップファイルを新たに生成し、ファイル名を付与して、バックアップ記憶部１１０に格納する。
【００９２】
（Ｓ１２）バックアップ制御部１４０は、業務サーバ２００からデータを受信する。バックアップ制御部１４０が業務サーバ２００から受信するデータには２種類ある。第１には、業務サーバ２００により順次送信されるセクタデータおよびセクタ番号である。第２には、業務サーバ２００によるディスク２１０の全てのセクタデータの送信完了を示す終了通知である。
【００９３】
（Ｓ１３）バックアップ制御部１４０は、今回、終了通知を受信したか否かを判定する。終了通知を受信していない場合、バックアップ制御部１４０は、処理をステップＳ１４に進める。終了通知を受信していない場合は、セクタデータおよびセクタ番号を受信した場合に相当する。終了通知を受信した場合、バックアップ制御部１４０は、処理をステップＳ１５に進める。
【００９４】
（Ｓ１４）バックアップ制御部１４０は、今回のバックアップに対応するバックアップファイルに、受信したセクタ番号およびセクタデータを追加する。そして、バックアップ制御部１４０は、処理をステップＳ１２に進める。
【００９５】
（Ｓ１５）バックアップ制御部１４０は、今回のバックアップファイルにファイルＩＤを付与し、ファイルＩＤとファイル名との対応関係を、バックアップ一覧テーブルｔ１に登録する。
【００９６】
（Ｓ１６）仮想ディスクイメージ生成部１６０は、仮想ディスクイメージの生成を行う。処理の詳細は後述される。
図１０は、バックアップ時のエージェント処理例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
【００９７】
（Ｓ２１）バックアップ処理部２２０は、バックアップサーバ１００からバックアップ開始通知を受信する。
（Ｓ２２）バックアップ処理部２２０は、次に送信すべきセクタデータを、ディスク２１０から検索する。バックアップ処理部２２０は、セクタ番号の昇順に送信するセクタデータを検索する。バックアップ処理部２２０は、業務サーバ２００のファイルシステムで使用されていないセクタを、セクタデータの検索の対象外とする。
【００９８】
（Ｓ２３）バックアップ処理部２２０は、ステップＳ２２で検索したセクタデータをディスク２１０から読み出す。
（Ｓ２４）バックアップ処理部２２０は、読み出したセクタデータを、該当のセクタのセクタ番号とともにバックアップサーバ１００に送信する。
【００９９】
（Ｓ２５）バックアップ処理部２２０は、ディスク２１０内の使用中のセクタについて、全てのセクタデータを送信したか否かを判定する。使用中のセクタについて全てのセクタデータを送信していない場合、バックアップ処理部２２０は、処理をステップＳ２２に進める。使用中のセクタについて全てのセクタデータを送信した場合、バックアップ処理部２２０は、処理をステップＳ２６に進める。
【０１００】
（Ｓ２６）バックアップ処理部２２０は、バックアップサーバ１００に終了通知を送信する。
続いて、第２の実施の形態のバックアップシステムによるリストア手順を説明する。
【０１０１】
図１１は、リストア時のサーバ処理例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
（Ｓ３１）リストア制御部１５０は、ユーザによるリストア開始指示の入力を受け付ける。リストア開始指示は、リストアに用いるバックアップファイルの版数を含む。リストア制御部１５０は、リストア開始通知を業務サーバ２００に送信する。
【０１０２】
（Ｓ３２）リストア制御部１５０は、指定された版数のバックアップファイルから、セクタデータを１つ読み出す。例えば、リストア制御部１５０は、該当のバックアップファイルに含まれるセクタ番号の小さい方から順に、セクタデータを１つ読み出す。
【０１０３】
（Ｓ３３）リストア制御部１５０は、指定された版数のバックアップファイルに対応する差分位置情報から、ステップＳ３２で読み出したセクタデータに対応する差分フラグを読み出す。
【０１０４】
（Ｓ３４）リストア制御部１５０は、読み出したセクタデータと差分フラグとを業務サーバ２００に送信する。リストア制御部１５０は、セクタデータに対応するセクタ番号も業務サーバ２００に送信する。
【０１０５】
（Ｓ３５）リストア制御部１５０は、指定された版数のバックアップファイルに含まれる全てのセクタデータを業務サーバ２００に送信したか否かを判定する。全てのセクタデータを送信した場合、リストア制御部１５０は、処理をステップＳ３６に進める。全てのセクタデータを送信していない場合、リストア制御部１５０は、処理をステップＳ３２に進める。
【０１０６】
（Ｓ３６）リストア制御部１５０は、バックアップサーバ１００に終了通知を送信する。
（Ｓ３７）仮想ディスクイメージ生成部１６０は、仮想ディスクイメージの生成を行う。処理の詳細は後述される。
【０１０７】
図１２は、リストア時のエージェント処理例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
（Ｓ４１）リストア処理部２３０は、バックアップサーバ１００からリストア開始通知を受信する。リストア処理部２３０は、リストア開始通知により、リストアの開始を検知し、バックアップサーバ１００からのデータ受信を待機する。
【０１０８】
（Ｓ４２）リストア処理部２３０は、バックアップサーバ１００からデータを受信する。リストア処理部２３０がバックアップサーバ１００から受信するデータには２種類ある。第１には、バックアップサーバ１００により順次送信されるセクタデータとセクタ番号と差分フラグとのセットである。第２には、バックアップサーバ１００によるバックアップファイルに含まれる全てのセクタデータの送信完了を示す終了通知である。
【０１０９】
（Ｓ４３）リストア処理部２３０は、今回、終了通知を受信したか否かを判定する。終了通知を受信していない場合、リストア処理部２３０は、処理をステップＳ４４に進める。終了通知を受信していない場合は、セクタデータとセクタ番号と差分フラグのセットを受信した場合に相当する。終了通知を受信した場合、リストア処理部２３０は、処理を終了する。
【０１１０】
（Ｓ４４）リストア処理部２３０は、今回受信した差分フラグの値が“１”（差分フラグ＝１）であるか否かを判定する。差分フラグの値が“１”である場合、リストア処理部２３０は、処理をステップＳ４７に進める。差分フラグの値が“１”でない（すなわち、差分フラグの値が“０”である）場合、リストア処理部２３０は、処理をステップＳ４５に進める。
【０１１１】
（Ｓ４５）リストア処理部２３０は、ディスク２１０のリストア先のセクタに格納されたセクタデータを読み出す。ここで、ステップＳ４５のリストア先のセクタとは、リストア処理部２３０がバックアップサーバ１００から今回受信したセクタデータのセクタ番号に対応するセクタである。
【０１１２】
（Ｓ４６）リストア処理部２３０は、バックアップサーバ１００から今回受信したセクタデータと、ステップＳ４５でディスク２１０から読み出したセクタデータとが一致するか否かを判定する。一致する場合、リストア処理部２３０は、処理をステップＳ４２に進める。一致しない場合、リストア処理部２３０は、処理をステップＳ４７に進める。
【０１１３】
（Ｓ４７）リストア処理部２３０は、ディスク２１０のリストア先のセクタに受信したセクタデータを書き込む。ステップＳ４７のリストア先のセクタとは、ステップＳ４５と同様に、リストア処理部２３０がバックアップサーバ１００から今回受信したセクタデータのセクタ番号に対応するセクタである。そして、リストア処理部２３０は、処理をステップＳ４２に進める。
【０１１４】
このように、リストア処理部２３０は、差分フラグが“１”のセクタについては、ステップＳ４５，Ｓ４６を省略し（ステップＳ４５，Ｓ４６をスキップし）、ステップＳ４７を実行する。すなわち、リストア制御部１５０は、差分フラグが“１”のセクタについては、ディスク２１０からのセクタデータの読み出しや比較を省略して、バックアップファイルのセクタデータをディスク２１０に書き込むように、業務サーバ２００を制御しているといえる。
【０１１５】
次に、仮想ディスクイメージ生成部１６０による仮想ディスクイメージ生成の手順を説明する。
図１３は、仮想ディスクイメージ生成例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。下記の手順は、図９のステップＳ１６（バックアップ後の処理）および図１１のステップＳ３７（リストア後の処理）に相当する。
【０１１６】
（Ｓ５１）仮想ディスクイメージ生成部１６０は、仮想ディスクイメージ記憶部１２０に記憶された仮想ディスクイメージｍ１に適用するバックアップファイルのファイル名（バックアップファイル名）を取得する。ここで、仮想ディスクイメージｍ１に適用するバックアップファイルは、バックアップ後の場合、今回取得したバックアップファイルである。仮想ディスクイメージｍ１に適用するバックアップファイルは、リストア後の場合、今回リストアに用いたバックアップファイルである。ステップＳ５１の実行時に、仮想ディスクイメージｍ１が存在しない場合、仮想ディスクイメージ生成部１６０は、仮想ディスクイメージｍ１を生成し、仮想ディスクイメージ記憶部１２０に格納する。なお、仮想ディスクイメージｍ１の生成直後では、仮想ディスクイメージｍ１は、何れのセクタ番号のレコードも含んでいない。
【０１１７】
（Ｓ５２）仮想ディスクイメージ生成部１６０は、ステップＳ５１で取得したファイル名に対応するバックアップファイルからセクタ番号を取得する。例えば、仮想ディスクイメージ生成部１６０は、該当のバックアップファイルから、セクタ番号の小さい順に１つセクタ番号を取得する。
【０１１８】
（Ｓ５３）仮想ディスクイメージ生成部１６０は、仮想ディスクイメージｍ１を参照して、ステップＳ５２で取得したセクタ番号に対応するレコードが、仮想ディスクイメージｍ１にあるか否かを判定する。該当のセクタ番号に対応するレコードが仮想ディスクイメージｍ１にない場合、仮想ディスクイメージ生成部１６０は、処理をステップＳ５４に進める。該当のセクタ番号に対応するレコードが仮想ディスクイメージｍ１にある場合、仮想ディスクイメージ生成部１６０は、処理をステップＳ５５に進める。
【０１１９】
（Ｓ５４）仮想ディスクイメージ生成部１６０は、ステップＳ５２で取得したセクタ番号と該当のバックアップファイルのファイルＩＤとを仮想ディスクイメージｍ１に追加する。ここで、仮想ディスクイメージ生成部１６０は、該当のバックアップファイルのファイルＩＤを、バックアップ記憶部１１０に記憶されたバックアップ一覧テーブルｔ１から取得する。そして、仮想ディスクイメージ生成部１６０は、処理をステップＳ５６に進める。
【０１２０】
（Ｓ５５）仮想ディスクイメージ生成部１６０は、仮想ディスクイメージｍ１に含まれる該当のセクタ番号に対応する既存レコードのファイルＩＤを、ステップＳ５１で取得したバックアップファイル名に対応するファイルＩＤに変更する。そして、仮想ディスクイメージ生成部１６０は、処理をステップＳ５６に進める。
【０１２１】
（Ｓ５６）仮想ディスクイメージ生成部１６０は、バックアップファイルに含まれる全セクタについて仮想ディスクイメージｍ１の更新を完了したか否かを判定する。全セクタについて完了していない場合、仮想ディスクイメージ生成部１６０は、処理をステップＳ５２に進める。全セクタについて完了した場合、仮想ディスクイメージ生成部１６０は、処理をステップＳ５７に進める。
【０１２２】
（Ｓ５７）差分位置取得部１７０は、差分位置情報の生成を行う。処理の詳細は後述される。
図１４は、差分位置情報の生成例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。以下に示す手順は、図１３のステップＳ５７に相当する。
【０１２３】
（Ｓ６１）差分位置取得部１７０は、バックアップ一覧テーブルｔ１からバックアップファイルのリストを抽出する。
（Ｓ６２）差分位置取得部１７０は、リストの全バックアップファイルを処理済であるか否かを判定する。全バックアップファイルを処理済でない場合、差分位置取得部１７０は、処理をステップＳ６３に進める。全バックアップファイルを処理済である場合、差分位置取得部１７０は、処理を終了する。
【０１２４】
（Ｓ６３）差分位置取得部１７０は、未処理のバックアップファイルをリストから１つ選択する。ここで選択されたバックアップファイルを、以下のステップの説明において、着目するバックアップファイルと称する。
【０１２５】
（Ｓ６４）差分位置取得部１７０は、着目するバックアップファイルに対応する差分位置情報を空にする。ここで、空とは、差分位置情報に含まれる差分フラグが全て“０”であることを意味する。すなわち、差分位置取得部１７０は、着目するバックアップファイルに対応する差分位置情報の差分フラグを全て“０”に設定する。
【０１２６】
（Ｓ６５）差分位置取得部１７０は、着目するバックアップファイルが今回バックアップまたはリストアしたバックアップファイルであるか否かを判定する。ここで、今回バックアップしたバックアップファイルとは、差分位置情報の生成処理がバックアップ後に行われる場合に、今回のバックアップで取得されたバックアップファイルである。また、今回リストアしたバックアップファイルとは、差分位置情報の生成処理がリストア後に行われる場合に、今回のリストアに用いられたバックアップファイルである。着目するバックアップファイルが、今回バックアップまたはリストアしたバックアップファイルである場合、差分位置取得部１７０は、処理をステップＳ６２に進める。着目するバックアップファイルが、今回バックアップまたはリストアしたバックアップファイルでない場合、差分位置取得部１７０は、処理をステップＳ６６に進める。
【０１２７】
（Ｓ６６）差分位置取得部１７０は、着目するバックアップファイルから、１つのセクタ番号を選択し、選択したセクタ番号に対応するセクタデータを読み出す。
（Ｓ６７）差分位置取得部１７０は、ステップＳ６６で選択したセクタ番号について、仮想ディスクイメージｍ１から、当該セクタ番号に対応するセクタデータを読み出す。
【０１２８】
（Ｓ６８）差分位置取得部１７０は、ステップＳ６６で読み出したセクタデータとステップＳ６７で読み出したセクタデータとが一致するか否かを判定する。両セクタデータが一致しない場合、差分位置取得部１７０は、処理をステップＳ６９に進める。一致する場合、差分位置取得部１７０は、処理をステップＳ７０に進める。
【０１２９】
（Ｓ６９）差分位置取得部１７０は、着目するバックアップファイルに対応する差分位置情報のビット列のうち、ステップＳ６６で選択したセクタ番号に対応するビット（差分フラグ）の値を“１”（差分フラグ＝“１”）に設定する。そして、差分位置取得部１７０は、処理をステップＳ７１に進める。
【０１３０】
（Ｓ７０）差分位置取得部１７０は、着目するバックアップファイルに対応する差分位置情報のビット列のうち、ステップＳ６６で選択したセクタ番号に対応するビット（差分フラグ）の値を“０”（差分フラグ＝“０”）に設定する。ただし、差分位置取得部１７０は、ステップＳ６４で、該当の差分位置情報を空に設定しているので該当のビット（差分フラグ）を“０”のままとすればよい。そして、差分位置取得部１７０は、処理をステップＳ７１に進める。
【０１３１】
（Ｓ７１）差分位置取得部１７０は、着目するバックアップファイルに含まれる全セクタ番号で示される全セクタを処理済であるか（差分有無の判定を行ったか）否かを判定する。全セクタを処理済である場合、差分位置取得部１７０は、処理をステップＳ６２に進める。全セクタを処理済でない場合、差分位置取得部１７０は、処理をステップＳ６６に進める。
【０１３２】
次に、バックアップサーバ１００によるバックアップの具体例を説明する。
図１５は、バックアップの具体例（その１）を示す図である。図１５（Ａ）は、初回のバックアップを例示している（以降の図では、セクタ番号の図示を省略する）。ディスク２１０の各セクタは次のように利用されている。セクタ番号“１”のセクタは、データＡを記憶する。セクタ番号“２”のセクタは、未使用である。セクタ番号“３”のセクタは、データＢを記憶する。セクタ番号“４”のセクタは、データＣを記憶する。セクタ番号“５”のセクタは、未使用である。
【０１３３】
バックアップ制御部１４０は、ディスク２１０に記憶されたデータのバックアップを取得し、バックアップファイルｇ１を生成する（ステップＳＴ１１）。バックアップファイルｇ１は、セクタ番号“１”のデータＡ、セクタ番号“３”のデータＢ、および、セクタ番号“４”のデータＣを含む。
【０１３４】
仮想ディスクイメージ生成部１６０は、バックアップファイルｇ１に基づいて、仮想ディスクイメージｍ１を生成する（ステップＳＴ１２）。この段階では、仮想ディスクイメージｍ１は、ディスク２１０の現状態を表すイメージ情報となる。図１５中では、仮想ディスクイメージｍ１内に、データＡ、データＢおよびデータＣのように便宜的に記載しているが、実データが含まれているわけではなく、前述のように、セクタ番号に対して、バックアップファイルｇ１のファイルＩＤが記録される。
【０１３５】
差分位置取得部１７０は、バックアップファイルｇ１に対応する差分位置情報ｐ１を生成する（ステップＳＴ１３）。バックアップファイルｇ１は、今回のバックアップによって取得されたバックアップファイルなので、差分位置取得部１７０は、差分位置情報ｐ１を空（全ての差分フラグを“０”）に設定する。
【０１３６】
図１５（Ｂ）は、２回目のバックアップを例示している。ディスク２１０の各セクタは次のように利用されている。セクタ番号“１”のセクタは、データＡを記憶する（前回バックアップ時と変化なし）。セクタ番号“２”のセクタは、未使用である（前回バックアップ時と変化なし）。セクタ番号“３”のセクタは、データＤを記憶する。すなわち、セクタ番号“３”のセクタでは、記憶するセクタデータが、データＢからデータＤへ更新されている。セクタ番号“４”のセクタは、未使用である。すなわち、セクタ番号“４”のセクタでは、データＣが削除されている。セクタ番号“５”のセクタは、未使用である（前回バックアップ時と変化なし）。
【０１３７】
バックアップ制御部１４０は、ディスク２１０に記憶されたデータのバックアップを取得し、バックアップファイルｇ２を生成する（ステップＳＴ２１）。バックアップファイルｇ２は、セクタ番号“１”のデータＡ、および、セクタ番号“３”のデータＤを含む。
【０１３８】
仮想ディスクイメージ生成部１６０は、バックアップファイルｇ２と仮想ディスクイメージｍ１とをマージする（ステップＳＴ２２）。すなわち、仮想ディスクイメージ生成部１６０は、バックアップファイルｇ２に基づいて仮想ディスクイメージｍ１を更新する。具体的には、セクタ番号“１”、“３”に対応するファイルＩＤを、バックアップファイルｇ２のファイルＩＤに変更する。仮想ディスクイメージ生成部１６０は、セクタ番号“４”に対応するファイルＩＤを、バックアップファイルｇ１のファイルＩＤのままとする（変更しない）。
【０１３９】
差分位置取得部１７０は、バックアップファイルｇ２に対応する差分位置情報ｐ２を生成する（ステップＳＴ２３）。バックアップファイルｇ２は、今回のバックアップによって取得されたバックアップファイルなので、差分位置取得部１７０は、差分位置情報ｐ２を空に設定する。
【０１４０】
差分位置取得部１７０は、バックアップファイルｇ１に含まれるセクタデータと、仮想ディスクイメージｍ１により示されるセクタデータとをセクタごとに比較する（ステップＳＴ２４）。差分位置取得部１７０は、比較に応じて、差分位置情報ｐ１を更新する。
【０１４１】
この場合、バックアップファイルｇ１のセクタ番号“１”のデータＡと、仮想ディスクイメージｍ１により示されるセクタ番号“１”のデータＡとは同じである。したがって、差分位置取得部１７０は、差分位置情報ｐ１のセクタ番号“１”に対応する差分フラグを“０”とする。
【０１４２】
また、バックアップファイルｇ１のセクタ番号“３”のデータＢと、仮想ディスクイメージｍ１により示されるセクタ番号“３”のデータＤとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ１のセクタ番号“３”に対応する差分フラグを“１”とする。
【０１４３】
更に、バックアップファイルｇ１のセクタ番号“４”のデータＣと、仮想ディスクイメージｍ１により示されるセクタ番号“４”のデータＣとは同じである。したがって、差分位置取得部１７０は、差分位置情報ｐ１のセクタ番号“４”に対応する差分フラグを“０”とする。
【０１４４】
図１６は、バックアップの具体例（その２）を示す図である。図１６では、図１５（Ｂ）に続く３回目のバックアップを例示している。ディスク２１０の各セクタは次のように利用されている。セクタ番号“１”のセクタは、データＥを記憶する。すなわち、セクタ番号“１”のセクタでは、記憶するセクタデータが、データＡからデータＥへ更新されている。セクタ番号“２”のセクタは、データＦを記憶する。セクタ番号“２”のセクタでは、データＦが追加されている。セクタ番号“３”のセクタは、データＤを記憶する（前回バックアップ時と変化なし）。セクタ番号“４”のセクタは、未使用である（前回バックアップ時と変化なし）。セクタ番号“５”のセクタは、未使用である（前回バックアップ時と変化なし）。
【０１４５】
バックアップ制御部１４０は、ディスク２１０に記憶されたデータのバックアップを取得し、バックアップファイルｇ３を生成する（ステップＳＴ３１）。バックアップファイルｇ３は、セクタ番号“１”のデータＥ、セクタ番号“２”のデータＦ、および、セクタ番号“３”のデータＤを含む。
【０１４６】
仮想ディスクイメージ生成部１６０は、バックアップファイルｇ３と仮想ディスクイメージｍ１とをマージする（ステップＳＴ３２）。すなわち、仮想ディスクイメージ生成部１６０は、バックアップファイルｇ３に基づいて仮想ディスクイメージｍ１を更新する。具体的には、セクタ番号“１”、“２”、“３”に対応するファイルＩＤを、バックアップファイルｇ３のファイルＩＤに変更する。仮想ディスクイメージ生成部１６０は、セクタ番号“４”に対応するファイルＩＤを、バックアップファイルｇ１のファイルＩＤのままとする（変更しない）。
【０１４７】
差分位置取得部１７０は、バックアップファイルｇ３に対応する差分位置情報ｐ３を生成する（ステップＳＴ３３）。バックアップファイルｇ３は、今回のバックアップによって取得されたバックアップファイルなので、差分位置取得部１７０は、差分位置情報ｐ３を空に設定する。
【０１４８】
差分位置取得部１７０は、バックアップファイルｇ２に含まれるセクタデータと、仮想ディスクイメージｍ１により示されるセクタデータとをセクタごとに比較する（ステップＳＴ３４）。差分位置取得部１７０は、比較に応じて、差分位置情報ｐ２を更新する。
【０１４９】
この場合、バックアップファイルｇ２のセクタ番号“１”のデータＡと、仮想ディスクイメージｍ１により示されるセクタ番号“１”のデータＥとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ２のセクタ番号“１”に対応する差分フラグを“１”とする。
【０１５０】
また、バックアップファイルｇ２のセクタ番号“３”のデータＤと、仮想ディスクイメージｍ１により示されるセクタ番号“３”のデータＤとは同じである。したがって、差分位置取得部１７０は、差分位置情報ｐ２のセクタ番号“３”に対応する差分フラグを“０”とする。
【０１５１】
差分位置取得部１７０は、バックアップファイルｇ１に含まれるセクタデータと、仮想ディスクイメージｍ１により示されるセクタデータとをセクタごとに比較する（ステップＳＴ３５）。差分位置取得部１７０は、比較に応じて、差分位置情報ｐ１を更新する。
【０１５２】
この場合、バックアップファイルｇ１のセクタ番号“１”のデータＡと、仮想ディスクイメージｍ１により示されるセクタ番号“１”のデータＥとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ１のセクタ番号“１”に対応する差分フラグを“１”とする。
【０１５３】
また、バックアップファイルｇ１のセクタ番号“３”のデータＢと、仮想ディスクイメージｍ１により示されるセクタ番号“３”のデータＤとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ１のセクタ番号“３”に対応する差分フラグを“１”とする。
【０１５４】
更に、バックアップファイルｇ１のセクタ番号“４”のデータＣと、仮想ディスクイメージｍ１により示されるセクタ番号“４”のデータＣとは同じである。したがって、差分位置取得部１７０は、差分位置情報ｐ１のセクタ番号“４”に対応する差分フラグを“０”とする。
【０１５５】
このように、バックアップサーバ１００は、ディスク２１０のバックアップを取得するたびに、過去に取得したバックアップファイルの差分位置情報を更新し、リストアに備える。次に、バックアップサーバ１００によるリストアの具体例を説明する。
【０１５６】
図１７は、リストアの具体例を示す図である。図１７では、リストアに用いるバックアップファイルとして、バックアップファイルｇ１がユーザにより選択された場合を例示している。
【０１５７】
リストア制御部１５０は、バックアップファイルｇ１を、ディスク２１０にリストアする（ステップＳＴ４１）。前述のように、リストア制御部１５０は、バックアップファイルｇ１からセクタ番号、セクタデータおよび差分フラグの組を、業務サーバ２００に順番に送信する。業務サーバ２００は、セクタ番号、セクタデータおよび差分フラグの組を受信すると、差分フラグに応じて、受信したセクタデータを、該当のセクタ番号に対応するディスク２１０上のセクタに書き込む。業務サーバ２００は、差分フラグが“１”であれば、ディスク２１０上のセクタデータとの比較なしで、当該書き込みを行える。業務サーバ２００は、差分フラグが“０”であれば、ディスク２１０上のセクタデータとの比較を行った上で、書き込みを行うか否かを決定する。業務サーバ２００は、バックアップサーバ１００から受信しないセクタ番号のセクタについては、ファイルシステム上で未使用として管理する。こうして、バックアップファイルｇ１によるリストアは完了する。
【０１５８】
仮想ディスクイメージ生成部１６０は、バックアップファイルｇ１と仮想ディスクイメージｍ１とをマージする（ステップＳＴ４２）。すなわち、仮想ディスクイメージ生成部１６０は、バックアップファイルｇ１に基づいて仮想ディスクイメージｍ１を更新する。具体的には、セクタ番号“１”、“３”、“４”に対応するファイルＩＤを、バックアップファイルｇ１のファイルＩＤに変更する。仮想ディスクイメージ生成部１６０は、セクタ番号“２”に対応するファイルＩＤを、バックアップファイルｇ３のファイルＩＤのままとする（変更しない）。
【０１５９】
差分位置取得部１７０は、バックアップファイルｇ３に含まれるセクタデータと、仮想ディスクイメージｍ１により示されるセクタデータとをセクタごとに比較する（ステップＳＴ４３）。差分位置取得部１７０は、比較に応じて、差分位置情報ｐ３を更新する。
【０１６０】
この場合、バックアップファイルｇ３のセクタ番号“１”のデータＥと、仮想ディスクイメージｍ１により示されるセクタ番号“１”のデータＡとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ３のセクタ番号“１”に対応する差分フラグを“１”とする。
【０１６１】
また、バックアップファイルｇ３のセクタ番号“２”のデータＦと、仮想ディスクイメージｍ１により示されるセクタ番号“２”のデータＦとは同じである。したがって、差分位置取得部１７０は、差分位置情報ｐ３のセクタ番号“２”に対応する差分フラグを“０”とする。
【０１６２】
更に、バックアップファイルｇ３のセクタ番号“３”のデータＤと、仮想ディスクイメージｍ１により示されるセクタ番号“３”のデータＢとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ３のセクタ番号“３”に対応する差分フラグを“１”とする。
【０１６３】
差分位置取得部１７０は、バックアップファイルｇ２に含まれるセクタデータと、仮想ディスクイメージｍ１により示されるセクタデータとをセクタごとに比較する（ステップＳＴ４４）。差分位置取得部１７０は、比較に応じて、差分位置情報ｐ２を更新する。
【０１６４】
この場合、バックアップファイルｇ２のセクタ番号“１”のデータＡと、仮想ディスクイメージｍ１により示されるセクタ番号“１”のデータＡとは同じである。したがって、差分位置取得部１７０は、差分位置情報ｐ２のセクタ番号“１”に対応する差分フラグを“０”とする。
【０１６５】
また、バックアップファイルｇ２のセクタ番号“３”のデータＤと、仮想ディスクイメージｍ１により示されるセクタ番号“３”のデータＢとは異なる。したがって、差分位置取得部１７０は、差分位置情報ｐ２のセクタ番号“３”に対応する差分フラグを“１”とする。
【０１６６】
差分位置取得部１７０は、今回のリストアに用いたバックアップファイルｇ１に対応する差分位置情報ｐ１を空に設定する（ステップＳＴ４５）。
図１８は、バックアップおよびリストアの時系列の例を示す図である。図１８では、図１５〜図１７で例示したバックアップ／リストアの具体例の時系列を示している。図１８に向かって左側から右側に向かう方向が時間軸の正方向である。
【０１６７】
ここで、時間軸上のＵ１，Ｕ２，Ｕ３の各タイミングは、業務サーバ２００におけるディスク２１０（図１８では単にディスクと表記）の更新タイミングである。また、時間軸上のＢ１，Ｂ２，Ｂ３の各タイミングは、バックアップが行われたタイミングである。タイミングＢ１では、バックアップファイルｇ１が取得される。タイミングＢ２では、バックアップファイルｇ２が取得される。タイミングＢ３では、バックアップファイルｇ３が取得される。更に、時間軸上のＲ１（Ｂ１）のタイミングは、バックアップファイルｇ１を用いたリストアが行われたタイミングである。
【０１６８】
図１８に示すように、バックアップサーバ１００は、バックアップを行うと、新たに取得したバックアップファイルに対して差分位置情報を生成する。また、バックアップサーバ１００は、仮想ディスクイメージの更新も行い、今回とは別のタイミングで取得された他のバックアップファイルと仮想ディスクイメージとをセクタごとに比較し、当該他のバックアップファイルに対応する差分位置情報の更新も行う。
【０１６９】
更に、バックアップサーバ１００は、リストアを行うと、リストアに用いたバックアップファイルを取得して仮想ディスクイメージを更新する。また、バックアップサーバ１００は、リストアに用いたバックアップファイルに対応する差分位置情報の更新を行う（空に設定する）。そして、バックアップサーバ１００は、リストアに用いたバックアップファイルとは別のタイミングで取得された他のバックアップファイルと仮想ディスクイメージとをセクタごとに比較し、当該他のバックアップファイルに対応する差分位置情報の更新も行う。
【０１７０】
次に、リストアに伴うディスク２１０におけるＩ／Ｏ（Input / Output）を例示する。
図１９は、リストア時のＩ／Ｏの例を示す図である。図１９の例では、仮想ディスクイメージｍ１内に４つのセクタを例示している。当該４つのセクタに対応するセクタデータは次の通りである。第１のセクタはデータＡである。第２のセクタはデータＥである。第３のセクタはデータＣである。第４のセクタはデータＦである。
【０１７１】
また、バックアップファイルｇ４は、次のセクタデータを含む。第１のセクタはデータＡである。第２のセクタはデータＢである。第３のセクタはデータＣである。第４のセクタはデータＤである。
【０１７２】
バックアップファイルｇ４に対応する差分位置情報ｐ４は、次の差分フラグを含む。第１のセクタの差分フラグは“０”である。第２のセクタの差分フラグは“１”である。第３のセクタの差分フラグは“０”である。第４のセクタの差分フラグは“１”である。
【０１７３】
そして、ディスク２１０の各セクタに記憶されているセクタデータは、次の通りである。第１のセクタはデータＡである。第２のセクタはデータＢである。第３のセクタはデータＣである。第４のセクタはデータＦである。
【０１７４】
この場合に、バックアップサーバ１００の機能により、バックアップファイルｇ４を用いてリストアを行うことを考える。業務サーバ２００は、バックアップサーバ１００から、バックアップファイルｇ４に含まれる各セクタデータを、差分フラグとともに順次受信する。リストア処理部２３０は、差分フラグの値に応じて、ディスク２１０の該当のセクタへのセクタデータの書き込みを行う。
【０１７５】
具体的には、（１）第１のセクタについては、差分フラグ“０”のため、リストア処理部２３０は、ディスク２１０から第１のセクタのデータＡを読み出して、バックアップサーバ１００から受信したデータＡと比較する。この場合、両セクタデータはデータＡで同じなので、リストア処理部２３０は、ディスク２１０の第１のセクタへの書き込みを行わない。
【０１７６】
（２）第２のセクタについては、差分フラグ“１”のため、リストア処理部２３０は、セクタデータの比較を省略し、バックアップサーバ１００から受信したデータＢを、ディスク２１０の第２のセクタへ書き込む。
【０１７７】
（３）第３のセクタについては、差分フラグ“０”のため、リストア処理部２３０は、ディスク２１０から第３のセクタのデータＣを読み出して、バックアップサーバ１００から受信したデータＣと比較する。この場合、両セクタデータはデータＣで同じなので、リストア処理部２３０は、ディスク２１０の第３のセクタへの書き込みを行わない。
【０１７８】
（４）第４のセクタについては、差分フラグ“１”のため、リストア処理部２３０は、セクタデータの比較を省略し、バックアップサーバ１００から受信したデータＤを、ディスク２１０の第４のセクタへ書き込む。
【０１７９】
このように、第２の実施の形態のバックアップシステムでは、上記（２）（４）において、ディスク２１０の第２，第４のセクタからのセクタデータの読み出し、および、セクタデータの比較を省略することができる。
【０１８０】
図２０は、リストア時のＩ／Ｏの比較例を示す図である。図２０（Ａ）は、リストア時に、バックアップファイルｇ４の内容を全てディスク２１０に書き込む例を示している。図２０（Ａ）の例では、リストア時にディスク２１０の全てのセクタに書き込みが行われる。このため、リストアの所要時間が比較的長くなる。特に、ディスク２１０がＲＡＩＤ（Redundant Arrays of Inexpensive Disks）構成をとっている場合は、読み込み性能に比べて書き込み性能が悪い傾向にあるため、リストアの所要時間が過大になるおそれもある。また、ディスク２１０として記憶素子に書き込み回数制限があるＳＳＤを使用する場合、リストアにより全てのセクタに書き込みを行うことは、ＳＳＤの寿命を短くする要因になる。
【０１８１】
図２０（Ｂ）は、リストア時に、バックアップファイルｇ４とディスク２１０との差分のセクタのみを、ディスク２１０に書き込む例を示している。ただし、図２０（Ｂ）の例では、セクタごとの差分有無を確認するために、ディスク２１０の各セクタの内容を全て読み出す点が、図１９の例と異なる。図２０（Ｂ）の例では、図２０（Ａ）の例に比べて、Ｉ／Ｏ回数は増えるが、リストアの所要時間やＳＳＤの長寿命化の点で有利である。しかし、図２０（Ｂ）の方法では、差分有無の確認のために、リストア時にディスク２１０の各セクタの内容を全て読み出しており、読み出しに伴う負荷が高まり、リストアの所要時間が長引くおそれがある。このため、リストアの効率化において改善の余地がある。
【０１８２】
図２０で例示した以外の方法として、例えば、ディスク２１０へのアクセスを常に監視してセクタごとの更新を検出し、既存のバックアップファイルに含まれるセクタ番号ごとに更新有無を管理することも考えられる。しかし、この方法では、監視自体の負荷が過大になる可能性が高い。
【０１８３】
そこで、バックアップサーバ１００は、バックアップ処理を行った際に、バックアップファイルごとに差分位置情報を作成する。これにより、図１９で例示したように、リストア時において、バックアップファイルのセクタデータと差分のある可能性のあるセクタに対し、ディスク２１０からのセクタデータの読み出し、および、比較なしに、バックアップファイルのセクタデータを書き込める。言い換えれば、リストア時に差分位置情報により変更していないと思われるセクタのみを比較すればよい。これにより、図２０（Ｂ）の方法に比べて、ディスク２１０に対するリストア時のＩ／Ｏ回数を低減でき、リストアに伴うステップ数を減らせる。その結果、バックアップサーバ１００および業務サーバ２００のリストア時の負荷を低減できる。また、リストアの所要時間を短縮することができる。
【０１８４】
なお、第２の実施の形態の例では、バックアップサーバ１００は、バックアップファイルにおいて、セクタ単位にバックアップしたデータを管理するものとしたが、複数のセクタの集合（例えば、ファイル単位）にバックアップしたデータを管理してもよい。例えば、ファイル単位にバックアップしたデータを管理する場合、バックアップサーバ１００は、バックアップしたデータの識別情報（セクタ番号に代わる情報）として、ファイル名やセクタ番号範囲などを用いることができる。
【０１８５】
また、第２の実施の形態の例では、業務サーバ２００のバックアップをリモートのバックアップサーバ１００により取得するものとしたが、バックアップサーバ１００の機能を業務サーバ２００が有してもよい。
【０１８６】
また、第１の実施の形態の情報処理は、演算部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１３に記録できる。
【０１８７】
例えば、プログラムを記録した記録媒体１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１８８】
１  版数管理装置
１ａ  記憶部
１ｂ  演算部
２  記憶装置
Ｇ１，Ｇ２，Ｇ３  バックアップデータ
Ｍ１  イメージ情報
Ｐ１，Ｐ２，Ｐ３  差分位置情報
【図１】
2018025839.tif 000003
【図２】
2018025839.tif 000004
【図３】
2018025839.tif 000005
【図４】
2018025839.tif 000006
【図５】
2018025839.tif 000007
【図６】
2018025839.tif 000008
【図７】
2018025839.tif 000009
【図８】
2018025839.tif 000010
【図９】
2018025839.tif 000011
【図１０】
2018025839.tif 000012
【図１１】
2018025839.tif 000013
【図１２】
2018025839.tif 000014
【図１３】
2018025839.tif 000015
【図１４】
2018025839.tif 000016
【図１５】
2018025839.tif 000017
【図１６】
2018025839.tif 000018
【図１７】
2018025839.tif 000019
【図１８】
2018025839.tif 000020
【図１９】
2018025839.tif 000021
【図２０】
2018025839.tif 000022