(57)【特許請求の範囲】
【請求項１】
リードとライトのうち少なくともリード可能な第１のメモリを有する第１の記憶部と、
リードおよびライト可能な不揮発性の第２のメモリと、論理アドレスと物理アドレスとを関連付ける管理テーブルと、受信した削除通知により指定された論理アドレスを無効にするように前記管理テーブルを書き換え、受信した読み出し命令に含まれる論理アドレスが無効である場合に、各論理アドレスに対して確定的なデータを指定する第１の関数で表されるデータをホスト装置に送信する制御部とを有する第２の記憶部と、
が接続可能なホスト装置にロードされる制御プログラムであって、
前記第１の記憶部の第１の論理アドレス領域からデータを読み出す第１の処理と、
前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定する第２の処理と、
前記読み出しデータと前記第１の関数で表されるデータとが同じでない場合には、前記第２のメモリの第２の論理アドレス領域に前記読み出しデータを書き込む第３の処理と、
前記読み出しデータと前記第１の関数で表されるデータとが同じである場合には、前記第２のメモリに前記読み出しデータを書き込まずに、前記第２のメモリの前記第２の論理アドレス領域のデータを無効にするための削除通知を行う第４の処理と、
を前記ホスト装置に実行させるように構成された制御プログラム。 
【請求項２】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する論理アドレスによらず同じデータが設定されることを特徴とする請求項１に記載の制御プログラム。 
【請求項３】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する少なくとも２以上の異なる論理アドレスに対して異なるデータが設定されることを特徴とする請求項１に記載の制御プログラム。 
【請求項４】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、それぞれ異なる不揮発性記憶装置に含まれることを特徴とする請求項１に記載の制御プログラム。 
【請求項５】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、同一の不揮発性記憶装置に含まれ、
前記第１の論理アドレス領域と前記第２の論理アドレス領域が互いに重複しない論理アドレスを持つことを特徴とする請求項１に記載の制御プログラム。 
【請求項６】
前記第４の処理に際して、前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定する前に、前記第２の記憶部から前記第１の関数を取得する第５の処理を前記ホスト装置に実行させるように構成された請求項１に記載の制御プログラム。 
【請求項７】
前記第１の記憶部は揮発性であり、前記ホスト装置はアプリケーションプログラムを具備し、前記第１の処理での前記データ読み出しは、前記アプリケーションプログラムから前記第１の論理アドレス領域のデータを前記第２の記憶部に保存する命令を受信して実行されることを特徴とする請求項１に記載の制御プログラム。 
【請求項８】
リードとライトのうち少なくともリード可能な第１のメモリを有する第１の記憶部と、
リードおよびライト可能な不揮発性の第２のメモリと、論理アドレスと物理アドレスとを関連付ける管理テーブルと、受信した削除通知により指定された論理アドレスを無効にするように前記管理テーブルを書き換え、受信した読み出し命令に含まれる論理アドレスが無効である場合に、各論理アドレスに対して確定的なデータを指定する第１の関数で表されるデータをホスト装置に送信する制御部とを有する第２の記憶部と、
が接続可能なホスト装置の制御方法であって、
前記第１の記憶部の第１の論理アドレス領域からデータを読み出す第１の工程と、
前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定する第２の工程と、
前記読み出しデータと前記第１の関数で表されるデータとが同じでない場合には、前記第２のメモリの第２の論理アドレス領域に前記読み出しデータを書き込む第３の工程と、
前記読み出しデータと前記第１の関数で表されるデータとが同じである場合には、前記第２のメモリに前記読み出しデータを書き込まずに、前記第２のメモリの前記第２の論理アドレス領域のデータを無効にするための削除通知を行う第４の工程と、
を備えることを特徴とするホスト装置の制御方法。 
【請求項９】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する論理アドレスによらず同じデータが設定されることを特徴とする請求項８に記載のホスト装置の制御方法。 
【請求項１０】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する少なくとも２以上の異なる論理アドレスに対して異なるデータが設定されることを特徴とする請求項８に記載のホスト装置の制御方法。 
【請求項１１】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、それぞれ異なる不揮発性記憶装置に含まれることを特徴とする請求項８に記載のホスト装置の制御方法。 
【請求項１２】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、同一の不揮発性記憶装置に含まれ、
前記第１の論理アドレス領域と前記第２の論理アドレス領域が互いに重複しない論理アドレスを持つことを特徴とする請求項８に記載のホスト装置の制御方法。 
【請求項１３】
前記第２の工程を実行する前に、前記第２の記憶部から前記第１の関数を取得することを特徴とする請求項８に記載のホスト装置の制御方法。 
【請求項１４】
リードとライトのうち少なくともリード可能な第１のメモリを有する第１の記憶部と、
リードおよびライト可能な不揮発性の第２のメモリと、論理アドレスと物理アドレスとを関連付ける管理テーブルと、受信した削除通知により指定された論理アドレスを無効にするように前記管理テーブルを書き換え、受信した読み出し命令に含まれる論理アドレスが無効である場合に、各論理アドレスに対して確定的なデータを指定する第１の関数で表されるデータをホスト装置に送信する制御部とを有する第２の記憶部と、
前記第１の記憶部と前記第２の記憶部に接続可能なホスト装置と、
を備える情報処理装置において、
前記ホスト装置は、
前記第１の記憶部の第１の論理アドレス領域からデータを読み出し、
前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定し、
前記読み出しデータと前記第１の関数で表されるデータとが同じでない場合には、前記第２のメモリの第２の論理アドレス領域に前記読み出しデータを書き込み、
前記読み出しデータと前記第１の関数で表されるデータとが同じである場合には、前記第２のメモリに前記読み出しデータを書き込まずに、前記第２のメモリの前記第２の論理アドレス領域のデータを無効にするための削除通知を行う
ことを特徴とする情報処理装置。 
【請求項１５】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する論理アドレスによらず同じデータが設定されることを特徴とする請求項１４に記載の情報処理装置。 
【請求項１６】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する少なくとも２以上の異なる論理アドレスに対して異なるデータが設定されることを特徴とする請求項１４に記載の情報処理装置。 
【請求項１７】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、それぞれ異なる不揮発性記憶装置に含まれることを特徴とする請求項１４に記載の情報処理装置。 
【請求項１８】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、同一の不揮発性記憶装置に含まれ、
前記第１の論理アドレス領域と前記第２の論理アドレス領域が互いに重複しない論理アドレスを持つことを特徴とする請求項１４に記載の情報処理装置。 
【請求項１９】
前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定する前に、前記第２の記憶部から前記第１の関数を取得することを特徴とする請求項１４に記載の情報処理装置。 
【請求項２０】
前記第１の記憶部は揮発性であり、前記ホスト装置はアプリケーションプログラムを具備し、前記第１の論理アドレス領域からのデータの読み出しは、前記アプリケーションプログラムから前記第１の論理アドレス領域のデータを前記第２の記憶部に保存する命令を受信して実行されることを特徴とする請求項１４に記載の情報処理装置。 
【請求項２１】
リードとライトのうち少なくともリード可能な第１のメモリを有する第１の記憶部と、
リードおよびライト可能な不揮発性の第２のメモリと、論理アドレスと物理アドレスとを関連付ける管理テーブルと、受信した削除通知により指定された論理アドレスを無効にするように前記管理テーブルを書き換え、受信した読み出し命令に含まれる論理アドレスが無効である場合に、各論理アドレスに対して確定的なデータを指定する第１の関数で表されるデータをホスト装置に送信する制御部とを有する第２の記憶部と、
が接続可能なホスト装置であって、
前記第１の記憶部の第１の論理アドレス領域からデータを読み出し、
前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定し、
前記読み出しデータと前記第１の関数で表されるデータとが同じでない場合には、前記第２のメモリの第２の論理アドレス領域に前記読み出しデータを書き込み、
前記読み出しデータと前記第１の関数で表されるデータとが同じである場合には、前記第２のメモリに前記読み出しデータを書き込まずに、前記第２のメモリの前記第２の論理アドレス領域のデータを無効にするための削除通知を行う
ことを特徴とするホスト装置。 
【請求項２２】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する論理アドレスによらず同じデータが設定されることを特徴とする請求項２１に記載のホスト装置。 
【請求項２３】
前記第１の関数で表されるデータは、前記第２の記憶部が受信する少なくとも２以上の異なる論理アドレスに対して異なるデータが設定されることを特徴とする請求項２１に記載のホスト装置。 
【請求項２４】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、それぞれ異なる不揮発性記憶装置に含まれることを特徴とする請求項２１に記載のホスト装置。 
【請求項２５】
前記第１の記憶部は不揮発性であり、前記第１の記憶部と前記第２の記憶部とは、同一の不揮発性記憶装置に含まれ、
前記第１の論理アドレス領域と前記第２の論理アドレス領域が互いに重複しない論理アドレスを持つことを特徴とする請求項２１に記載のホスト装置。 
【請求項２６】
前記第１の論理アドレス領域からの読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定する前に、前記第２の記憶部から前記第１の関数を取得することを特徴とする請求項２１に記載のホスト装置。 
【請求項２７】
前記第１の記憶部は揮発性であり、前記ホスト装置はアプリケーションプログラムを具備し、前記第１の論理アドレス領域からのデータの読み出しは、前記アプリケーションプログラムから前記第１の論理アドレス領域のデータを前記第２の記憶部に保存する命令を受信して実行されることを特徴とする請求項２１に記載のホスト装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、第１のメモリのデータを不揮発性の第２のメモリにバックアップするための制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置に関する。
【背景技術】
【０００２】
オペレーティングシステム（ＯＳ）上において、不揮発性記憶装置(例えば、ハードディスク、ソリッドステートドライブ（ＳＳＤ）)上のファイルデータが削除される場合、ＯＳ上でのデータの管理情報が削除されるだけで、不揮発性記憶装置からは実際にはデータが削除されるわけではない。ＯＳ上でのデータ削除の度に不揮発性記憶装置上での削除処理が行われないので、削除処理が行われない分、動作パフォーマンスが向上する。この方式は特に、アクセスの遅いハードディスクドライブにおいて有効である。
【０００３】
一方、この方式では、ＯＳ上では削除したはずのデータが、不揮発性記憶装置上ではまだ有効なデータ（ホスト無効−デバイス有効データ）として認識されているため、不揮発性記憶装置上でデータの存在しない領域が、ＯＳが認識している空き領域よりも少なくなってしまう。特に、不揮発性記憶装置上での空き領域の枯渇は、論理アドレスと不揮発性記憶装置の物理アドレスが必ずしも一対一で対応しないＳＳＤにおいて大きな問題となる場合がある。
【０００４】
その問題としては、
・ＳＳＤの空き領域が枯渇している、すなわちＳＳＤコントローラに有効なデータを持っていないと認識されているＮＡＮＤフラッシュメモリの物理ブロック（フリーブロック）が枯渇している場合、そのＳＳＤにデータ書き込みを行うと、ＳＳＤコントローラに有効なデータを持っていると認識されているＮＡＮＤフラッシュメモリの物理ブロック（アクティブブロック）上の無効なデータ領域を検索し有効なデータを整理(ＮＡＮＤ整理)することで、新たなフリーブロックを確保する処理に負荷がかかり、書き込みのパフォーマンスが著しく劣化する、
・無効データが多くてＳＳＤ上での空き領域が枯渇している状況で書き込みが行われると、特定の領域に書き込みが集中したり、頻繁に発生するＮＡＮＤ整理によって余分なブロックの消去が発生したりして、ＳＳＤの信頼性が著しく劣化する、
などがある。
【０００５】
以上のような問題は、ホスト上でデータ削除が行われた場合に、ホストからＳＳＤにデータ削除通知を行うことで回避することができる。このデータ削除通知は、たとえば、ＩＮＣＩＴＳ  ＡＴＡ／ＡＴＡＰＩ  Ｃｏｍｍａｎｄ  Ｓｅｔ−２  （ＡＣＳ−２）に記述されているdata set management command (通称トリムコマンド) や、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)である。この方式では、ホスト上でデータが削除された場合、削除されたデータの存在する論理アドレス空間をホストがＳＳＤに通知することにより、以後ＳＳＤ上でもその領域を空き領域として扱う。これにより、トリムコマンドは、ホスト無効−デバイス有効データをホスト無効−デバイス無効データに変えることを実現し、ＳＳＤは新たに空き領域を確保することができる。
【０００６】
削除通知を処理する場合には、ＳＳＤはデータ管理領域にアクセスして該当領域を無効化する処理を行う。無効化処理では、ＳＳＤの管理情報を書き換えて該当領域を無効として認識させるようにすれば良く、実際に該当領域のデータそのものを消さなくてもよいし、消してもよい。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−１５７１３３号公報
【特許文献２】特開２０１０−１６１１９９号公報
【特許文献３】特開２０１１−２９５８６号公報
【特許文献４】特開２０１１−１２８９９８号公報
【特許文献５】米国公開特許公報２０１０／０２１７９２７号明細書
【特許文献６】特開２００９−２３０３８５号公報
【非特許文献】
【０００８】
【非特許文献１】ATA/ATAPI Command Set - 2 (ACS-2) d2015r6 Feb.22.2011 (http://www.t13.org/)      98頁〜99頁、50頁目：Data Set Management Command （トリムコマンド）      130頁〜171頁：ECh IDENTIFY DEVICEコマンド      342頁〜365頁：SCT Command Transport      217頁：25h READ DMA EXTコマンド      218頁：60h READ FPDMA QUEUEDコマンド      322頁：35h WRITE DMA EXTコマンド      324頁：61h WRITE FPDMA QUEUEDコマンド
【非特許文献２】Serial ATA International Organization: Serial ATA Revision 3.1 Gold Revision, Jul.18.2011, http://www.serialata.org/
【非特許文献３】PCI Express Base Specification Revision 3.0, Nov.10.2010, http://www.pcisig.com/
【非特許文献４】Serial ATA Technical Proposal: SATA31_TPR_C108 Title: Device Sleep, http://www.serialata.org/
【非特許文献５】喜連川優 編著、「よくわかるストレージネットワーキング」、第１版、株式会社オーム社、2011年5月20日、 p.6-9、p67-93
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の一つの実施形態は、第１のメモリから不揮発性の第２のメモリへのデータのバックアップを高速化し、バックアップ先の第２のメモリのフリーブロック数を増大させ、バックアップ先の第２のメモリの書き込み量を低減させる制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一つの実施形態によれば、第１の記憶部は、リードとライトのうち少なくともリード可能な第１のメモリを有する。第２の記憶部は、リードおよびライト可能な不揮発性の第２のメモリと、論理アドレスと物理アドレスとを関連付ける管理テーブルと、受信した削除通知により指定された論理アドレスを無効にするように前記管理テーブルを書き換え、受信した読み出し命令に含まれる論理アドレスが無効である場合に、第１の関数で表されるデータをホスト装置に送信する制御部とを有する。制御プログラムは、第１及び第２の記憶部が接続可能なホスト装置にロードされる。制御プログラムは、第１〜第４の制御部を備える。第１の制御部は、第１の記憶部の第１の論理アドレスに対応する領域からデータを読み出す。第２の制御部は、前記第１の論理アドレス領域に対応する読み出しデータが前記第１の関数で表されるデータと同じであるか否かを判定する。第３の制御部は、前記読み出しデータと前記第１の関数で表されるデータとが同じでない場合には、前記第２のメモリの第２の論理アドレス領域に前記読み出しデータを書き込む。第４の制御部は、前記読み出しデータと前記第１の関数で表されるデータとが同じである場合には、前記第２のメモリに前記読み出しデータを書き込まずに、前記第２のメモリの前記第２の論理アドレス領域のデータを無効にするための削除通知を行う。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図２】図２は、ＳＳＤの内部構成例を示す機能ブロック図である。
【図３】図３は、ＳＳＤの管理情報を示す図である。
【図４】図４は、ＳＳＤの書き込みの動作例を示すフローチャートである。
【図５】図５は、ＳＳＤのＮＡＮＤメモリの整理の動作例を示すフローチャートである。
【図６】図６は、ＳＳＤの削除通知を受信した際の動作例を示すフローチャートである。
【図７】図７は、ＳＳＤの読み出しの動作例を示すフローチャートである。
【図８】図８は、制御ツールをＳＳＤに保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図９】図９は、制御ツールをその他の外部記憶装置に保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図１０】図１０は、制御ツールをＷＥＢからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図１１】図１１は、制御ツールを光学ドライブからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図１２】図１２は、制御ツールをＵＳＢメモリからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図１３】図１３は、ホストの階層的機能構成例を示すブロック図である。
【図１４】図１４は、コンピュータシステムの外観的構成を示す図である。
【図１５】図１５は、コンピュータシステムの他の外観的構成を示す図である。
【図１６】図１６は、コンピュータシステムの外観的構成を示す図である。
【図１７】図１７は、コンピュータシステムの他の外観的構成を示す図である。
【図１８】図１８は、制御プログラムによるバックアップの第１の実施形態の動作手順を示すフローチャートである。
【図１９】図１９は、制御プログラムによるバックアップの第２の実施形態の動作手順を示すフローチャートである。
【図２０】図２０は、ＬＢＡとデータとの関係の一例を示す図である。
【図２１】図２１は、図２０のデータの場合の０-fillセクタの存在確率分布の一例を示す図である。
【図２２】図２２は、ＬＢＡとデータとの関係の他の例を示す図である。
【図２３】図２３は、図２２のデータの場合の０-fillセクタ、１-fillセクタの存在確率分布の一例を示す図である。
【図２４】図２４は、ＬＢＡとデータとの関係の他の例を示す図である。
【図２５】図２５は、図２４のデータの場合の０-fillセクタ、３２０ａ-fillセクタ、１-fillセクタの存在確率分布の一例を示す図である。
【図２６】図２６は、ＬＢＡとデータとの関係の他の例を示す図である。
【図２７】図２７は、図２６のデータの場合の、開放されるセクタを示す図である。
【図２８】図２８は、関数ｆ（ＬＢＡ）の決定方法を説明するための図である。
【図２９】図２９は、制御プログラムによるバックアップの第４の実施形態の動作手順を示すフローチャートである。
【図３０】図３０は、制御プログラムによるバックアップの第４の実施形態の他の動作手順を示すフローチャートである。
【図３１】図３１は、バックアップ先の不揮発性記憶装置としてネットワークストレージドライブまたはクラウドストレージが採用される場合を概念的に示す図である。
【図３２】図３２は、第６の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図３３】図３３は、ホストの階層的機能構成例を示すブロック図である。
【図３４】図３４は、制御プログラムによるバックアップの第６の実施形態の動作手順を示すフローチャートである。
【図３５】図３５は、ＯＳファイル管理テーブルを示す図である。
【図３６】図３６は、ホストの階層的機能構成上でのデータの書き込みの流れを示す図である。
【図３７】図３７は、ホストの階層的機能構成上でのデータの書き込みの他の流れを示す図である。
【図３８】図３８は、ネットワーク使用する第７の実施形態のコンピュータシステムの一例を示すブロック図である。
【図３９】図３９は、ネットワーク使用する第７の実施形態のコンピュータシステムの他の例を示すブロック図である。
【図４０】図４０は、ネットワーク使用する第７の実施形態のコンピュータシステムの他の例を示すブロック図である。
【図４１】図４１は、ネットワーク使用する第７の実施形態のコンピュータシステムの他の例を示すブロック図である。
【図４２】図４２は、制御プログラムによるバックアップの第７の実施形態の動作手順を示すフローチャートである。
【図４３】図４３は、ネットワーク使用する第８の実施形態のコンピュータシステムの他の例を示すブロック図である。
【図４４】図４４は、ネットワーク使用する第８の実施形態のコンピュータシステムの他の例を示すブロック図である。
【図４５】図４５は、ネットワーク使用する第９の実施形態のコンピュータシステムの一例を示すブロック図である。
【図４６】図４６は、第９の実施形態で使用するメタデータの一例を示す図である。
【図４７】図４７は、制御プログラムによるバックアップの第９の実施形態の動作手順を示すフローチャートである。
【図４８】図４８は、ファイルＩＤリストのデータ構造を示す図である。
【図４９】図４９は、第１０の実施形態におけるシステム構成を示す図である。
【発明を実施するための形態】
【００１２】
本実施形態では、トリムコマンドをバックアップ動作に取り込むことで、ホスト有効−デバイス有効データをホスト有効−デバイス無効データとして処理し、これによりＳＳＤのデータのバックアップを高速化し、バックアップ先のＳＳＤのフリーブロック数を増大させ、バックアップ先のＳＳＤの書き込み量を低減させることを実現する。
【００１３】
まず、本明細書中で使用する用語について説明する。
・ホスト無効−デバイス有効データ（"host-invalid and device-valid data"）：ホスト(ＯＳ)にとって無効だがdevice(不揮発性記憶装置)には有効なデータ
・ホスト有効−デバイス有効データ（"host-valid and device-valid data"）：ホストにとっても不揮発性記憶装置にとっても有効なデータ
・ホスト有効−デバイス無効データ（"host-valid and device-invalid data"）：ホストにとって有効だが不揮発性記憶装置には無効なデータ
・ホスト無効−デバイス無効データ（"host-invalid and device-invalid data"）：ホストにとっても不揮発性記憶装置にとっても無効なデータ
・ホスト有効データ（"host-valid data"）：少なくともホストにとっては有効なデータ
・ホスト無効データ（"host-invalid data"）：少なくともホストにとっては無効なデータ
・デバイス有効データ（"device-valid data"）：少なくとも不揮発性記憶装置にとっては有効なデータ
・デバイス無効データ（"device-invalid data”）：少なくとも不揮発性記憶装置にとっては無効なデータ
【００１４】
以下に添付図面を参照して、実施形態にかかる制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１５】
（第１の実施形態）
図１に情報処理装置の一例であるコンピュータシステム１の第１の実施形態の構成を示す。本コンピュータシステム１は、記憶装置２Ａと、ホスト装置３と、不揮発性記憶装置２Ａとホスト装置３とを結ぶメモリインタフェース１９Ａと、記憶装置２Ａのバックアップ用の不揮発性記憶装置２Ｂが取り付け可能なメモリインタフェース１９Ｂから構成されている。本実施形態では、記憶装置２Ａは不揮発性記憶装置２Ａとし、不揮発性記憶装置２Ａ、２Ｂとして、ＳＳＤ（Solid State Drive）を用いるが、たとえば、ハードディスクドライブ、ハイブリッドディスクドライブ、ＳＤカード、ＵＳＢメモリ、ＮＡＮＤ型フラッシュメモリ、ReRAM (Resistance Random Access Memory)、磁気テープなど、他の不揮発性記憶装置であってもよい。また、不揮発性記憶装置２Ａと不揮発性記憶装置２Ｂは異なる種類の不揮発性記憶装置であってもよいが、不揮発性記憶装置２Ｂのアクセス可能な論理アドレスであるＬＢＡ（Logical Block Addressing）の最大値（LBA Count）は不揮発性記憶装置２ＡのLBA Countと等しいか、あるいは不揮発性記憶装置２ＡのLBA Countよりも大きいことが望ましい。また、記憶装置２Ａとして、不揮発性記憶装置ではなく、揮発性記憶装置であるDRAM (Dynamic Random Access Memory)やSRAM (Static Random Access Memory)を用いてもよい。また、記憶装置２Ａは、書き込みと読み出しのうち読み出しのみ可能な記憶装置であってもよい。
【００１６】
また、本実施形態では、インタフェース１９Ａ、１９Ｂとして、ＳＡＴＡ（Serial Advanced Technology Attachment）インタフェースを用いるが、ＵＳＢ（Universal Serial Bus）やＳＡＳ（Serial Attached SCSI）やThunderbolt（登録商標）やPCI ExpressやＬＡＮ（Local Area Network）やファイバーチャネルやイーサネット（登録商標）など他のインタフェースであってもよい。インタフェース１９Ａおよびインタフェース１９Ｂは異なる種類のインタフェースであってもよい。たとえば、インタフェース１９ＡがＳＡＴＡインタフェースであって、インタフェース１９ＢがＵＳＢインタフェースであってもよい。
【００１７】
また、バックアップ先の不揮発性記憶装置２Ｂは、ネットワークドライブやクラウドストレージのような、ネットワークを介してホスト装置３に取り付けられることで、物理的にはホスト装置３と離れた場所に設置されていてもよい。本実施形態では、一例として、インタフェース１９ＢにＳＡＴＡインタフェースが採用された場合の例を示す。
【００１８】
ＣＰＵ（制御回路）４がホスト装置３における中央演算処理装置であり、ホスト装置３における種々の演算及び制御はＣＰＵ４によって行われる。ＣＰＵ４はサウスブリッジ７を介して不揮発性記憶装置２Ａ，２Ｂや、ＤＶＤ−ＲＯＭなどの光学ドライブ１０の制御を行う。ＣＰＵ４は、ノースブリッジ５を介して、主メモリ６の制御を行う。主メモリ６としては、たとえばＤＲＡＭを採用してよい。
【００１９】
ユーザは、キーボード１４やマウス１５などの入力装置を通してホスト装置３の制御を行い、キーボード１４やマウス１５からの信号は、ＵＳＢ（Universal Serial Bus）コントローラ１３及びサウスブリッジ７を介してＣＰＵ４で処理される。ＣＰＵ４は、ノースブリッジ５及び表示コントローラ８を介してディスプレイ（表示装置）９に画像データやテキストデータなどを送る。ユーザは、ディスプレイ９を介してホスト装置３からの画像データやテキストデータなどを視認することができる。
【００２０】
ＣＰＵ４は、コンピュータシステム１の動作を制御するために設けられたプロセッサであり、不揮発性記憶装置２Ａから主メモリ６にロードされるオペレーティングシステム（ＯＳ）１００を実行する。更に、光学ドライブ１０が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ４は、それらの処理を実行する。また、ＣＰＵ４は、ＢＩＯＳ（Basic Input/Output System）−ＲＯＭ１１に格納されたシステムＢＩＯＳも実行する。尚、システムＢＩＯＳは、コンピュータシステム１内のハードウェア制御のためのプログラムである。ＲＯＭ１１には、システムＢＩＯＳの代わりに、ＵＥＦＩ（Unified Extensible Firmware Interface）ファームウェアが格納され、ＣＰＵ４に実行されてもよい。その他、ＣＰＵ４は、サウスブリッジ７を介してＬＡＮ（Local Area Network）コントローラ１２を制御する。
【００２１】
ノースブリッジ５は、ＣＰＵ４のローカルバスと接続するブリッジデバイスである。ノースブリッジ５には、主メモリ６をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ５は、表示コントローラ８との通信などを実行する機能も有している。
【００２２】
主メモリ６は、プログラムやデータを一時的に記憶し、ＣＰＵ４の作業用メモリとして機能する。主メモリ６として、たとえばＤＲＡＭ(Dynamic Random Access Memory)やＭＲＡＭ(Magnetoresistive Random Access Memory)やＲｅＲＡＭ(Resistance Random Access Memory)やＳＲＡＭ(Static Random Access Memory)が使用される。主メモリ６は、ＯＳ１００を格納する記憶領域６Ａと、制御ツール（制御プログラム）２００を格納する記憶領域６Ｂを含んでいる。ＯＳ１００は、一般的に知られているように、ホスト装置３の入出力装置を管理し、ディスクやメモリを管理し、ソフトウェアがホスト装置３のハードウェアを利用可能にするための制御を行うなど、ホスト装置３全体を管理するプログラムである。制御プログラム２００は、不揮発性記憶装置２Ａから不揮発性記憶装置２Ｂに対するデータバックアップ機能を有するプログラムである。本実施形態では、ＯＳ１００と制御プログラム２００を区別しているが、制御プログラム２００はＯＳ１００の一部であってもよい。
【００２３】
表示コントローラ８は、コンピュータシステム１のディスプレイ９を制御するビデオ再生コントローラである。サウスブリッジ７は、ＣＰＵ４のローカルバスと接続するブリッジデバイスである。サウスブリッジ７は、各種ソフトウェア及びデータを格納する記憶装置である不揮発性記憶装置２Ａを、ＳＡＴＡインタフェース１９Ａを介して制御する。不揮発性記憶装置２Ａは、サウスブリッジ７を経由せずにＣＰＵ４に直接接続されてもよい。
【００２４】
コンピュータシステム１では、ＬＢＡの最小単位である論理セクタ単位で不揮発性記憶装置２Ａおよび不揮発性記憶装置２Ｂへのアクセスを行う。例えば、ＳＡＴＡインタフェース１９Ａ、１９Ｂを介して、ライトコマンド（ライト要求）、リードコマンド（リード要求）、フラッシュコマンド等が不揮発性記憶装置２Ａ、不揮発性記憶装置２Ｂに出力される。
【００２５】
また、サウスブリッジ７は、ＢＩＯＳ−ＲＯＭ１１、光学ドライブ１０、ＬＡＮコントローラ１２、ＵＳＢコントローラ１３をアクセス制御するための機能も有している。ＵＳＢコントローラ１３にキーボード１４、マウス１５が接続されている。
［ＳＳＤ］
【００２６】
図２に、バックアップ先である不揮発性記憶装置２Ｂのブロック図を示す。本実施形態では、不揮発性記憶装置２Ｂとしてソリッドステートドライブ（ＳＳＤ）を採用した例について説明する。バックアップ元である不揮発性記憶装置２Ａもこれと同様の構成であってもよいが、バックアップ元である不揮発性記憶装置２Ａ自体にはトリムコマンドは送信されないため、不揮発性記憶装置２Ａがトリムコマンドをサポートしていないなどここに示す要件を満たしていなくても本発明は適用可能である。本実施形態では、不揮発性記憶装置２Ｂは、不揮発性半導体メモリとしてのＮＡＮＤ型フラッシュメモリ（以下ＮＡＮＤメモリと略す）１６Ｂと、ＳＡＴＡインタフェース１９Ｂを介してホスト装置３との信号の送受信を行うインタフェースコントローラ（ＩＦＣ）４２Ｂと、ＮＡＮＤメモリ１６Ｂの物理アドレスとＬＢＡとの論物変換テーブルを含む管理情報４２ＢおよびＩＦＣ４２ＢとＮＡＮＤメモリ１６Ｂとの中間バッファとして機能するキャシュメモリ（ＣＭ）４４Ｂを有する半導体メモリとしてのＲＡＭ（Random Access Memory）４０Ｂと、ＮＡＮＤメモリ１６Ｂ及びＲＡＭ４０Ｂの管理、制御、及びＩＦＣ４２Ｂの制御を司るＳＳＤコントローラ（ＳＳＤＣ）４１Ｂと、これら構成要素を接続するバス４３Ｂを備える。
【００２７】
ＲＡＭ４０Ｂとしては、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＰＲＡＭ（Phase Change Random Access Memory）、ＲｅＲＡＭ（Resistance Random Access Memory）などを採用することができる。ＲＡＭ４０ＢはＳＳＤＣ４１Ｂに含まれてもよい。
【００２８】
ＮＡＮＤメモリ１６Ｂは、ホスト装置３によって指定されたユーザデータを記憶したり、管理情報４２Ｂをバックアップ用に記憶したりする。ＮＡＮＤメモリ１６Ｂは、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。ＮＡＮＤメモリ１６Ｂは、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、ＮＡＮＤメモリ１６Ｂでは、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。
【００２９】
ＲＡＭ４０Ｂは、ホスト装置３とＮＡＮＤメモリ１６間でのデータ転送用キャッシュとして機能するキャッシュメモリ（ＣＭ）４４Ｂを有する。また、ＲＡＭ４０は、管理情報４２Ｂの記憶用メモリ及びその他作業領域用メモリとして機能する。管理情報４２Ｂは、ＮＡＮＤメモリ１６Ｂの領域４５Ｂに記憶されている各種管理テーブルが不揮発性記憶装置２Ｂの起動時などに展開されたものであり、定期的あるいは電源断時にＮＡＮＤメモリ１６Ｂの領域４５Ｂに退避保存される。
【００３０】
図３に示すように、管理テーブル４２Ｂは、フリーブロックテーブル、アクティブブロックテーブル、及びアクティブページテーブルを含む。物理ブロックＩＤ及び物理ページアドレスは物理アドレスに含まれる。アクティブブロックテーブルは、物理ブロックＩＤと論理アドレス（ＬＢＡ）とを結び付ける管理を行い、アクティブブロックテーブルに登録されている物理ブロック（アクティブブロック）は、少なくともＳＳＤＣ４１Ｂにとっては有効なデータを保持していることになる。フリーブロックテーブルは、ＬＢＡに結び付けられていない物理ブロックを管理している。フリーブロックテーブルに登録されている物理ブロック（フリーブロック）は、ＬＢＡに結び付けられていないため、有効なデータを保持していないことになる。
【００３１】
アクティブページテーブルは、物理ページアドレスとＬＢＡとを結び付ける管理を行い、アクティブページテーブルに登録されている物理ページ（アクティブページ）は、少なくともＳＳＤＣ４１Ｂにとっては有効なデータを保持していることになる。また、アクティブページテーブルに登録されている物理ページは、これが属する物理ブロックＩＤ（物理ブロックアドレス）と関連付けられている。なお、管理テーブルで管理されているＬＢＡは、不揮発性記憶装置２Ｂで管理できる最小データサイズ又はそれより大きいデータサイズのアドレスであることが望ましい。管理テーブル４２Ｂのデータサイズを低減するために、アクティブブロックテーブルやアクティブページテーブルで保存される論理アドレスとしてＬＢＡを所定ビット分だけ右シフト演算したアドレスを用いてもよい。
【００３２】
不揮発性記憶装置２ＢのコントローラであるＳＳＤＣ４１Ｂは、ＮＡＮＤメモリ１６Ｂに記憶されたシステムプログラム（ファームウエア）を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト装置３からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト装置３−ＮＡＮＤメモリ１６Ｂ間のデータ転送制御、ＲＡＭ４０Ｂ及びＮＡＮＤメモリ１６Ｂに記憶された各種管理テーブルの更新・管理、ＮＡＮＤメモリ１６Ｂに書き込むデータのＥＣＣ符号化、ＮＡＮＤメモリ１６Ｂから読み出したデータのＥＣＣ復号化などを実行する。
【００３３】
ホスト装置３は不揮発性記憶装置２Ｂに対し、リード要求またはライト要求を発行する際には、ＡＴＡインタフェース１９Ｂを介して論理アドレスとしてのＬＢＡを入力する。また、ホスト装置３は不揮発性記憶装置２Ｂに対し、リード要求またはライト要求を発行する際には、ＬＢＡと併せて、リード要求またはライト要求の対象となるセクタサイズを入力する。
【００３４】
ＩＦＣ４２Ｂは、ホスト装置３からのリード要求、ライト要求、その他要求及びデータを受信し、受信した要求やデータをＳＳＤＣ４１Ｂに送信したり、ＳＳＤＣ４１Ｂの制御によりＲＡＭ４０Ｂにデータを送信したりする機能を持つ。
【００３５】
＜書き込み動作＞
図４は、バックアップ先である不揮発性記憶装置２Ｂの書き込み動作を示すフローチャートである。不揮発性記憶装置２Ｂは、ホスト装置３から書き込み命令を受信する（ステップＳ１００）。書き込み命令には、書き込みコマンド、ＬＢＡ、及びデータが含まれる。
【００３６】
続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂからフリーブロックテーブルを読み出し（ステップＳ１１０）、フリーブロックテーブルから物理ブロックＩＤを取得する。フリーブロックが存在しない場合は、後述するＮＡＮＤ整理を行い、物理ブロックＩＤを取得する（ステップＳ１２０、Ｓ１３０）。
【００３７】
続いて、ＳＳＤＣ４１Ｂは、取得した物理ブロックＩＤに対応するフリーブロックに対してプログラム処理（書き込み処理）を行う（ステップＳ１４０）。続いて、ＳＳＤＣ４１Ｂは、プログラムされた物理ブロックＩＤをフリーブロックテーブルから削除する（ステップＳ１５０）。続いて、ＳＳＤＣ４１Ｂは、アクティブブロックテーブル及びアクティブページテーブルを更新する（ステップＳ１６０）。すなわち、プログラムされたブロックに対応するＬＢＡ及び物理ブロックＩＤをアクティブブロックテーブルに追加し、さらに、ＬＢＡ、物理ブロックＩＤ及び物理ページアドレスをアクティブページテーブルに追加する。なお、ステップＳ１４０のプログラム処理の前に、書き込み対象の物理ブロックに対して消去を行ってもよい。
【００３８】
＜ＮＡＮＤ整理＞
次に、不揮発性記憶装置２ＢのＮＡＮＤ整理処理（garbage collection, GC）について説明する。図５は、不揮発性記憶装置２ＢのＮＡＮＤ整理処理を示すフローチャートである。物理ブロックに含まれる全ページのうちアクティブページテーブルに登録されているアクティブページ（有効ページ）はＬＢＡに対応付けられている。一方、物理ブロックに含まれる全ページが有効ページであるとは限らず、有効ページに該当しないページ（無効ページ）はＬＢＡに対応付けられていない。物理ブロックは無効ページの分だけデータに空きがあることになり、これら無効ページと有効ページとを分類することでフリーブロックを確保することができる。
【００３９】
まず、ＳＳＤＣ４１Ｂは、列番号ｉ＝０、空き領域累積量ｓ＝０に設定する（ステップＳ２００）。続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂからアクティブブロックテーブルの先頭行を読み出し、物理ブロックＩＤを取得する（ステップＳ２１０）。ステップＳ２１０にて取得した物理ブロックＩＤを現在物理ブロックＩＤと呼ぶ。続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂからアクティブページテーブルを読み出し、現在物理ブロックＩＤに含まれる全物理ページアドレスを取得する（ステップＳ２２０）。
【００４０】
続いて、ＳＳＤＣ４１Ｂは、現在物理ブロックのうち無効ページのサイズを算出し、この無効ページサイズを変数ｖに代入する（ステップＳ２３０）。続いて、ＳＳＤＣ４１Ｂは、ｖ＞０であるか否かを判定し（ステップＳ２３５）、ｖ＞０である場合は、現在物理ブロックＩＤを整理対象ブロックリストに追加する（ステップＳ２４０）。一方、ステップＳ２３５において、無効ページがないと判定された場合（ステップＳ２３５：Ｎｏ）、ＳＳＤＣ４１Ｂは、現在物理ブロックＩＤをインクリメントして、作業対象を次の物理ブロックＩＤに移す（ステップＳ２４５）。
【００４１】
続いて、ＳＳＤＣ４１Ｂは、空き領域累積量ｓに変数ｖを加算する（ステップＳ２５０）。続いて、ＳＳＤＣ４１Ｂは、空き領域累積量ｓが物理ブロックサイズに到達したか否か、すなわちこれまでに取得した無効ページのサイズ総量が物理ブロックサイズに到達したか否かを判定する（ステップＳ２５５）。空き領域累積量ｓが物理ブロックサイズに到達してない場合、列番号ｉに１を加算した後（ステップＳ２４５）、ステップＳ２１０以下の処理を繰り返す。
【００４２】
一方、空き領域累積量ｓが物理ブロックサイズに到達した場合、ＳＳＤＣ４１Ｂは、整理対象ブロックリストの全物理ブロックから全アクティブページのデータを読み出し、この読み出したデータをＤＲＡＭ４０Ｂに格納する（ステップＳ２６０）。続いて、ＳＳＤＣ４１Ｂは、整理対象ブロックリストの全物理ブロックに対して消去処理を行う（ステップＳ２６５）。続いて、ＳＳＤＣ４１Ｂは、アクティブブロックテーブル、フリーブロックテーブル、及びアクティブページテーブルを更新する（ステップＳ２７０）。すなわち、消去処理が行われた物理ブロックをアクティブブロックテーブルから削除してフリーブロックテーブルに追加し、また、データが読み出されたアクティブページをアクティブページテーブルから削除する。
【００４３】
続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂに格納された全アクティブページのデータをフリーブロックに書き込む（ステップＳ２８０）。続いて、ＳＳＤＣ４１Ｂは、アクティブブロックテーブル、フリーブロックテーブル、及びアクティブページテーブルを更新する（ステップＳ２９０）。すなわち、プログラムされた物理ブロックをフリーブロックテーブルから削除してアクティブブロックテーブルに追加し、また、プログラムされた物理ページをアクティブページテーブルに追加する。
【００４４】
このように、ＮＡＮＤ整理はＮＡＮＤメモリ１６Ｂの読み出し動作、消去動作、及びプログラム動作を多数伴うため、多くの時間を要する。よって、フリーブロックが枯渇した状況で不揮発性記憶装置２Ｂへの書き込みを行うとＮＡＮＤ整理が発生するため、ホスト装置３からみた書き込み処理速度が低下し、かつＮＡＮＤメモリ１６Ｂの信頼性が低下する可能性がある。なお、ステップＳ２６５の消去処理は、図４のステップＳ１３０のＮＡＮＤ整理内では行わずに、ステップＳ１４０の書き込み動作直前に行うようにしてもよい。
【００４５】
＜削除通知処理＞
次に、不揮発性記憶装置２Ｂの削除通知処理について説明する。削除通知のためのコマンドとして、たとえば、ＩＮＣＩＴＳ  ＡＴＡ／ＡＴＡＰＩ  Ｃｏｍｍａｎｄ  Ｓｅｔ−２  （ＡＣＳ−２）で記述されているＤａｔａ  Ｓｅｔ  Ｍａｎａｇｅｍｅｎｔ  Ｃｏｍｍａｎｄ(通称トリム（ＴＲＩＭ）コマンド)があげられる。削除通知処理は、ＯＳ１００上でデータが削除された場合、ＬＢＡおよび論理セクタ数に関するデータ（ＬＢＡ  Ｒａｎｇｅ  Ｅｎｔｒｙ）を不揮発性記憶装置に通知することにより、以後不揮発性記憶装置２Ｂ上でＬＢＡから論理セクタ数分のＬＢＡ領域を空き領域として扱うことができる方式である。削除通知により、不揮発性記憶装置２Ｂはフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、Ｄａｔａ  Ｓｅｔ  Ｍａｎａｇｅｍｅｎｔ  Ｃｏｍｍａｎｄだけでなく、たとえばＡＣＳ２記載のＳＣＴコマンドを用いたベンダー独自のコマンドなどその他コマンドによって実現してもよい。また、インタフェース１９ＢにＳＡＴＡインタフェース以外のインタフェースを用いている場合、トリムコマンドとしてそのインタフェース固有の削除通知処理用コマンドを用いてもよい。また、トリムコマンドとして、NVM Express Revision 1.1 October 11, 2012 (http://www.nvmexpress.org/)に記述されている11h Dataset Management commandのDeallocate(AD)を用いてもよい。たとえば、不揮発性記憶装置２Ｂが後述のDeterministic Zeroing TRIM機能を保有している場合、トリムコマンドの機能は、前記コマンドだけでなく、NVM Express Revision 1.1に記載されている08h Write Zeroesコマンドによって実現されてもよい。また、トリムコマンドとして、SCSI Block Commands-3 (SBC-3), Revision 35, Dec.07.2012(http://www.t10.org/)に記述されている42h UNMAP commandを用いてもよい。なお、本実施形態では、データの削除の場合だけでなく、データをバックアップおよびコピーする場合にトリムコマンドを用いる。
【００４６】
図６は、不揮発性記憶装置２Ｂの削除通知処理を示すフローチャートである。不揮発性記憶装置２Ｂは、ホスト装置３から削除通知を受信する（ステップＳ３００）。削除通知には、削除コマンド、ＬＢＡ及びセクタサイズが含まれる。続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂからアクティブページテーブルを読み出す（ステップＳ３１０）。続いて、ＳＳＤＣ４１Ｂは、削除通知によって指定された削除対象となるＬＢＡ領域に対応する全ページのうち、ページ内全領域が削除通知対象である全ページをアクティブページテーブルから削除する（ステップＳ３２０）。これにより、削除通知対象のページはデバイス有効データからデバイス無効データとなる。
【００４７】
続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂからアクティブブロックテーブルを読み出す（ステップＳ３３０）。続いて、ＳＳＤＣ４１Ｂは、アクティブブロックテーブルを参照し、アクティブページテーブルに物理ブロックＩＤを持たない物理ブロックをアクティブブロックテーブルから削除しフリーブロックテーブルに追加する（ステップＳ３４０）。
【００４８】
このように、不揮発性記憶装置２Ｂは、削除通知処理対象のＬＢＡに対応付けられたＮＡＮＤ領域上のデータをデバイス有効データからデバイス無効データに変えることで、ＮＡＮＤ整理以外の方法により、削除通知処理によってもフリーブロックを確保することができる。なお、ホスト装置３が削除通知を行うデータサイズは、不揮発性記憶装置２Ｂが管理テーブルで管理している最小データサイズ以上であってもよい。
【００４９】
上記のように、削除通知を受信した不揮発性記憶装置は、フリーブロックを新たに確保することができる。このようにして、削除通知により指定されたデバイス有効データはデバイス無効データとなる。ホスト装置３からＳＳＤに対する削除通知命令は管理情報の書き換えしか伴わないため、管理情報の書き換えおよびＮＡＮＤメモリに対するユーザデータの書き込みが伴うホスト装置３からＳＳＤに対する書き込み命令に比べて高速処理される。
【００５０】
＜読み出し動作＞
次に、バックアップ先である不揮発性記憶装置２Ｂの読み出し動作について説明する。図７は、不揮発性記憶装置２Ｂの読み出し動作を示すフローチャートである。バックアップ元の不揮発性記憶装置２Ａのデータをバックアップ後に、ホスト装置３がバックアップ先である不揮発性記憶装置２Ｂからバックアップデータを読みだす場合がある。その場合不揮発性記憶装置２Ｂはホスト装置３から読み出し命令を受信する（ステップＳ４００）。読み出し命令には、読み出しコマンド、及びＬＢＡが含まれる。
【００５１】
続いて、ＳＳＤＣ４１Ｂは、ＤＲＡＭ４０Ｂからアクティブブロックテーブルを読み出す（ステップＳ４１０）。続いて、ＳＳＤＣ４１Ｂは、ホスト装置３から受信したＬＢＡに対応する物理ブロックＩＤを参照する（ステップＳ４２０）。アクティブブロックテーブルに物理ブロックＩＤが存在する場合、ＳＳＤＣ４１Ｂは、以後、既書き込み領域読み出し処理を行う。すなわち、ＳＳＤＣ４１Ｂは、アクティブページテーブルを読み出し（ステップＳ４３０）、このアクティブページテーブルを参照して、ＮＡＮＤメモリ１６Ｂの該当ページを読み出す（ステップＳ４４０）。そして、ＳＳＤＣ４１Ｂは、読み出したデータをホスト装置３に送信する（ステップＳ４５０）。
【００５２】
一方、ホスト装置３から受信したＬＢＡに対応する物理ブロックＩＤがアクティブブロックテーブルに存在しない場合、ＳＳＤＣ４１Ｂは、以後、未書き込み領域読み出し処理を行う。すなわち、ＳＳＤＣ４１Ｂは、ＮＡＮＤメモリ１６Ｂの読み出し処理を行わず、関数ｆで表されたデータをホスト装置３からの要求に対応するデータ長分ホスト装置３に送信する（ステップＳ４６０）。具体的には、関数ｆで表されたデータは、アドレスＡｉ、データＤｉとすると、
ｆ（Ａｉ）＝Ｄｉ（ｉは０以上の整数）
を満たす。関数ｆは、自由に設定することが可能であり、その一例として、たとえば、ＬＢＡを変数として、
ｆ（ＬＢＡ）＝０
と設定した場合、ＳＳＤＣ４１Ｂは、ホスト装置３からの要求に対応するデータ長分の“０”で埋め尽くされたデータをホスト装置３に送信することになる。関数ｆはＳＳＤＣ４１Ｂに格納されてもよいし、ＮＡＮＤメモリ１６Ｂ内に格納されてもよいし、ＲＡＭ４０Ｂ内に格納されても良い。未書き込み領域読み出しを高速に行うという観点では、関数ｆは、ＳＳＤＣ４１ＢまたはＲＡＭ４０Ｂ内に格納されるか、不揮発性記憶装置２Ｂの電源ＯＦＦ時にはＮＡＮＤメモリ１６Ｂ内に格納しておき不揮発性記憶装置２Ｂ起動時にＲＡＭ４０Ｂに読み出されることが望ましい。
【００５３】
未書き込み領域読み出し動作においては、ＮＡＮＤメモリ１６Ｂの読み出し処理が伴わないか、あるいはＮＡＮＤメモリ１６Ｂの読み出し量が大幅に低減する。このため、アクティブページテーブルの読み出し処理及びＮＡＮＤメモリ１６Ｂの読み出し処理が伴う既書き込み領域読み出し動作に比べ、未書き込み領域読み出し動作は高速に行われる。
【００５４】
このように、ホスト装置３によって、バックアップ先である不揮発性記憶装置２Ｂの、デバイス無効データを含むＬＢＡ領域に対する読み出しが行われたとき、不揮発性記憶装置２ＢのＮＡＮＤメモリ１６Ｂの読み出し動作を行われなくてもよく、デバイス無効データの読み出し動作はデバイス有効データの読み出し動作に比べて高速に行われる。デバイス無効データからなるＬＢＡ領域が読み出されたときに不揮発性記憶装置２Ｂからホスト装置３に読み出されるデータは任意のデータで良いが、本実施形態では、少なくとも各ＬＢＡに対して確定的な（deterministicな）データである必要がある。また、バックアップされるデータをより正確に確定するという観点では、不揮発性記憶装置２Ｂは起動時またはホスト装置３との接続時に、不揮発性記憶装置２Ｂのデバイス無効データの値が確定的であることをホスト装置３に通知することが望ましい。たとえば非特許文献のACS-2に記述されているようにIDENTIFY DEVICE data word 169のbit14が１になっていることで、不揮発性記憶装置２Ｂはデバイス無効データの値が確定的であることを前もってホスト装置３に通知することができる。このような、少なくとも各ＬＢＡに対して確定的な（deterministicな）データを、本発明では関数ｆ(LBA)を用いて
データ＝ｆ(LBA)
と表す。
【００５５】
特に、ｆ(LBA)=０であるときは、IDENTIFY DEVICE data word 169のbit5が１になっていることが望ましく、それにより不揮発性記憶装置２Ｂはデバイス無効データの読み出し値が０の固定値であること（不揮発性記憶装置２ＢがDeterministic Zeroing TRIM機能を保有していること）を前もってホスト装置３に通知することができる。ｆ(LBA)=０である場合で、特に論理セクタサイズが５１２バイトである場合は、関数ｆは、ｆ(LBA)=00000…0のような0で埋め尽くされた（0-fill）５１２バイト長のデータとなる。
【００５６】
［制御プログラムの格納方法］
つぎに、ホスト装置３上で動作する制御プログラム（制御ツール）２００の格納方法について説明する。例えば、制御ツール２００は、図８に示すように、ホスト装置３が電源オフになっているときはバックアップ元である不揮発性記憶装置２ＡのＮＡＮＤメモリ１６Ａに格納されているが、ホスト３の起動時またはプログラム起動時に、ＮＡＮＤメモリ１６から主メモリ６上の領域６Ｂにロードされる。一方、ホスト装置３に不揮発性記憶装置２Ａおよび不揮発性記憶装置２Ｂとは別の不揮発性記憶装置２０が接続されている場合は、図９に示すように、制御プログラム２００は、不揮発性記憶装置２０の領域２０Ｂに格納されており、ホスト装置３の起動時またはプログラム起動時に、領域２０Ｂから領域６Ｂにロードされるようにしてもよい。特に、不揮発性記憶装置２０がＯＳを格納するシステムドライブとして使用されており、不揮発性記憶装置２Ａが文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ２０にはＯＳやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ２Ａにはユーザデータを格納するドライブとして使用するというように、ドライブ２Ａとドライブ２０の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置２０に制御プログラムを格納することが望ましい。あるいは制御プログラム２００を格納するドライブ２０としてＵＳＢメモリを採用すると、通常利用時はＵＳＢメモリをホスト装置３から切り離しておき、不揮発性記憶装置２Ａをバックアップする時などの制御プログラム２００を使用するときにのみ、ＵＳＢメモリをホスト装置３に接続するようにしてもよい。また制御プログラムを、バックアップ先である不揮発性記憶装置２Ｂに格納しておいてもよい。
【００５７】
制御プログラムのセットアップをユーザが行う労力を省く観点では、例えば図８や図９に示したように、制御プログラムが不揮発性記憶装置２Ａや不揮発性記憶装置２０に格納された状態（プリインストール状態）でコンピュータシステム１が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザが制御プログラムのインストールの可否を選択できるようにする観点、およびユーザに最新の制御プログラムを提供できるようにするという観点では、制御プログラム２００は、ＷＥＢからのダウンロード、またはＤＶＤ−ＲＯＭやＵＳＢメモリなど外部記憶媒体からのインストールにより不揮発性記憶装置２Ａや不揮発性記憶装置２０に格納できるようにすることが望ましい。
【００５８】
図１０はＷＥＢからのダウンロードの一例である。制御プログラム２００はＷＥＢサーバー２１内の記憶媒体２２の領域２２Ｂに格納されており、制御プログラム２００はインターネットやローカルネットワークや無線ＬＡＮなどのネットワークを介して、たとえばＬＡＮコントローラ１２やＵＳＢコントローラ１２に接続されたネットワーク機器を経由してＮＡＮＤメモリ１６Ｂにダウンロード（またはインストール）される。図９の場合は、制御ツール２００は、不揮発性記憶装置２０上の領域２０Ｂにダウンロードまたはインストールされる。
【００５９】
図１１はＤＶＤ−ＲＯＭやＣＤ−ＲＯＭなど光学メディアからのインストールの一例である。制御ツール２００はＤＶＤ−ＲＯＭやＣＤ−ＲＯＭなどの光学メディア２３の領域２３Ｂに格納されており、光学メディア２３が光学ドライブ１０にセットされることで、制御ツール２００は光学ドライブ１０を介して不揮発性記憶装置２ＡのＮＡＮＤメモリ１６Ａ上にインストールされる。図１２はＵＳＢメモリ２４からのインストールの一例である。制御ツール２００はＵＳＢメモリ２４の領域２４Ｂに格納されており、ＵＳＢメモリ２４がＵＳＢコントローラ１３に接続されることで、制御ツール２００はＵＳＢコントローラ１３を介して不揮発性記憶装置２ＡのＮＡＮＤメモリ１６Ａ上にインストールされる。ＵＳＢメモリ２４のかわりに、ＳＤカードなどその他外部メモリを採用してもよい。ユーザによる入手容易性の観点から、光学メディア２３やＵＳＢメモリ２４は、ＳＳＤ２の出荷時に、付属品としてＳＳＤ２と一緒に梱包されて販売されることが望ましい。一方、光学メディア２３やＵＳＢメモリ２４はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【００６０】
図１３に、コンピュータシステム１のソフトウェアレベルでの階層構造を示す。制御プログラム２００など主メモリ６上にロードされた各種ソフトウェアは、通常は不揮発性記憶装置２Ａ、不揮発性記憶装置２Ｂと直接通信せずに、主メモリ６にロードされたＯＳ１００を経由して不揮発性記憶装置２Ａ、不揮発性記憶装置２Ｂと通信する。各種ソフトウェアが不揮発性記憶装置２Ａに対しリード要求、ライト要求などの命令を送信する必要が生じた場合、各種ソフトウェアは、ＯＳ１００にファイル単位のアクセス要求を送信する。ＯＳ１００はＯＳ１００に内包されるファイル管理テーブルを参照し、アクセス要求のあったファイルに対応する不揮発性記憶装置２Ａ、不揮発性記憶装置２Ｂの論理アドレス（ＬＢＡ）を特定し、当該インタフェース固有の命令に変換して不揮発性記憶装置２Ａ、不揮発性記憶装置２Ｂに送信する。
【００６１】
不揮発性記憶装置２Ａから応答が返ってきた場合、ＯＳ１００は当該応答がどのソフトウェアに対する応答かを特定し、特定したソフトウェアに対して応答を返す。なお、制御プログラム２００は、ＯＳ１００のファイル管理テーブルを用いずにＯＳ１００を介して不揮発性記憶装置２Ａ、不揮発性記憶装置２ＢのＬＢＡに直接アクセスするよう構成されてもよいし、ＯＳ１００を介さずに不揮発性記憶装置２Ａまたは不揮発性記憶装置２ＢのＬＢＡに直接アクセスするよう構成されてもよい。
【００６２】
［情報処理装置の物理的構成］
次に、コンピュータシステム１の構成例について説明する。コンピュータシステム１は、例えば、デスクトップコンピュータやノートブック型のポータブルコンピュータとして実現し得る。図１４は、コンピュータシステム１としてのデスクトップコンピュータの概略図である。
【００６３】
デスクトップコンピュータは、コンピュータ本体３１、ディスプレイ９、キーボード１４、及びマウス１５などを備えている。コンピュータ本体３１は、主要なハードウェアが搭載されたマザーボード３０、不揮発性記憶装置２Ａ、及び電源装置３２などを備えている。不揮発性記憶装置２Ａは、ＳＡＴＡケーブルを介してマザーボード３０に物理的に接続され、マザーボード３０上に実装されたサウスブリッジ７を介して、同じくマザーボード３０上に実装されたＣＰＵ４に電気的に接続されている。電源装置３２は、デスクトップコンピュータで使用される各種電源を発生し、電源ケーブルを介してマザーボード３０や不揮発性記憶装置２Ａなどに電源を供給する。
【００６４】
図１５は、コンピュータシステム１としてのポータブルコンピュータの概略図である。ポータブルコンピュータは、コンピュータ本体３４、ディスプレイユニット３５などから構成されている。ディスプレイユニット３５は、例えばＬＣＤ（Liquid Crystal Display）で構成される表示装置９が組み込まれている。ディスプレイユニット３５は、コンピュータ本体３４に対し、この本体３４の上面が露出される開放位置と本体３４の上面を覆う閉塞位置との間を回動自由に取り付けられている。本体３４は薄い箱形の筐体を有しており、その上面には、電源スイッチ３６、キーボード１４、タッチパッド３３等が配置されている。また、本体３４も、デスクトップコンピュータと同様に、不揮発性記憶装置２Ａ、マザーボード、及び電源装置などを備えている。
【００６５】
本実施形態を適用する情報処理機器としては、コンピュータシステム１の他に、スチルカメラ或いはビデオカメラなどの撮像装置などであってもよいし、タブレットコンピュータやスマートフォンやゲーム機器やカーナビゲーションシステムなどであってもよい。
【００６６】
本実施形態では、不揮発性記憶装置２Ａのバックアップ用記憶装置として、不揮発性記憶装置２Ｂを用いる。コンピュータシステム１の軽量化および省電力化および省スペース化の観点では、不揮発性記憶装置２Ａの信頼性が劣化していない場合には、不揮発性記憶装置２Ｂはホスト装置３に接続されていないことが望ましく、この場合、不揮発性記憶装置２Ａの信頼性が劣化した場合に、ディスプレイ９を介して制御プログラムから「バックアップ用記憶装置を接続してください」とのメッセージがユーザに表示され、バックアップ用不揮発性記憶装置２Ｂがユーザによりホスト装置３に接続されるようにすることが望ましい。たとえば、コンピュータシステム１がデスクトップコンピュータであった場合、不揮発性記憶装置２Ｂはたとえば図１４に示すようにしてＳＡＴＡケーブルやＵＳＢケーブルを介してマザーボード３０に接続されてもよい。不揮発性記憶装置２Ｂはコンピュータ本体３１の内部に格納してもよい。また、コンピュータシステム１がポータブルコンピュータであった場合、不揮発性記憶装置２Ｂはたとえば図１５のようにしてＳＡＴＡケーブルやＵＳＢケーブルを介してコンピュータ本体３４に接続されてもよい。この場合、着脱容易性の観点では、インタフェース１９ＢはｅＳＡＴＡインタフェースであることが好ましい。不揮発性記憶装置２Ｂはコンピュータ本体３４の内部に格納してもよい。不揮発性記憶装置２Ｂが取り付けられた後、制御プログラム２００は不揮発性記憶装置２Ａから不揮発性記憶装置２Ｂに対してユーザデータのバックアップを行う。
【００６７】
制御プログラム２００によるデータバックアップが終了した場合、コンピュータシステム１の省電力および軽量化および省スペース化の観点では、図１６、図１７に示すように、不揮発性記憶装置２Ａをコンピュータシステム１から取り外し、不揮発性記憶装置２Ｂを不揮発性記憶装置２Ａの取り付け位置に取り付けて、不揮発性記憶装置２Ａを不揮発性記憶装置２Ｂで置換することが望ましい。
【００６８】
［バックアップ動作］
図１８に、制御プログラム２００によるバックアップ動作の動作フローを示す。制御プログラム２００は不揮発性記憶装置２Ａから不揮発性記憶装置２Ｂに対するデータバックアップ機能を有するプログラムである。制御プログラム２００のバックアップ機能はキーボード１４やマウス１５を介してユーザによる手動で開始されてもよいし、ＣＰＵ４により自動的に開始されてもよい。図１８に示すフローでは、バックアップ対象のＬＢＡ領域を長さＬの小領域に分割して、それぞれの小領域に対しバックアップ動作のサブルーチンを行うことになる。小領域の参照にはＬＢＡのポインタであるｃＬＢＡがもちいられ、ｃＬＢＡが０からＬずつインクリメントされていくことにより、全ＬＢＡ領域のデータがバックアップされることになる。小領域の長さＬは１以上の整数である。 
【００６９】
バックアップ機能が開始されると、制御プログラム２００は、データコピー対象ＬＢＡのポインタであるｃＬＢＡをゼロにセットする（ステップＳ５００）。制御プログラム２００は、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するデータを読み出す命令を不揮発性記憶装置２Ａに送信する（ステップＳ５１０）。読み出し命令としては、たとえば非特許文献１のＡＣＳ−２に記述されている６０ｈ  ＲＥＡＤ  ＦＰＤＭＡ  ＱＵＥＵＥＤコマンドや２５ｈ  ＲＥＡＤ  ＤＭＡ  ＥＸＴコマンドなどを用いる。読み出し命令を受信した不揮発性記憶装置２Ａは、当該ＬＢＡ領域の読み出しデータ（Ｄ）をホスト装置３に送信し、ホスト装置３はデータＤを受信する（ステップＳ５２０）。制御プログラム２００は、データＤを関数ｆ（ｃＬＢＡ）と比較し（ステップＳ５３０）、データＤが関数ｆ（ｃＬＢＡ）と等しくない場合（ステップＳ５３０：Ｎｏ）と等しい場合（ステップＳ５３０：Ｙｅｓ）とで別々のステップに分岐する。
【００７０】
Ｄがｆ（ｃＬＢＡ）と等しくない場合（ステップＳ５３０：Ｎｏ）、制御プログラム２００は不揮発性記憶装置２Ｂに対し、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するＬＢＡ領域にデータＤを書き込む命令を送信し、制御プログラム２００は不揮発性記憶装置２ＢにデータＤを送信し、不揮発性記憶装置２ＢのメモリコントローラであるＳＳＤＣ４１ＢはデータＤをＮＡＮＤメモリ１６Ｂに書きこむ（ステップＳ５４０）。書き込み命令としては、たとえば非特許文献１のＡＣＳ−２に記述されている６１ｈ  ＷＲＩＴＥ  ＦＰＤＭＡ  ＱＵＥＵＥＤコマンドや３５ｈ  ＷＲＩＴＥ  ＤＭＡ  ＥＸＴコマンドなどを用いる。
【００７１】
Ｄがｆ（ｃＬＢＡ）と等しい場合（ステップＳ５３０：Ｙｅｓ）、制御プログラム２００は不揮発性記憶装置２Ｂに対し、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するＬＢＡ領域に削除通知を送信する。不揮発性記憶装置２ＢのＳＳＤＣ４１Ｂは管理情報４２Ｂを書き換えて、当該ＬＢＡ領域に対応するデータをデバイス無効データに変える（ステップＳ５５０）。削除通知命令としては、たとえば非特許文献１のＡＣＳ−２に記述されている０６ｈ  ＤＡＴＡ  ＳＥＴ  ＭＡＮＡＧＥＭＥＮＴコマンドやＳＣＴコマンドや、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)などを用いる。
【００７２】
ステップＳ５４０またはステップＳ５５０が完了すると、制御プログラム２００はｃＬＢＡをＬだけインクリメントし（ステップＳ５６０）、ステップＳ５００〜ステップＳ５５０のサブルーチンを全小領域に対して実行する。ｃＬＢＡが不揮発性記憶装置２Ｂのアクセス可能最大ＬＢＡを超過したとき全ＬＢＡ領域の読み出しが完了したことになり（ステップＳ５７０：Ｙｅｓ）、バックアップ処理が完了する。
【００７３】
なお、ステップＳ５４０で不揮発性記憶装置２Ｂに書かれたデータを確実にＮＡＮＤ型フラッシュメモリに格納したり、ステップＳ５５０で削除通知処理された最新の管理情報４２Ｂを確実にＮＡＮＤ型フラッシュメモリに格納したりして、不揮発性記憶装置２Ｂの不正電源遮断時のデータ損失を防止するという観点では、バックアップ完了時に制御プログラム２００が、たとえば非特許文献１のＡＣＳ−２に記述されているE0h Standby ImmediateコマンドやE6h SLEEPコマンド等のスタンバイ状態・スリープ状態遷移コマンドを不揮発性記憶装置２Ｂに対して発行することで不揮発性記憶装置２Ｂを電源遮断可能な状態にしておいたり、たとえば非特許文献１のＡＣＳ−２に記述されているE7h FLUSH CACHEコマンドやEAh FLUSH CACHE EXTコマンド等のフラッシュキャッシュコマンドを不揮発性記憶装置２Ｂに対して発行することで不揮発性記憶装置２ＢのＲＡＭ４０Ｂの管理情報４２ＢやＣＭ４４ＢのデータをＮＡＮＤ型フラッシュメモリ１６Ｂに退避保存させることが望ましい。
【００７４】
制御プログラム２００によるデータバックアップが終了した場合、コンピュータシステム１の省電力のために、Information technology ATA/ATAPI Command Set-3 (ACS-3)に記載されているE0h Standby ImmediateコマンドやE6h SLEEPコマンド等を不揮発性記憶装置２Ａに送信したり、不揮発性記憶装置２Ａへの供給電源を遮断したり、不揮発性記憶装置２ＡをSerial ATA Revision 3.1 Gold Revisionに記載のPartial状態やSlumber状態に遷移させたり、"Serial ATA Technical Proposal: SATA31_TPR_C108 Title: Device Sleep"に記載のDEVSLP信号をアクティブにして不揮発性記憶装置２ＡをDevSleep状態に遷移させたり、不揮発性記憶装置２ＡをPCI Express Base Specification Revision 3.0に記載のD1状態やD2状態やD3状態に遷移させたり、PCI Express Base Specification Revision 3.0に記載のL1状態やL2状態やL3状態に遷移させたりしてもよい。
【００７５】
前述のとおり、不揮発性記憶装置２Ｂに対する削除通知処理は不揮発性記憶装置２Ｂに対する書き込み処理よりも高速に行うことができる。また、不揮発性記憶装置２Ｂに対する書き込み処理はＮＡＮＤメモリブロックを消費するが、不揮発性記憶装置２Ｂに対する削除通知処理はＮＡＮＤメモリブロックをほとんど消費しないため、不揮発性記憶装置２Ｂの動作速度低下を低減する。また、不揮発性記憶装置２Ｂに対する書き込み処理によりＮＡＮＤメモリブロックの消去が発生してＮＡＮＤメモリの信頼性が劣化するが、不揮発性記憶装置２Ｂに対する削除通知処理はＮＡＮＤメモリブロックの消去処理がほとんど発生しないため、ＮＡＮＤメモリの信頼性劣化を低減することができる。
【００７６】
比較例のバックアップ方式では、バックアップ先対象のＬＢＡ領域に対してステップＳ５５０の書き込み動作が行われていたため、低速であり、不揮発性記憶装置２Ｂの動作速度が低下し、ＮＡＮＤメモリ１６Ｂの信頼性が劣化するという問題点があった。一方、本実施形態の制御ツール２００を用いてバックアップを行うと、不揮発性記憶装置２Ａのデータのうち、関数ｆ（ＬＢＡ）で表されるデータが有意に存在する場合は、それらのデータに対しステップＳ５４０ではなくステップＳ５５０が行われるため、比較例のバックアップ方式に比べて高速にバックアップを行うことができ、不揮発性記憶装置２Ｂの動作速度の低減を抑制でき、ＮＡＮＤメモリ１６Ｂの信頼性劣化を抑えることが可能になる。本実施形態では、不揮発性記憶装置２ＢとしてＳＳＤを採用したが、不揮発性記憶装置２Ｂとしてハードディスクドライブ（ＨＤＤ）など他の不揮発性記憶装置を採用してもよい。たとえば、不揮発性記憶装置２ＢとしてＨＤＤを採用した場合、ステップＳ５５０により、不揮発性記憶装置２Ｂへの書き込み量が低減することで不揮発性記憶装置２Ｂの信頼性劣化が低減し、ホスト装置３から不揮発性記憶装置２Ｂに転送されるデータ量が減少することでバックアップ動作が高速に行われる。
【００７７】
本実施形態では、不揮発性記憶装置２Ａの全ＬＢＡをバックアップする場合について述べたが、バックアップ対象ＬＢＡ領域を全ＬＢＡ領域のうちの一部の領域に限定して行ってもよい。
【００７８】
また、本実施形態では、バックアップ元不揮発性記憶装置２Ａとバックアップ先不揮発性記憶装置２Ｂとで異なるＳＳＤを採用したが、バックアップ元不揮発性記憶装置２Ａとバックアップ先不揮発性記憶装置２Ｂが同一のＳＳＤ（２Ａ＝２Ｂ）であってもよい。つまり、ＳＳＤを２つのパーティションであるパーティションＡ（先頭ＬＢＡ＝０）とパーティションＢ（先頭ＬＢＡ＝Ｘ）に区切っておき、制御プログラム２００がパーティションＡからパーティションＢに対してバックアップ動作を行うようにしてもよい。その場合、たとえば、バックアップ元ＬＢＡとバックアップ先ＬＢＡとの対応関係をｃＬＢＡ（バックアップ元ＬＢＡ）→Ｘ＋ｃＬＢＡ（バックアップ先ＬＢＡ）という関係にしてバックアップを行えばよい。
【００７９】
（第２の実施形態）
第１の実施形態では、バックアップ単位として、等論理セクタ長Ｌごとに区切った小領域に対して行う場合について述べたが、可変長の小領域に対して行ってもよい。たとえば、小領域として、ＯＳ１００上で管理されるファイル単位を採用してもよい。図１９は、第２の実施形態の制御ツール２００の動作例を示すフローチャートである。
【００８０】
制御プログラム２００はバックアップ元不揮発性記憶装置２Ａ内のＮＡＮＤメモリ１６Ａに保存されたＯＳファイル管理テーブル（メタデータ）を取得し、不揮発性記憶装置２Ａ内の全ファイル情報をバックアップ対象リストとして主メモリ６に保存する（ステップＳ６００）。バックアップ対象リストは不揮発性記憶装置２Ａの全ファイルである必要はなく、一部のファイルのリストであってもよい。制御プログラム２００は、バックアップ対象リスト内の情報に基づき、バックアップ対象リスト内のそれぞれのファイルについて、当該ファイルのデータが保存されているＬＢＡを取得し（＝ｃＬＢＡとする）（ステップＳ６０５）、バックアップ元不揮発性記憶装置２Ａから当該ＬＢＡのデータを読み出す（ステップＳ６１０）。読み出し命令としては、たとえば非特許文献１のＡＣＳ−２に記述されている６０ｈ  ＲＥＡＤ  ＦＰＤＭＡ  ＱＵＥＵＥＤコマンドや２５ｈ  ＲＥＡＤ  ＤＭＡ  ＥＸＴコマンドなどを用いる。
【００８１】
ステップＳ６１０で読みだしたデータを判定するためには、読みだしたデータを論理セクタ単位に分解することが望ましい（ステップＳ６２０）。制御プログラム２００は、分解後の１つのデータＤを選択し（ステップＳ６３０）、分割データＤがｆ（ｃＬＢＡ）と等しいかどうかを判定する（ステップＳ６４０）分割データＤが関数ｆ（ｃＬＢＡ）と一致しないデータについては、たとえば非特許文献１のＡＣＳ−２に記述されている６１ｈ  ＷＲＩＴＥ  ＦＰＤＭＡ  ＱＵＥＵＥＤコマンドや３５ｈ  ＷＲＩＴＥ  ＤＭＡ  ＥＸＴコマンドなどを用いるなどして、バックアップ先不揮発性記憶装置２Ｂにデータを書き込む（ステップＳ６４５）。分割データＤが関数ｆ（ＬＢＡ）と一致しているデータについてはバックアップ先不揮発性記憶装置２Ｂにデータ書き込み命令を送信せずに、不揮発性記憶装置２Ｂの当該ＬＢＡにたいして、削除通知命令を送信する（ステップＳ６５０）。削除通知命令としては、たとえば非特許文献１のＡＣＳ−２に記述されている０６ｈ  ＤＡＴＡ  ＳＥＴ  ＭＡＮＡＧＥＭＥＮＴコマンドやＳＣＴコマンドや、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)などを用いる。制御プログラム２００は、全ての分割データに対し、ステップＳ６３０〜Ｓ６５０の処理を繰り返す。
【００８２】
制御プログラム２００は、バックアップ先不揮発性記憶装置２ＢのＯＳファイル管理テーブル（メタデータ）に選択ファイルの情報を書き込む。これにより、バックアップしたファイルはＯＳから認識可能になる。制御プログラム２００は、全てのファイルを読み出した否かを判定し（ステップＳ６８０）、全てのファイルを読み出していない場合は、次のファイルを選択し、選択ファイルのＬＢＡ情報を取得し（ステップＳ６９０）、手順をステップＳ６１０に移行させる。全てのファイルを読み出している場合は、これで処理を終了する。本実施形態では、不揮発性記憶装置２Ａの全ファイルをバックアップする場合について述べたが、バックアップ対象ファイルを全ファイルのうちの一部のファイルに限定して行ってもよい。
【００８３】
このように第２の実施形態においては、バックアップ元のデータ読み出し、書き込みをファイル単位で行う。これにより、ファイルが存在しないＬＢＡの読み出し、書き込み、削除通知を省略することが可能になり、バックアップ動作がより高速に行われる。
【００８４】
（第３の実施形態）
第１、第２の実施形態では、制御プログラム２００内の関数ｆ（ＬＢＡ）を用いてバックアップ処理を行い、バックアップ後のデータ読み出し時においては、バックアップ先である不揮発性記憶装置２ＢのＳＳＤＣ４１Ｂは、ＮＡＮＤメモリ１６Ｂ内の関数ｆ（ＬＢＡ）を用いてデバイス無効データ（device-invalid data）をｆ（ＬＢＡ）に復元してホスト装置３に送信するようにしている。
【００８５】
第３の実施形態では、制御プログラム２００の設計時、製品設計時若しくは工場出荷前において、又は工場出荷後において、関数ｆ（ＬＢＡ）を決定する手法について説明する。特に、ＳＳＤにインストールするＯＳやシステム構成が決定しているときは、それらシステムに対して最適な関数ｆ（ＬＢＡ）を制御プログラム２００の設計時、製品設計時若しくは工場出荷前に設定しておくことが望ましい。関数ｆ（ＬＢＡ）は、たとえば、ＬＢＡとデータを対応付けるテーブルデータとして、あるいは関数ｆ（ＬＢＡ）をアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。あるいは、関数ｆ（ＬＢＡ）は、関数ｆ（ＬＢＡ）をアルゴリズムとして実現する電子回路として記憶装置２ＢのＳＳＤＣ４１Ｂに搭載されてもよい。たとえば関数ｆ（ＬＢＡ）が記憶装置２ＢのＮＡＮＤメモリ１６Ｂとホスト装置３の主メモリ６の制御プログラム２００内に格納される場合、制御プログラム２００内の関数ｆ（ＬＢＡ）とＮＡＮＤメモリ１６Ｂ内の関数ｆ（ＬＢＡ）は同じものである必要がある。たとえば、制御プログラム２００と不揮発性記憶装置２Ｂを同じ関数ｆ（ＬＢＡ）を用いて設計してもよいし、制御プログラム２００が不揮発性記憶装置２Ｂから関数ｆ（ＬＢＡ）を取得して、制御プログラム２００が取得した関数ｆ（ＬＢＡ）を用いて制御プログラム２００内の関数ｆ（ＬＢＡ）を上書きしてもよいし、不揮発性記憶装置２Ｂが制御プログラム２００から関数ｆ（ＬＢＡ）を取得して、不揮発性記憶装置２Ｂが取得した関数ｆ（ＬＢＡ）を用いてＮＡＮＤ型フラッシュメモリ１６Ｂ内の関数ｆ（ＬＢＡ）を上書きしてもよい。
【００８６】
図２０は、論理アドレス及びデータの一例を示す図である。ＳＳＤの論理アドレス領域は、論理アドレス（ＬＢＡ）によってホスト装置３に認識される。論理アドレスは１セクタが最小管理単位となっており、１セクタは例えば５１２バイトである。図２０ように、各セクタに対し論理アドレス（0000h、0001h、0002h、…、ba02h、…）が割り当てられている。なお、数字の末尾のｈは、この数字が１６進数表記であることを示す。
【００８７】
図２０では、エンドユーザがバックアップするであろう典型的なデータのモデルを想定して（シミュレートして）以下のように関数ｆ（ＬＢＡ）を決定する。不揮発性記憶装置２Ｂの設計者は、事前検証として、典型的なユーザが使うであろう環境を再現したモデルとなるデータパターンをＳＳＤに書き込んだ状態で全論理アドレスを読み出し、０-fillセクタと比較することで、図２１に示すような０-fillセクタの存在確率分布を導くことができる。また、比較時に、０-fillセクタとなっているセクタ数合計を全論理アドレス領域の合計容量で割ると、正確な０-fillセクタの割合を導くことができる。関数ｆ（ＬＢＡ）＝０００・・・０ｈ（固定値、０は５１２バイト分の繰り返し)とすることで、バックアップ時に最大で０-fillセクタとなっているセクタ数合計相当のブロックを開放してフリーブロックを節約することができる。この場合、関数ｆ（ＬＢＡ）は、たとえば、５１２バイトのデータ０００・・・０ｈとして、あるいは全ＬＢＡと５１２バイトのデータ０００・・・０ｈを対応付けるテーブルデータとして、あるいは全ＬＢＡに対して５１２バイトのデータ０００・・・０ｈを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【００８８】
図２２は、関数ｆ（ＬＢＡ）が一定の固定値とならない例である。ある論理アドレス領域ではあるデータパターンが頻発し、ある論理アドレス領域では別のデータパターンが頻発するというように、論理アドレス領域によって頻発する繰り返しパターンが異なる場合がある。図２２に示すように、論理アドレス領域の前半では０-fillセクタが多数存在する一方、論理アドレス領域の後半では１-fillデータ（全ビットが“１”で埋め尽くされたデータ、１６進数で表すとｆｈで埋め尽くされたデータということになる）が多数存在するよう場合を考える。０-fillセクタの存在確率分布及び１-fillセクタの存在確率分布は図２３に示すようになる。この場合、関数ｆ（ＬＢＡ）＝０００…０ｈ（固定値）としたり、関数ｆ（ＬＢＡ）＝ｆｆｆ…ｆｈ（固定値）とするよりも、“関数ｆ（ＬＢＡ）＝０００…０ｈ（ＬＢＡ≦ｃ０００ｈ），ｆ（ＬＢＡ）＝ｆｆｆ…ｆｈ（ＬＢＡ＞ｃ０００ｈ）”のように、関数ｆ（ＬＢＡ）を２つの論理アドレス領域で異なる値とするほうが、バックアップ後に確保できるフリーブロック数が多くなるため、望ましい。この場合、関数ｆ（ＬＢＡ）は、たとえば、ＬＢＡ＝ｃ０００ｈ以下の範囲のＬＢＡに対して５１２バイトのデータ０００・・・０を対応付け、ＬＢＡ＝ｃ００１ｈ以上の範囲のＬＢＡに対して５１２バイトのデータｆｆｆ・・・ｆｈを対応付けるテーブルデータとして、あるいはＬＢＡ＝ｃ０００ｈ以下の範囲のＬＢＡに対して５１２バイトのデータ０００・・・０ｈを生成し、ＬＢＡ＝Ｃ００１ｈ以上の範囲のＬＢＡに対して５１２バイトのデータｆｆｆ・・・ｆｈを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【００８９】
図２４は、３つの論理アドレス領域で頻発するデータが異なる場合である。０-fillセクタの存在確率分布、３２０ａ-fillセクタ（３２０ａデータで埋め尽くされた１セクタ長のデータ）の存在確率分布、及び１-fillセクタの存在確率分布は図２５に示すようになる。この場合、“関数ｆ（ＬＢＡ）＝０００…０ｈ（ＬＢＡ≦７ｆｆｆｈ），ｆ（ＬＢＡ）＝３２０ａ３２０ａ…３２０ａｈ（８０００ｈ≦ＬＢＡ≦ｃ０００ｈ），ｆ（ＬＢＡ）＝ｆｆｆ…ｆｈ（ＬＢＡ≧ｃ００１ｈ）”のように、関数ｆ（ＬＢＡ）を３つの論理アドレス領域で異なる値とするほうが、バックアップ後に確保できるフリーブロック数が多くなるため望ましい。この場合、関数ｆ（ＬＢＡ）は、たとえば、ＬＢＡ≦７ｆｆｆｈの範囲のＬＢＡに対して５１２バイトのデータ０００…０ｈを対応付け、８０００ｈ≦ＬＢＡ≦ｃ０００ｈの範囲のＬＢＡに対して５１２バイトのデータ３２０ａ３２０ａ…３２０ａｈを対応付け、ＬＢＡ≧ｃ００１ｈの範囲のＬＢＡに対して５１２バイトのデータｆｆｆ・・・ｆｈを対応付けるテーブルデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。あるいは、関数ｆ（ＬＢＡ）は、たとえば、ＬＢＡ≦７ｆｆｆｈの範囲のＬＢＡに対して５１２バイトのデータ０００・・・０ｈを生成し、８０００ｈ≦ＬＢＡ≦ｃ０００ｈの範囲のＬＢＡに対して５１２バイトのデータ３２０ａ３２０ａ…３２０ａｈを生成し、ＬＢＡ≧ｃ００１ｈの範囲のＬＢＡに対して５１２バイトのデータｆｆｆ・・・ｆｈを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【００９０】
また、論理アドレス領域をサイズＬごとに分割した管理単位を用いるようにしてもよい。サイズＬはＬＢＡの最小単位以上である。関数ｆ（ＬＢＡ）は管理単位の内部では一定値をとるが、異なる管理単位間では関数ｆ（ＬＢＡ）が異なってもよい。先頭の管理単位では関数ｆ（ＬＢＡ）＝Ｄ０（固定値）、次の管理単位では関数ｆ（ＬＢＡ）＝Ｄ１（固定値）、…というようになる。この場合の関数ｆ（ＬＢＡ）は、以下のように表される。
【００９１】
“ｆ（ＬＢＡ）＝Ｄ０（０≦ＬＢＡ≦Ｌ−１，ｆ（ＬＢＡ）＝Ｄ１（Ｌ≦ＬＢＡ≦２Ｌ−１），ｆ（ＬＢＡ）＝Ｄ２（２Ｌ≦ＬＢＡ≦３Ｌ−１，…，Ｄｋ（ｋＬ≦ＬＢＡ≦（ｋ＋１）Ｌ−１），…”
Ｄｋ（ｋ＝０、１、…）は、サイズがＬの任意のデータパターンである。この場合、関数ｆ（ＬＢＡ）は、たとえば、ｋＬ≦ＬＢＡ≦（ｋ＋１）Ｌ−１の範囲のＬＢＡに対して（ｋ＝０、１、…）、５１２バイトのデータＤｋを対応付けるテーブルデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。あるいは、関数ｆ（ＬＢＡ）は、たとえば、ｋＬ≦ＬＢＡ≦（ｋ＋１）Ｌ−１の範囲のＬＢＡに対して（ｋ＝０、１、…）、５１２バイトのデータＤｋを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【００９２】
Ｄｋ（ｋ＝０、１、…）の選び方には任意性があり、最適なＤｋを選ぶことで最適な関数ｆ（ＬＢＡ）が決定される。Ｄｋの各種候補に対して、不揮発性記憶装置２Ｂおよび制御プログラム２００の設計者は、あらかじめエンドユーザがバックアップするであろう典型的なデータのモデルに基づき、以下の手法で点数付けを行う。
【００９３】
（１）各種セクタごとのデータを読み出す（又は、セクタの整数倍ごとにデータを読み出してもよいし、管理単位ごとにデータを読み出してもよい）。
（２）（１）で読み出したデータが関数ｆ（ＬＢＡ）に等しいか否かを判定する（セクタの整数倍ごとにデータを読み出した場合は、その中の全セクタが関数ｆ（ＬＢＡ）に等しいか否かを判定する）。
（３）等しい場合は１点、等しくない場合は０点と点数をつける。
（４）ＳＳＤの全論理アドレス領域に対して点数付けを行い、点数の合計を算出する（代表して一部領域のみについて点数付けを行ってもよい）。
【００９４】
そして、もっとも高得点となったＤｋが最適ということになり、このＤｋを用いて最適な関数ｆ（ＬＢＡ）が決定される。例えば、Ｌ＝１２８ＭｉＢ（ＭｉＢ＝1,048,576バイト）とすると、ＳＳＤの全論理アドレス領域を始端から均等に１２８ＭｉＢごとに区切り、それぞれの区画を読み出し、区画内全データが関数ｆ（ＬＢＡ）に等しいか否かを判定し、等しい場合は１点加算し、合計点数を計算する。その点数計算を例えば（Ｄ０，Ｄ１，…）＝（００００…ｈ，００００…ｈ，…），（ｆｆｆｆ…ｈ，ｆｆｆｆ…ｈ，…），（ｆｆｆｆ…ｈ，００００…ｈ，…），（００００…ｈ，ｆｆｆｆ…ｈ，…）のような複数の候補について行い、もっとも得点の高い候補を最適な（Ｄ０，Ｄ１，…）として選定して関数ｆ（ＬＢＡ）を決定する。関数ｆ（ＬＢＡ）の情報として、最適化後のデータ列Ｄｋ（ｋ＝０、１、…）をＳＳＤＣ４１ＢまたはＲＡＭ４０ＢまたはＮＡＮＤメモリ１６Ｂに記憶しておくことが望ましい。最適化後のデータ列Ｄｋ（ｋ＝０、１、…）を制御プログラム２００に保存せず、制御プログラム２００が不揮発性記憶装置２Ｂから取得するようにしてもよい。たとえば非特許文献１のＡＣＳ−２に記述されているＥＣｈ  ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥコマンドを用いることができ、たとえばＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥデータのうちＶｅｎｄｏｒ  Ｓｐｅｃｉｆｉｃとして割り当てられているＷｏｒｄ１２９以降のデータ領域をデータ列Ｄｋ（ｋ＝０、１、…）取得用領域として割り当ててもよい。
【００９５】
論理アドレス領域を可変長に区切った区画を管理単位として用いてもよい。この場合の関数ｆ（ＬＢＡ）は、以下のように表される。
【００９６】
“ｆ（ＬＢＡ）＝Ｄ０（Ｌ０＝０≦ＬＢＡ≦Ｌ１−１，ｆ（ＬＢＡ）＝Ｄ１（Ｌ１≦ＬＢＡ≦Ｌ２−１），ｆ（ＬＢＡ）＝Ｄ２（Ｌ２≦ＬＢＡ≦Ｌ３−１，…，Ｄｋ（Ｌｋ≦ＬＢＡ≦Ｌ（ｋ＋１）−１），…”
Ｄｋ（ｋ＝０、１、・・・）は、サイズがＬの任意のデータパターンである。“Ｌ０＜Ｌ１＜Ｌ２＜…Ｌｋ＜…”である。この場合、関数ｆ（ＬＢＡ）は、たとえば、Ｌｋ≦ＬＢＡ≦Ｌ（ｋ＋１）−１の範囲のＬＢＡに対して（ｋ＝０、１、…）、５１２バイトのデータＤｋを対応付けるテーブルデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。あるいは、関数ｆ（ＬＢＡ）は、たとえば、Ｌｋ≦ＬＢＡ≦Ｌ（ｋ＋１）−１の範囲のＬＢＡに対して（ｋ＝０、１、…）、５１２バイトのデータＤｋを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【００９７】
図２６は、同一データで埋め尽くされているセクタが少ないため、論理アドレス領域を固定長または可変長に区切った区画を管理単位として用いる手法を適用しても十分な効果が得られないが、データとＬＢＡとに一定の相関がある場合のケースである。このような場合には、より一般的な関数ｆ（ＬＢＡ）の決定手法を用いることが好ましい。例えば、複数の関数ｆ（ＬＢＡ）の候補を用意し、エンドユーザがバックアップするであろう典型的なデータのモデルにおいてそれぞれの関数ｆ（ＬＢＡ）に対して前述の点数付けを行い、もっとも高得点のｆ（ＬＢＡ）を最適なｆ（ＬＢＡ）として決定する。この場合は、図２７に示すように、データとＬＢＡとに一定の相関があるセクタが解放される。
【００９８】
また、例えば、２種類のパラメータａ，ｂについて、“関数ｆ（ＬＢＡ）＝ａ×ＬＢＡ＋ｂ”を定義し、パラメータａ，ｂを変化させたものを関数ｆ（ＬＢＡ）の候補として用いてもよい。そして、エンドユーザがバックアップするであろう典型的なデータのモデルにおいてもっとも高得点の（ａ，ｂ）を求め、もっとも高得点の（ａ，ｂ）を用いて関数ｆ（ＬＢＡ）を決定してもよい。図２８は、関数ｆ（ＬＢＡ）の決定方法を説明する図である。図２８には、パラメータｂがｂ１、ｂ２、ｂ３の場合を図示している。パラメータａを変えると、（ａ，ｂ）＝（ａ０，ｂ２）がもっとも得点の高い。よって、“関数ｆ（ＬＢＡ）＝ａ０×ＬＢＡ＋ｂ２”が算出される。この場合、関数ｆ（ＬＢＡ）は、たとえば、関数ｆ（ＬＢＡ）をアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【００９９】
ＬＢＡがＡＴＡ規格において一般的な４８ビットのＬＢＡである場合にはＬＢＡ＝（ｄ０，ｄ１，ｄ２，・・・，ｄ４７）ｔという列数４８のベクトルとし（ｔは転置記号）、Ａを５１２×４８の行列とし、ｂを列数４０９６（１セクタ＝５１２バイト＝４０９６ビット）のベクトルとすることで、“関数ｆ（ＬＢＡ）＝Ａ×ＬＢＡ＋ｂ”というように関数ｆ（ＬＢＡ）を列数４０９６のベクトル形式で取得してもよい。この場合、ベクトルｆ（ＬＢＡ）の１列目が１ビット目のデータに、２列目が２ビット目のデータに、…、という対応関係がある。さらに一般的には、ＬＢＡがｎビットで記述されるとき、ＬＢＡ＝（ｄ０，ｄ１，ｄ２，…，ｄｎ−１）ｔという列数ｎのベクトルとし、Ａをｎ×ｍの行列とし、ｂを列数ｍのベクトルとすることで、“関数ｆ（ＬＢＡ）＝Ａ×ＬＢＡ＋ｂ”というように関数ｆ（ＬＢＡ）を列数ｍのベクトル形式で取得してもよい。この場合、関数ｆ（ＬＢＡ）は、たとえば、行列Ａやベクトルｂの配列データとして、あるいは、関数ｆ（ＬＢＡ）をアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂや、ホスト装置３の主メモリ６に格納される。
【０１００】
本実施形態では、関数ｆ（ＬＢＡ）がＬＢＡを引数としＬＢＡにのみ依存する場合や、ＬＢＡに依存しない固定値である場合について述べたが、ＬＢＡ以外の変数に依存しても良い。たとえば、関数ｆとして、ＬＢＡと、記憶装置２Ｂが設定するパラメータＸを引数とする２変数関数ｆ（ＬＢＡ，Ｘ）を使用してもよいし、ＬＢＡと、ホスト装置３が設定するパラメータＹを引数とする２変数関数ｆ（ＬＢＡ，Ｙ）を使用してもよい。
【０１０１】
（第４の実施形態）
関数ｆ（ＬＢＡ）＝固定値（＝Ｑ）である場合、データＱをバックアップ先不揮発性記憶装置２ＢのＮＡＮＤメモリ１６ＢまたはＳＳＤＣ４１ＢまたはＲＡＭ４０Ｂにのみ保存し、制御プログラム２００に保存しないようにしてもよい。第４の実施形態においては、制御プログラム２００は、図１８のステップＳ５３０や図１９のステップＳ６４０において、データをｆ（ＬＢＡ）＝Ｑと比較する時、不揮発性記憶装置２Ｂから取得した固定値Ｑを用いて比較を行う。不揮発性記憶装置２Ｂから固定値Ｑを取得する方法として、たとえば非特許文献１のＡＣＳ−２に記述されているＥＣｈ  ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥコマンドを用いることができる。たとえば、ＥＣｈ  ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥコマンドのデータのうち、Ｖｅｎｄｏｒ  Ｓｐｅｃｉｆｉｃとして割り当てられているＷｏｒｄ１２９をデータＱに割り当ててもよい。その場合、Ｗｏｒｄ１２９のデータ（＝Ｒ）は１ワード＝２バイトのデータ長であり、Ｑは５１２バイトのデータ長さであるため、制御プログラム２００は
Ｑ＝ＲＲＲＲ…Ｒ  （Ｒ２５６個を直列に並べたもの）
としてＱを生成する。関数ｆ（ＬＢＡ）としてのデータＲは、たとえば記憶装置２ＢのＳＳＤＣ４１ＢやＮＡＮＤメモリ１６ＢやＲＡＭ４０Ｂに格納され、制御プログラム２００が記憶装置２ＢからデータＲを受信した後にホスト装置３の主メモリ６に格納される。
【０１０２】
図２９は第４の実施形態の動作例を示すフローチャートである。制御プログラム２００は、関数ｆ（ＬＢＡ）取得コマンドとしてたとえばＥＣｈ  ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥコマンドを不揮発性記憶装置２Ｂに発行し、不揮発性記憶装置２ＢのＮＡＮＤメモリ１６ＢからＷｏｒｄ１２９のデータＲを取得する（ステップＳ７００）。そして、制御プログラム２００は、取得したデータＲを直列に結合してデータＱを作成する（ステップＳ７１０）。
【０１０３】
制御プログラム２００は、データコピー対象ＬＢＡのポインタであるｃＬＢＡをゼロにセットする（ステップＳ７２０）。制御プログラム２００は、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するデータを読み出す命令を不揮発性記憶装置２Ａに送信する（ステップＳ７３０）。読み出し命令を受信した不揮発性記憶装置２Ａは、当該ＬＢＡ領域の読み出しデータＤをホスト装置３に送信し、ホスト装置３はデータＤを受信する（ステップＳ７４０）。制御プログラム２００は、データＤを固定値Ｑと比較し（ステップＳ７５０）、データＤが固定値Ｑと等しくない場合（ステップＳ７５０：Ｎｏ）と等しい場合（ステップＳ７５０：Ｙｅｓ）とで別々のステップに分岐する。
【０１０４】
ＤがＱと等しくない場合（ステップＳ７５０：Ｎｏ）、制御プログラム２００は不揮発性記憶装置２Ｂに対し、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するＬＢＡ領域にデータＤを書き込む命令を送信し、制御プログラム２００は不揮発性記憶装置２ＢにデータＤを送信し、不揮発性記憶装置２ＢのメモリコントローラであるＳＳＤＣ４１ＢはデータＤをＮＡＮＤメモリ１６Ｂに書きこむ（ステップＳ７６０）。
【０１０５】
ＤがＱと等しい場合（ステップＳ７５０：Ｙｅｓ）、制御プログラム２００は不揮発性記憶装置２Ｂに対し、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するＬＢＡ領域に削除通知を送信し、ＳＳＤＣ４１Ｂは管理情報４２Ｂを書き換えて、当該ＬＢＡ領域に対応するデータをデバイス無効データに変える（ステップＳ７７０）。
【０１０６】
ステップＳ７６０またはステップＳ７７０が完了すると、制御プログラム２００はｃＬＢＡをＬだけインクリメントし（ステップＳ７８０）、不揮発性記憶装置２Ａの全ＬＢＡ領域のデータを読み出すまで（ステップＳ７９０：Ｙｅｓ）、ステップＳ７３０〜ステップＳ７８０の処理を繰り返し実行する。
【０１０７】
図３０は第４の実施形態の他の動作例を示すフローチャートである。図３０の動作例では、各ＬＢＡごとにバックアップ先不揮発性記憶装置２Ｂに対して、たとえばＩｄｅｎｔｉｆｙ  Ｄｅｖｉｃｅコマンドを発行してデータＱを生成している。
【０１０８】
制御プログラム２００は、データコピー対象ＬＢＡのポインタであるｃＬＢＡをゼロにセットする（ステップＳ８００）。制御プログラム２００は、関数ｆ（ＬＢＡ）取得コマンドとしてたとえばＥＣｈ  ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥコマンドを不揮発性記憶装置２Ｂに発行し、不揮発性記憶装置２ＢのＮＡＮＤメモリ１６ＢからＷｏｒｄ１２９のデータＲを取得する（ステップＳ８１０）。そして、制御プログラム２００は、取得したデータＲを直列に結合してデータＱを作成する（ステップＳ８２０）。
【０１０９】
制御プログラム２００は、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するデータを読み出す命令を不揮発性記憶装置２Ａに送信する（ステップＳ８３０）。読み出し命令を受信した不揮発性記憶装置２Ａは、当該ＬＢＡ領域の読み出しデータＤをホスト装置３に送信し、ホスト装置３はデータＤを受信する（ステップＳ８４０）。制御プログラム２００は、データＤを固定値Ｑと比較し（ステップＳ８５０）、データＤが固定値Ｑと等しくない場合（ステップＳ８５０：Ｎｏ）と等しい場合（ステップＳ８５０：Ｙｅｓ）とで別々のステップに分岐する。
【０１１０】
ＤがＱと等しくない場合（ステップＳ８５０：Ｎｏ）、制御プログラム２００は不揮発性記憶装置２Ｂに対し、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するＬＢＡ領域にデータＤを書き込む命令を送信し、制御プログラム２００は不揮発性記憶装置２ＢにデータＤを送信し、不揮発性記憶装置２ＢのメモリコントローラであるＳＳＤＣ４１ＢはデータＤをＮＡＮＤメモリ１６Ｂに書きこむ（ステップＳ８６０）。
【０１１１】
ＤがＱと等しい場合（ステップＳ８５０：Ｙｅｓ）、制御プログラム２００は不揮発性記憶装置２Ｂに対し、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌに相当するＬＢＡ領域に削除通知を送信し、ＳＳＤＣ４１Ｂは管理情報４２Ｂを書き換えて、当該ＬＢＡ領域に対応するデータをデバイス無効データに変える（ステップＳ８７０）。
【０１１２】
ステップＳ８６０またはステップＳ８７０が完了すると、制御プログラム２００はｃＬＢＡをＬだけインクリメントし（ステップＳ８８０）、不揮発性記憶装置２Ａの全ＬＢＡ領域のデータを読み出すまで（ステップＳ７９０：Ｙｅｓ）、ステップＳ８１０〜ステップＳ８８０の処理を繰り返し実行する。
【０１１３】
なお、データＲを取得する際に、ＬＢＡを含む関数ｆ（ＬＢＡ）取得コマンドを発行し、不揮発性記憶装置２Ｂがそのコマンドに対してＲ＝ｆ（ＬＢＡ）を返すように不揮発性記憶装置２Ｂと制御プログラム２００を設計すれば、ｆ（ＬＢＡ）が固定値でなく関数である場合にも本実施形態を適用することが可能である。たとえば、関数ｆ（ＬＢＡ）取得コマンドとしてＡＣＳ２記載のＳＣＴコマンドを使用し、SCT command transferにおいて記憶装置２Ｂに発行するB0h/D6h SMART WRITE LOGコマンドや3Fh WRITE LOG EXTコマンドや57h WRITE LOG DMA EXTコマンドの書き込みデータ内にＬＢＡを格納して記憶装置２Ｂに転送し、SCT data transferにおいて記憶装置２ＢにB0h/D5h SMART READ LOGコマンドや2Fh READ LOG EXTコマンドや47h READ LOG DMA EXTコマンドを発行し記憶装置２Ｂから受信する読み出しデータからＲ＝ｆ（ＬＢＡ）を取得する。
【０１１４】
このようにこの実施形態では、関数ｆ（ＬＢＡ）をバックアップ先不揮発性記憶装置２Ｂ側で一元管理することができ、制御プログラム２００に独立して保持する必要がないため、制御プログラム２００の管理や開発が容易になる。
【０１１５】
（第５の実施形態）
図３１に示すように、バックアップ先の不揮発性記憶装置２Ｂとしてネットワークストレージドライブまたはクラウドストレージを用いることもできる。たとえば、コンピュータシステム１とクラウドストレージ２Ｂをインターネットやイントラネットなどのネットワークを介して接続し、制御ソフトウェア２００がクラウドストレージ２Ｂにネットワーク経由で削除通知コマンドおよび書き込みコマンドを送信することによって、本実施形態のバックアップ処理を行うこともできる。大量のデータ転送を伴う書き込みコマンドに比べて削除通知コマンドのデータ転送量は少量であるため、バックアップ動作を高速に行うことができるとともに、書き込みによるクラウドストレージ２Ｂの信頼性劣化を抑制することができる。また、クラウドストレージ２Ｂの記憶媒体にＳＳＤを採用している場合は、クラウドストレージ２Ｂのフリーブロック数減少を抑制することができる。
【０１１６】
（第６の実施形態）
第２の実施形態では、バックアップ元記憶媒体として記憶装置２Ａを用いる場合について述べたが、第６の実施形態では、データのコピー元を主メモリ６とする。すなわち、この第６の実施形態では、アプリケーションプログラムが起動されて動作しているときに、アプリケーションプログラムが主メモリ６上に一時的に記憶されているアプリケーションプログラム用データを、不揮発性記憶装置２Ｂにコピーして保存する際に、第２の実施形態で説明した手法を採用する。なお、本実施形態において、記憶装置２Ａは必要ない。
【０１１７】
主メモリ６として、たとえばＤＲＡＭ(Dynamic Random Access Memory)やＳＲＡＭ(Static Random Access Memory)などの揮発性メモリや、ＭＲＡＭ(Magnetoresistive Random Access Memory)やＲｅＲＡＭ(Resistance Random Access Memory)などの不揮発性メモリが使用される。
【０１１８】
図３２にコンピュータシステム１の第６の実施形態の構成を示す。本実施形態においては、制御ツール２００はＯＳ１００に含まれるとするが、ＯＳ１００と制御ツール２００は主メモリ６の別の領域に格納されてもよい。主メモリ６の領域６ＤにはMicrosoft Word（登録商標）やMicrosoft Power Point（登録商標）等の一般的なアプリケーションプログラム４００が格納されている。アプリケーションプログラム４００はホスト装置３で実行されるプログラムであり、たとえばホスト装置３起動時に不揮発性記憶装置から主メモリ６に読み出される。ホスト装置３は、ＣＰＵ４の制御の下、アプリケーションプログラム４００を実行して、ハードウェア資源との協働作用により処理を実現する。アプリケーションプログラム４００は、主メモリ６上の領域６Ｅを作業領域として使用し、たとえばユーザがディスプレイ９とマウス１５を介してアプリケーションプログラム４００のＧＵＩ上で保存ボタンを押下したり、アプリケーションプログラム４００の自動保存機能が呼び出されると、図３３に示すように、アプリケーションプログラム４００は領域６Ｅのアプリケーションデータ５００を記憶装置２Ｂに保存するようＯＳ１００に命令を送信し、これによりＯＳ１００は領域６Ｅのデータを記憶装置２Ｂにバックアップコピーする。
【０１１９】
図３４は、第６の実施形態の制御ツール２００の動作例を示すフローチャートである。制御ツール２００は、コンピュータシステム１の起動時などに、図３５に示すように、バックアップ先不揮発性記憶装置２Ｂ内のＮＡＮＤメモリ１６Ｂに保存されたＯＳファイル管理テーブル（メタデータ）３００ｂを取得し、主メモリ６にＯＳファイル管理テーブル３００として保存する。アプリケーションプログラム４００からＯＳ１００に対して領域６Ｅのアプリケーションデータ５００を記憶装置２Ｂに保存する命令が送信されると（ステップＳ９００）、制御ツール２００は主メモリ６内の領域６Ｃに格納されたＯＳファイル管理テーブル（メタデータ）３００を読みだす（ステップＳ９１０）。これにより、制御ツール２００（ＯＳ１００）はデータを読み出すべき主メモリ６の領域６Ｅのアドレスと、保存すべきデータのＬＢＡを取得する（ステップＳ９２０）。ＯＳ１００は領域６Ｅからアプリケーションデータ５００を読み出す（ステップＳ９３０）。
【０１２０】
読みだしたアプリケーションデータ５００を判定するためには、読みだしたアプリケーションデータ５００を論理セクタ単位Ｄに分解することが望ましい（ステップＳ９４０）。制御ツール２００は、分解後の１つのデータＤを選択し（ステップＳ９５０）、分割データＤが関数ｆ（ｃＬＢＡ）と等しいかどうかを判定する（ステップＳ９６０）。分割データＤが関数ｆ（ｃＬＢＡ）と一致しないデータについては、たとえば非特許文献１のＡＣＳ−２に記述されている６１ｈ  ＷＲＩＴＥ  ＦＰＤＭＡ  ＱＵＥＵＥＤコマンドや３５ｈ  ＷＲＩＴＥ  ＤＭＡ  ＥＸＴコマンド、あるいはNVM Express Revision 1.1に記載されている01h Writeコマンドなどを用いるなどして、図３６に示すように、記憶装置２Ｂにデータを書き込む（ステップＳ９８０）。分割データＤが関数ｆ（ＬＢＡ）と一致しているデータについては、記憶装置２Ｂにデータ書き込み命令を送信せずに、図３７に示すように、記憶装置２Ｂの当該ＬＢＡにたいして、削除通知命令を送信する（ステップＳ９７０）。削除通知命令としては、たとえば非特許文献１のＡＣＳ−２に記述されている０６ｈ  ＤＡＴＡ  ＳＥＴ  ＭＡＮＡＧＥＭＥＮＴコマンドやＳＣＴコマンドや、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)などを用いる。たとえば、不揮発性記憶装置２Ｂが後述のDeterministic Zeroing TRIM機能を保有している場合、削除通知命令として、前記コマンドだけでなく、NVM Express Revision 1.1に記載されている08h Write Zeroesコマンドを用いても良い。また、トリムコマンドとして、SCSI Block Commands-3 (SBC-3), Revision 35, Dec.07.2012(http://www.t10.org/)に記述されている42h UNMAP commandを用いてもよい。
【０１２１】
制御プログラム２００は、全ての分割データに対し、それら処理を繰り返す（ステップＳ９５０〜Ｓ９９０）。制御プログラム２００は、主メモリ６のＯＳファイル管理テーブル（メタデータ）３００に、データ５００が書き込まれたＬＢＡを書き込む。また、主メモリ６のＯＳファイル管理テーブル３００を不揮発性記憶装置２Ｂの内のＮＡＮＤメモリ１６Ｂにバックアップ保存し、処理を終了する（ステップＳ９９５）。
【０１２２】
このように第６の実施形態においては、削除命令を利用して主メモリ６のデータを高速に記憶装置２Ｂにコピー保存することが可能となる。
【０１２３】
（第７の実施形態）
第７の実施形態では、記憶装置２Ａおよび記憶装置２Ｂのインタフェースとして、ネットワーク７００２を使用する場合について説明する。本実施形態では、図３８のコンピュータシステム１は、記憶部２Ａおよび記憶部２Ｂに接続されたネットワーク７００２を含んで構成される。
【０１２４】
ネットワーク７００２は、ストレージアクセスのためのストレージネットワークであり、たとえばファイバーチャネル(Fibre Channel)やイーサネット（登録商標）が用いられる。特に、ストレージネットワークとして、例えばＳＡＮ (Storage Area Network)やＮＡＳ (Network Attached Storage)が用いられる。ＳＡＮには、たとえば、ＦＣ−ＳＡＮ(Fibre Channel Storage Area Network)やＩＰ−ＳＡＮ (Internet Protocol Storage Area Network)が用いられ、その上位プロトコルとして、たとえば、ＳＣＳＩ (Small Computer System Interface)が用いられる。本実施形態では、ストレージネットワーク７００２としてＩＰ−ＳＡＮを採用した例を示し、その上位プロトコルとしてはｉＳＣＳＩ(Internet Small Computer System Interface)が利用されるものとする。ストレージネットワーク７００２にはネットワークスイッチ７００５やハブ（図示せず）が含まれる。
【０１２５】
ネットワーク７００１は、１〜複数のサーバ、１〜複数のクライアントをそれぞれ接続するネットワークであり、たとえばＬＡＮ(Local Area Network)やＷＡＮ(Wide Area Network)が用いられる。ＬＡＮとして、たとえばイーサネット（登録商標）が使用される。
【０１２６】
クライアント７００４は、ネットワーク７００１に接続され、所望の処理を遂行するコンピュータである。クライアント７００４は、典型的には、プロセッサと、メインメモリと、通信インタフェースと、ローカル入出力装置等のハードウェア資源を備え、また、デバイスドライバやオペレーティングシステム（ＯＳ）、アプリケーションプログラム等のソフトウェア資源を備える（図示せず）。これによって、クライアント７００４は、プロセッサの制御の下、各種のプログラムを実行して、ハードウェア資源との協働作用により処理を実現する。例えば、クライアント７００４は、プロセッサの制御の下、業務アプリケーションプログラムを実行することにより、データベースサーバ７００３を経由して記憶部２ＡにＩ／Ｏアクセスし、所望の業務システムを実現する。
【０１２７】
データベースサーバ（ＤＢサーバ）７００３は、ネットワーク７００１とストレージネットワーク７００２に接続され、データベース管理システム(ＤＢＭＳ：Database management system)が稼働しているサーバであり、クライアント７００４からのデータ読み出し要求を受信すると、記憶部２Ａや記憶部２Ｂからデータを読みだしてクライアント７００４に読み出しデータを送信し、クライアント７００４からのデータ書き込み要求を受信するとクライアント７００４から書き込みデータを受信して記憶部２Ａや記憶部２Ｂにデータを書き込む。データベースサーバ７００３は、記憶部２Ａや記憶部２Ｂの記憶データを管理するための管理情報（メタデータ）を記憶している。
【０１２８】
記憶部２Ａは、それ単体で、ＤＢサーバ７００３に対するデータストレージサービスを提供してもよいし、複数のストレージ装置から仮想的に構成される１つのストレージ装置として、ＤＢサーバ７００３に対するデータストレージサービスを提供してもよい。記憶部２Ａには、ＤＢサーバ７００３に提供するための１つ以上の論理デバイス（ＬＤＥＶ）が形成される。論理デバイスは、ＲＡＩＤ制御の下、いくつかのハードディスクドライブを仮想的に１つのデバイスにまとめた仮想デバイス（ＶＤＥＶ）に対して形成されてもよい。
【０１２９】
論理デバイス（ＬＤＥＶ）は、ＤＢサーバ７００３が認識しうる論理的な記憶装置であり、論理ユニット（ＬＵ）が割り当てられ、ＤＢサーバ７００３は、物理デバイス上に形成された論理デバイスを論理ユニットとして認識する。各論理ユニットには、論理ユニット番号（ＬＵＮ）が付与される。また、論理ユニットは、論理セクタ（論理ブロック）に分割され、各論理セクタには、ＬＢＡが割り当てられる。ＤＢサーバ７００３は、論理ユニット番号及びＬＢＡからなる論理アドレスを含むコマンドをストレージ装置に与えることにより、特定の論理ユニットにおける特定の論理セクタに対してアクセスすることができる。上述のようにｉＳＣＳＩを利用した本実施形態では、ＤＢサーバ７００３、記憶部２Ａ、及び記憶部２Ｂはそれぞれ、ｉＳＣＳＩネームが割り当てられたｉＳＣＳＩノードとしてのイニシエータ及びターゲットとして機能する。従って、ＤＢサーバ７００３、記憶部２Ａ、及び記憶部２Ｂは、ＩＰアドレス及びＴＣＰポート番号の組み合わせで特定されるネットワークポータルを介して、ｉＳＣＳＩ ＰＤＵを送受する。従って、ＤＢサーバ７００３は、ｉＳＣＳＩネーム、ＩＰアドレス、及びＴＣＰポート番号を指定することにより、ネットワーク７００２上の記憶部２Ａおよび記憶部２Ｂを認識し、その論理ユニット内の論理セクタに対してアクセスする。なお、クライアント７００４はＤＢサーバ７００３を経由せずにストレージネットワーク７００２に直接接続されてもよい。
【０１３０】
ストレージネットワーク７００２にはバックアップサーバ７０００が接続され、制御ツール２００がバックアップサーバ７０００内の主メモリに格納されている。なお、ＤＢサーバ７００３がバックアップサーバ７０００の機能を具備してもよい。また、制御ツール２００の機能は、バックアップサーバ７０００の一部である制御ツール２００としてではなく、図３９に示すように、ネットワークスイッチ７００５の一部である制御部２００として実装されてもよいし、図４０に示すように、バックアップ元記憶装置２Ａの一部である制御部２００としても実装されてもよい。さらに、クライアント７００４の一部である制御部２００として実装されてもよい。
【０１３１】
なお、記憶部２Ａのデータの記憶部２Ｂへのバックアップをディザスタリカバリのために行う場合には、記憶部２Ａおよび記憶部２Ｂの物理的配置を１００キロメートル以上の距離を離しておくことが望ましく、その場合には図４１に示すように、記憶部２Ａと記憶部２Ｂは、チャネルエクステンダ７００６ａ、７００６ｂを介し、ＷＡＮ(Wide Area Network)または専用線のような長距離ネットワーク７００７を経由して接続されることが望ましい。
【０１３２】
本実施形態では、バックアップ元記憶部２Ａとバックアップ先記憶部２Ｂが異なる記憶装置である場合について説明するが、同一の記憶装置内の異なる記憶領域をそれぞれ記憶部２Ａおよび記憶部２Ｂとした場合であっても、本発明は適用可能である。つまり、同一の記憶装置に対して２つ以上のＬＤＥＶが形成されそれぞれにＬＵが割り当てられている場合、たとえばあるＬＵを記憶部２Ａとし、別のＬＵを記憶部２Ｂとし、記憶部２Ａのデータを記憶部２Ｂにコピーする場合においても、本発明は適用可能である。ＬＵからＬＵへのデータコピーは、ＬＵ内の全ＬＢＡ領域をコピーする場合であっても、ＬＵの一部ＬＢＡ領域をコピーする場合であっても、本発明は適用可能である。
【０１３３】
図４２に、本実施形態における制御ツール２００（制御部２００）のバックアップ動作を示す。バックアップが開始されると、バックアップサーバ７００内の制御プログラム２００は、データコピー対象ＬＢＡのポインタであるｃＬＢＡを、データコピー開始ＬＢＡとしてたとえばゼロにセットする（Ｓ１０００）。制御プログラム２００は、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌのデータを読み出す命令を記憶部２Ａに送信する（ステップＳ１０１０）。記憶部２Ａからの読み出し命令としては、たとえばSCSI Block Commands-3 (SBC-3), T10/BSR INCITS 514, Revision 35 (http://www.t10.org/)に記述されている28h READ (10)コマンドやA8h READ (12)コマンドや88h READ (16)コマンドや7Fh READ (32)コマンドなどを用いる。読み出し命令を受信した記憶部２Ａは、当該ＬＢＡ領域の読み出しデータ（Ｄ）をストレージネットワーク７００２を介してバックアップサーバ７０００に送信し、バックアップサーバ７０００はデータＤを受信する（ステップＳ１０２０）。
【０１３４】
制御プログラム２００は、データＤを関数ｆ（ｃＬＢＡ）と比較する（ステップＳ１０３０）。データＤが関数ｆ（ｃＬＢＡ）と等しくない場合（ステップＳ１０３０：Ｎｏ）は、制御プログラム２００は、ＬＢＡ＝ｃＬＢＡから論理セクタ数＝Ｌのデータを書き込む命令とデータＤを記憶部２Ｂに送信する（ステップＳ１０４０）。これにより、記憶部２Ｂは、データＤをＮＡＮＤメモリ１６Ｂに書きこむ。記憶部２Ｂへの書き込み命令としては、たとえば前述のSBC-3に記述されている2Ah WRITE (10)コマンドやAAh WRITE (12)コマンドや8Ah WRITE (16)コマンドや7Fh WRITE (32)コマンドなどを用いる。
【０１３５】
Ｄがｆ（ｃＬＢＡ）と等しい場合（ステップＳ１０３０：Ｙｅｓ）、制御プログラム２００はＬＢＡ＝ｃＬＢＡから論理セクタ数＝ＬのＬＢＡ領域に対する削除通知を記憶部２Ｂに送信する（ステップＳ１０５０）。記憶部２ＢのＳＳＤＣ４１Ｂは管理情報４２Ｂを書き換えて、当該ＬＢＡ領域に対応するデータをデバイス無効データに変える。記憶部２Ｂへの削除通知命令としては、たとえば前述のSBC-3に記述されている42h UNMAPコマンドなどを用いる。
【０１３６】
ステップＳ１０４０またはステップＳ１０５０が完了すると、制御プログラム２００はｃＬＢＡをＬだけインクリメントし（ステップＳ１０６０）、ステップＳ１０１０〜ステップＳ１０５０のサブルーチンを全小領域に対して実行する。ｃＬＢＡが記憶部２Ｂのアクセス可能最大ＬＢＡを超過したとき全ＬＢＡ領域の読み出しが完了したことになり（ステップＳ１０７０：Ｙｅｓ）、バックアップ処理が完了する。
【０１３７】
バックアップを行う範囲として、記憶部２Ａ全体をバックアップしてもよいし、記憶部２Ａの一部をバックアップしてもよい。記憶部２Ａの一部をバックアップする場合、たとえば記憶部２Ａの論理ユニット（ＬＵ）単位内の全ＬＢＡについて記憶部２Ｂにバックアップするようにしてもよく、その場合、記憶部２Ｂに論理ユニット（ＬＵ）を割り当て、記憶部２Ａの論理ユニット（ＬＵ）から記憶部２Ｂの論理ユニット（ＬＵ）にデータをコピーする。
【０１３８】
図４０に示したように、バックアップ元記憶装置２Ａの一部に制御部２００が実装されている場合、本実施形態における制御ツール２００（制御部２００）のバックアップ動作としてサーバーフリーバックアップを採用してもよく、その場合たとえば拡張コピーコマンドが用いられる。拡張コピーコマンドとして、たとえばSCSI Primary Commands-3 (SPC-3), INCITS T10/1731-D, Revision 36e (http://www.t10.org/)に記述されている83h EXTENDED COPYコマンドを用いてもよい。バックアップサーバ７０００またはデータベースサーバ７００３またはネットワークスイッチ７００５またはクライアント７００４は、バックアップ対象領域とバックアップ先のアドレスとを含む拡張コピーコマンドを記憶装置２Ａに送信すると、制御部２００はバックアップ対象領域に関して図１８に示した処理と同様のバックアップ処理を行う。すなわち、制御部２００は、拡張コピーコマンドにおいて指定された記憶装置２Ａのバックアップ対象先頭ＬＢＡからバックアップ対象末尾ＬＢＡまでの領域に対して記憶装置２Ａからのデータ読み出しを繰り返し、読み出しデータＤがｆ（ｃＬＢＡ）に等しいかどうかを判定し、Ｄ≠ｆ（ｃＬＢＡ）の時、書き込み命令およびデータＤをストレージネットワーク７００２を介して記憶装置２Ｂに送信し、Ｄ＝ｆ（ｃＬＢＡ）の時、削除通知をストレージネットワーク７００２を介して記憶装置２Ｂに送信する。これにより、記憶装置２Ｂはデータ書き込み処理または削除通知処理を行う。
【０１３９】
（第８の実施形態）
第７の実施形態では、ストレージネットワーク７００２内でデータをバックアップする場合について述べたが、図４３に示すように、クライアント７００４Ａに接続された記憶部２Ａのデータをストレージネットワーク７００２に接続された記憶部２Ｂにバックアップするようにしてもよい。このバックアップの際、制御ツール２００は、記憶部２Ａのバックアップ対象先頭ＬＢＡからバックアップ対象末尾ＬＢＡまでの領域に対して記憶部２Ａからのデータ読み出しを繰り返し、読み出しデータＤがｆ（ｃＬＢＡ）に等しいかどうかを判定し、Ｄ≠ｆ（ｃＬＢＡ）の時、書き込み命令およびデータＤをストレージネットワーク７００２を介して記憶部２Ｂに送信し、Ｄ＝ｆ（ｃＬＢＡ）の時、削除通知をストレージネットワーク７００２を介して記憶部２Ｂに送信する。
【０１４０】
また、図４４に示すように、ストレージネットワーク７００２に接続された記憶部２Ａのデータをクライアント７００４Ａに接続された記憶部２Ｂにバックアップするようにしてもよい。このバックアップの際、制御ツール２００は、記憶部２Ａのバックアップ対象先頭ＬＢＡからバックアップ対象末尾ＬＢＡまでの領域に対して記憶部２Ａからのデータ読み出しを繰り返し、読み出しデータＤがｆ（ｃＬＢＡ）に等しいかどうかを判定し、Ｄ≠ｆ（ｃＬＢＡ）の時、書き込み命令およびデータＤを記憶部２Ｂに送信し、Ｄ＝ｆ（ｃＬＢＡ）の時、削除通知をストレージネットワーク７００２を介して記憶部２Ｂに送信する。
【０１４１】
（第９の実施形態）
第９の実施形態では、記憶部２Ａ、２Ｂのインタフェースとして、第７の実施形態と同様にネットワーク７００２を使用し、かつファイル単位でバックアップを行う場合について説明する。図４５のコンピュータシステム１は、ストレージネットワーク７００２に接続されたメタデータサーバ(ＭＤＳ)７００８と、記憶部２Ａ、記憶部２Ｃに分散管理されるメタデータ３００を含んで構成される。
【０１４２】
メタデータ３００はたとえば第２の実施形態や第６の実施形態や図３５に示したＯＳファイル管理情報３００と同様の構造を保有してもよいし、その他の構造を保有しても良い。メタデータ３００の管理アルゴリズムとしては、ブロックアルゴリズムやＢ+treeアルゴリズムを使用することができる。本実施形態では、メタデータ３００が図４６に示す構造を有する場合について説明する。メタデータ３００は、ファイル識別ＩＤと、ファイルが格納されている記憶部を特定するための記憶部識別ＩＤと、ファイルが格納されている領域の先頭ＬＢＡを示すＬＢＡと、ファイルのデータ長を示すセクタカウントと、ファイルの所有者ＩＤと、ファイルの最終更新時刻と、その他属性情報からなる。記憶部識別ＩＤは、各記憶部固有の番号であることが望ましく、たとえばWorld Wide Name (ＷＷＮ)やＩＰアドレスやＭＡＣアドレスなどを使用可能である。メタデータ３００はバックアップ元である記憶部２Ａにのみ格納されてもよいが、システム全体の信頼性および性能向上の観点では、記憶部２Ａや記憶部２Ｂ以外の記憶部であり、ストレージネットワーク７００２に接続された記憶部２Ｃと記憶部２Ａに分散管理されることが望ましい。あるいは、メタデータ３００は、ストレージネットワーク７００２上の記憶部にではなく、メタデータサーバ７００８に接続されたローカル入出力装置（図示せず）に格納されてもよい。
【０１４３】
メタデータサーバ（ＭＤＳ）７００８は、ストレージネットワーク７００２に接続され、記憶部２Ａや記憶部２Ｂや記憶部２Ｃに格納されるファイルデータのメタデータを管理することで、システム１においてファイルシステムを構築する。ファイルシステムとしては、例えば、ＳＡＮファイルシステムやクラスタファイルシステムやＲＡＩＮ（Redundant Array of Inexpensive/Independent Nodes）ファイルシステムやｐＮＦＳ (parallel Network File System)やGoogle File System (ＧＦＳ)などを採用可能である。メタデータサーバ７００８は、典型的には、プロセッサと、メインメモリと、通信インタフェースと、ローカル入出力装置等のハードウェア資源を備え、また、デバイスドライバやオペレーティングシステム（ＯＳ）、メタデータ管理プログラム等のソフトウェア資源を備える（図示せず）。これによって、メタデータサーバ７００８は、プロセッサの制御の下、各種のプログラムを実行して、ハードウェア資源との協働作用により処理を実現する。
【０１４４】
クライアント７０１０は、ストレージネットワーク７００２に接続され、所望の処理を遂行するコンピュータである。クライアント７０１０は、典型的には、プロセッサと、メインメモリと、通信インタフェースと、ローカル入出力装置等のハードウェア資源を備え、また、デバイスドライバやオペレーティングシステム（ＯＳ）、アプリケーションプログラム等のソフトウェア資源を備える（図示せず）。これによって、クライアント７０１０は、プロセッサの制御の下、各種のプログラムを実行して、ハードウェア資源との協働作用により処理を実現する。例えば、クライアント７０１０は、プロセッサの制御の下、業務アプリケーションプログラムを実行することにより、記憶部２Ａおよび記憶部２Ｂおよび記憶部２Ｃにファイルアクセスし、所望の業務システムを実現する。
【０１４５】
ファイルアクセスにおいてファイルの格納位置や属性情報が必要となるが、これらはクライアント７０１０がメタデータサーバ７００８から取得する。たとえば、クライアント７０１０があるファイルからのデータ読み出しが必要となった時、クライアント７０１０は前記ファイルのファイル識別ＩＤを含むファイル情報読み出し要求をメタデータサーバ７００８に送信し、メタデータサーバ７００８はメタデータ３００からファイル識別ＩＤを検索し、該当する行の記憶部識別ＩＤやＬＢＡやセクタカウントや属性情報等をクライアント７０１０に送信し、クライアントは記憶部識別ＩＤにより特定された記憶部に対してＬＢＡとセクタカウントを含むデータ読み出し命令を送信し、特定された記憶部はＬＢＡからセクタカウント長のデータを読みだしてクライアント７０１０に送信する。
【０１４６】
たとえば、クライアント７０１０があるファイルへのデータ書き込みが必要となった時、クライアント７０１０はファイルのファイル識別ＩＤやファイルサイズを含む書き込み領域割り当て要求をメタデータサーバ７００８に送信し、メタデータサーバ７００８はメタデータ３００をもとにファイルを書き込むべき記憶部識別ＩＤやＬＢＡを検索し、記憶部識別ＩＤやＬＢＡや属性情報等をクライアント７０１０に送信し、クライアント７０１０は記憶部識別ＩＤにより特定された記憶部に対してLBAとセクタカウントを含むデータ書き込み命令と書き込みデータを送信し、特定された記憶部はＬＢＡからセクタカウント長の領域にデータを書き込む。
【０１４７】
図４７に、本実施形態における制御ツール２００（制御部２００）のバックアップ動作を示す。記憶部２Ａからの読み出し命令としては、たとえば前述のSBC-3に記述されている28h READ (10)コマンドやA8h READ (12)コマンドや88h READ (16)コマンドや7Fh READ (32)コマンドなどを用いる。記憶部２Ｂへの書き込み命令としては、たとえば前述のSBC-3に記述されている2Ah WRITE (10)コマンドやAAh WRITE (12)コマンドや8Ah WRITE (16)コマンドや7Fh WRITE (32)コマンドなどを用いる。記憶部２Ｂへの削除通知命令としては、たとえば前述のSBC-3に記述されている42h UNMAPコマンドなどを用いる。
【０１４８】
制御ツール２００は、メタデータサーバ７００８にファイルＩＤリスト取得要求を送信する（ステップＳ１１００）。メタデータサーバ７００８はメタデータ３００を読み出し、登録されているファイルのＩＤリストを取得し、ファイルＩＤリストをたとえば図４８に示すようなデータ構造で制御ツール２００に送信する（ステップＳ１１１０）。ファイルＩＤリストは、たとえばメタデータ３００に含まれる全ファイルのファイルＩＤリストであってもよいし、あるいは記憶部２Ａや特定のフォルダや特定のＬＵに含まれる全てのファイルなど、メタデータ３００に登録されているファイルのうち一部のファイルのファイルＩＤリストであってもよい。本実施形態では、記憶部２Ａに含まれる全ファイルをバックアップする場合について説明する。制御ツール２００は受信したファイルＩＤリストをバックアップ対象ファイルリストとしてバックアップサーバ７０００内の主メモリに格納する（ステップＳ１１２０）。
【０１４９】
制御ツール２００は、バックアップファイルリスト内のそれぞれのファイルについて、ファイル識別ＩＤを含むファイル情報読み出し要求をメタデータサーバ７００８に送信し、メタデータサーバ７００８はメタデータ３００からファイル識別ＩＤを検索し、ファイルが格納されているＬＢＡ(＝ｃＬＢＡ)やファイルサイズとしてのセクタカウント（＝ｃＬ）を制御ツール２００に送信する。（ステップＳ１１３０）
【０１５０】
制御ツール２００はファイルのファイル識別ＩＤとセクタカウントｃＬを含む書き込み領域割り当て要求をメタデータサーバ７００８に送信し、メタデータサーバ７００８はメタデータ３００をもとにファイルを書き込むべき記憶部識別ＩＤやＬＢＡ（＝ｔＬＢＡ）を検索し、バックアップ先としての記憶部２Ｂの記憶部識別ＩＤやｔＬＢＡを制御ツール２００に送信する（Ｓ１１４０）。書き込み領域割り当て要求の際、制御ツール２００は書き込み領域に記憶部２Ａの領域を割り当てないよう、書き込み領域割り当て要求内で明示的に指定することが望ましい。
【０１５１】
制御ツール２００は記憶部２Ａに対してｃＬＢＡとセクタカウントｃＬを含むデータ読み出し命令を送信し、記憶部２ＡはＬＢＡからデータを読みだして制御ツール２００に送信する。（Ｓ１１５０）。制御ツール２００は記憶部２Ａから受信したデータをたとえば論理セクタ単位(＝Ｄ)に分解し（ステップＳ１１６０）、制御ツール２００はそれぞれの分解データＤと該Ｄを書き込むＬＢＡ(＝ｔＬＢＡ)に対してＤ＝ｆ(ｔＬＢＡ)であるかどうかを判定する（ステップＳ１１７０、Ｓ１１８０）。
【０１５２】
制御ツール２００は、Ｄ≠ｆ(ｔＬＢＡ)のとき、ｔＬＢＡにデータＤを書き込む命令とデータＤを記憶部２Ｂに送信し（ステップＳ１１９０）、Ｄ＝ｆ(ｔＬＢＡ)のとき、記憶部２ＢにｔＬＢＡの削除通知を送信する（ステップＳ１２００）。Ｓ１１９０とＳ１２０００の処理効率改善のために、データ書き込み命令が連続する場合には、複数のデータ書き込み命令や書き込みデータを結合して記憶部２Ｂに送信したり、削除通知が連続する場合には、複数の削除通知を結合して記憶部２Ｂに送信したりすることが望ましい。
【０１５３】
また、制御ツール２００は、バックアップされたファイルの記憶部識別ＩＤを記憶部２ＡのＩＤから記憶部２ＢのＩＤに書き換えるようメタデータサーバ７００８に命令する。ｃＬＢＡ≠ｔＬＢＡの場合は、制御ツール２００は、バックアップされたファイルのｃＬＢＡをｔＬＢＡに書き換えるようメタデータサーバ７００８に命令する（ステップＳ１１７０）。なお、ｃＬＢＡとｔＬＢＡの関係は、ｃＬＢＡ=ｔＬＢＡであってもよいし、ｃＬＢＡ≠ｔＬＢＡであってもよい。
【０１５４】
（第１０の実施形態）
第１〜第９の実施形態による手法を用いれば、制御ツール２００によって、記憶部２Ａに格納されたユーザデータを記憶部２Ｂに高速にコピーすることが可能となる。記憶装置２Ａの購入者であるエンドユーザは、購入した記憶装置２Ａが信頼性劣化した時、制御ツール２００を用いて新しく購入した信頼性の良い記憶装置２Ｂにデータをコピーすることでデータを救出することが可能である。一方、エンドユーザ自身がデータをリカバリするのではなく、記憶装置２Ａや記憶装置２Ｂの販売業者が無償あるいは有償サービスとして、またはデータ復旧サービス業者が有償サービスとして、記憶装置２Ａから記憶装置２Ｂへのエンドユーザのデータの救出サービスを行なっても良い。本実施形態では、このような企業サービスとしてのデータ救出サービスについて説明する。なお、本実施形態で説明するデータ救出サービスは、第１〜第９の実施形態の手法を用いても良いし、用いなくても良いが、第１〜第９の実施形態の手法を組み合わせることで、より高速にデータ救出できるとともに、バックアップ先の記憶装置２Ｂへのデータ書き込み量を低減することで記憶装置２Ｂを長寿命することができる。
【０１５５】
エンドユーザは記憶装置２Ａを購入すると、パーソナルコンピュータやサーバやゲーム機器やデジタルカメラなどの情報処理装置３にインタフェース２Ａを経由して接続した記憶装置２Ａにデータを書き込んだり記憶装置２Ａからデータを読みだしたりすることで記憶装置２Ａを使用する。
【０１５６】
記憶装置２Ａは、使用が増加していくうちに経年劣化したり、偶発的な不良が累積したり、記憶装置２Ａがバグを保有していたりすることで、ある日突然起動しなくなったり正常に読み書きできなくなったりする故障が発生することがある。このような故障状態においては、エンドユーザは過去に記憶装置２Ａに格納した業務文書や写真や電子メールなどのユーザデータを読み出すことができなってしまう。よって、記憶装置２Ａが故障状態に到達する前に、ユーザデータを信頼性の良い記憶装置である記憶装置２Ｂにあらかじめコピーして救出しておくことが望ましい。
【０１５７】
データ救出サービスでは、データ救出の際にユーザデータを誤って消さないようにし、かつ記憶装置２Ａ故障予知時点や故障に到達してから記憶装置２Ａの信頼性をさらに悪化させないようデータ救出を可及的速やかに行う。
【０１５８】
また、データ救出サービスは、記憶装置２Ａが故障状態に到達した後であっても、記憶装置２Ａからデータを救出する。たとえば、特許第号４,６４３,６７１号公報に記載のリードオンリーモードやライトプロテクトモードに到達した時、特許第５,００２,７１２号公報に記載のように、記憶装置２Ａは受信した書き込みコマンドを正常に処理できなくなるため、Windows（登録商標）のようなＯＳは記憶装置２Ａを正常に認識することができず、エンドユーザがユーザデータを救出することが困難になる。データ救出サービスを行う業者は、データ救出に使用するホスト装置３に、たとえば本実施形態で説明した制御ツール２００や、たとえば特許第５,００２,７１２号公報に採用の制御プログラムを搭載することで、そのような故障状態であってもユーザデータを救出することができる。
【０１５９】
図４９は、ユーザデータ救出サービスにおいて、記憶装置２Ａの故障予知時点（または故障到達）の段階から、ユーザデータを記憶装置２Ｂに救出した段階に至るまでの手順を説明する図である。ユーザデータ救出サービスは、たとえば記憶装置２Ａや記憶装置２Ｂの販売業者が無償あるいは有償サービスとして行なっても良いし、またはデータ復旧サービス業者が有償サービスとして記憶装置２Ａから記憶装置２Ｂへのエンドユーザのデータの救出サービスを行なっても良い。
【０１６０】
記憶装置２Ａの故障は、記憶装置２ＡからたとえばS.M.A.R.T情報のような統計情報を収集することにより、故障をあらかじめ事前予知したり、故障到達を知ることが可能である。記憶装置２Ａの故障はたとえば、特許第５,００２,７１２号公報や特許第４,７６４,４９０号公報や特開２０１１−２０９８７９号公報に開示される技術を用いてエンドユーザの使用する故障予知ソフトウェアが事前予知することができる。
【０１６１】
エンドユーザは、故障予知ソフトウェアにより、たとえばディスプレイ９を経由して故障予知や故障を通知されると、記憶装置２Ａをホスト装置３から取り外し、データ救出サービスセンター宛（データ救出サービス業者宛）に記憶装置２Ａを郵送する。
【０１６２】
サービスセンターは、記憶装置２Ａをユーザから受け取る。サービスセンターは、記憶装置２Ａのデータのコピー先（救出先）として、信頼性の良い記憶装置である記憶装置２Ｂを用意する。たとえば、サービスセンターは記憶装置２Ａのデータコピー先として、記憶装置２Ｂを新たに製造したり、記憶装置２Ｂを新たに購入したりする。
【０１６３】
サービスセンターは、データ救出サービス用の装置であるデータ救出に使用するホスト装置３に、バックアップ元である記憶装置２Ａとバックアップ先である記憶装置２Ｂを接続し、記憶装置２ＡのユーザデータＤ００１を記憶装置２Ｂにコピーする。当該コピー処理は、たとえば本第１〜第９の実施形態に記載のコピー処理（バックアップ処理）により行なうことが望ましい。データ救出に使用するホスト装置３は、たとえば本実施形態で紹介の制御ツール２００や、たとえば特許第５,００２,７１２号に採用の制御プログラムを具備することが望ましい。
【０１６４】
記憶装置２Ａの信頼性をさらに劣化させないという観点では、記憶装置２Ａに対しては書き込み動作を行わないことが望ましい。また、記憶装置２Ａのインタフェースコントローラ４２Ｂが信頼性劣化しているとホスト装置３との通信中にＣＲＣエラーやＲエラーなどの通信エラーを起こすおそれがあるため、データ救出サービスが必要なホスト装置３は、インタフェース１９Ａのリンク速度を可能な限り低速となるよう制御することが望ましい。たとえばインタフェース１９Ａや、記憶装置２Ａのインタフェースコントローラ４２ＢがSerial ATAのGeneration3の最大リンク速度である6.0Gbps対応であるときには、より低いリンク速度である3.0Gbpsや最低のリンク速度である1.5Gbpsで記憶装置２Ａと通信することが望ましい。また、インタフェース１９ＡがＰＣＩExpressのような多レーン通信対応である場合には、記憶装置２Ａのインタフェースコントローラ４２Ｂが信頼性劣化していると、ホスト装置３との通信中にレーン間デスキューに失敗するなどの通信エラーを起こすおそれがあるため、データ救出に使用するホスト装置３は、インタフェース１９Ａのリンクレーン数を可能な限り低速となるよう制御することが望ましい。たとえばインタフェース１９Ａや、記憶装置２Ａのインタフェースコントローラ４２ＢがＰＣＩ Expressの４レーン通信対応であるときには、より小さいレーン数である２レーンや最低のレーン数である１レーンで記憶装置２Ａと通信することが望ましい。コピー動作終了後に、データ救出に使用するホスト装置３は、記憶装置２Ｂに格納されたユーザデータＤ００１を読みだして、記憶装置２Ａから読みだしたデータと比較して一致していることを確認することが望ましい（ベリファイ動作）。
【０１６５】
サービスセンターは、バックアップ先である記憶装置２Ｂをエンドユーザに郵送する。あるいは、サービスセンターは、救出したデータＤ００１を電子メールでユーザに送信したりやクラウドストレージにアップロードしたりして、ユーザに電子的に送信しても良い。ユーザは、救出されたデータＤ００１を入手する。
【０１６６】
（変形例）
上記各実施形態では、バックアップ元の不揮発性記憶装置２ＡとしてＳＳＤを例に挙げて説明したが、各実施形態はＳＳＤ以外の不揮発性記憶装置にも広く適用可能であり、例えば、磁性媒体（プラッタ）を用いたハードディスクドライブ（ＨＤＤ）や、ＮＡＮＤ型フラッシュメモリと磁性媒体（プラッタ）の両方を用いたハイブリッドハードディスクドライブ（ハイブリッドＨＤＤ）に適用することも可能である。削除通知命令が送信される先はバックアップ先の不揮発性記憶装置２Ｂであって、バックアップ元の不揮発性記憶装置２Ａではないため、バックアップ元の不揮発性記憶装置２Ａが削除通知命令をサポートしていなくても本発明は適用可能である。
【０１６７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６８】
１  情報処理装置（コンピュータシステム）、２Ａ，２Ｂ  不揮発性記憶装置、３  ホスト装置、６  主メモリ、１６Ａ，１６Ｂ  ＮＡＮＤ型フラッシュメモリ、１００  ＯＳ、２００  制御プログラム（制御ツール）。
【図１】
0005586718.tif 000002
【図２】
0005586718.tif 000003
【図３】
0005586718.tif 000004
【図４】
0005586718.tif 000005
【図５】
0005586718.tif 000006
【図６】
0005586718.tif 000007
【図７】
0005586718.tif 000008
【図８】
0005586718.tif 000009
【図９】
0005586718.tif 000010
【図１０】
0005586718.tif 000011
【図１１】
0005586718.tif 000012
【図１２】
0005586718.tif 000013
【図１３】
0005586718.tif 000014
【図１４】
0005586718.tif 000015
【図１５】
0005586718.tif 000016
【図１６】
0005586718.tif 000017
【図１７】
0005586718.tif 000018
【図１８】
0005586718.tif 000019
【図１９】
0005586718.tif 000020
【図２０】
0005586718.tif 000021
【図２１】
0005586718.tif 000022
【図２２】
0005586718.tif 000023
【図２３】
0005586718.tif 000024
【図２４】
0005586718.tif 000025
【図２５】
0005586718.tif 000026
【図２６】
0005586718.tif 000027
【図２７】
0005586718.tif 000028
【図２８】
0005586718.tif 000029
【図２９】
0005586718.tif 000030
【図３０】
0005586718.tif 000031
【図３１】
0005586718.tif 000032
【図３２】
0005586718.tif 000033
【図３３】
0005586718.tif 000034
【図３４】
0005586718.tif 000035
【図３５】
0005586718.tif 000036
【図３６】
0005586718.tif 000037
【図３７】
0005586718.tif 000038
【図３８】
0005586718.tif 000039
【図３９】
0005586718.tif 000040
【図４０】
0005586718.tif 000041
【図４１】
0005586718.tif 000042
【図４２】
0005586718.tif 000043
【図４３】
0005586718.tif 000044
【図４４】
0005586718.tif 000045
【図４５】
0005586718.tif 000046
【図４６】
0005586718.tif 000047
【図４７】
0005586718.tif 000048
【図４８】
0005586718.tif 000049
【図４９】
0005586718.tif 000050