本実施形態では、トリムコマンドをバックアップ動作に取り込むことで、ホスト有効−デバイス有効データをホスト有効−デバイス無効データとして処理し、これによりSSDのデータのバックアップを高速化し、バックアップ先のSSDのフリーブロック数を増大させ、バックアップ先のSSDの書き込み量を低減させることを実現する。
まず、本明細書中で使用する用語について説明する。
・ホスト無効−デバイス有効データ("host-invalid and device-valid data"):ホスト(OS)にとって無効だが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”):少なくとも不揮発性記憶装置にとっては無効なデータ
以下に添付図面を参照して、実施形態にかかる制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1に情報処理装置の一例であるコンピュータシステム1の第1の実施形態の構成を示す。本コンピュータシステム1は、記憶装置2Aと、ホスト装置3と、不揮発性記憶装置2Aとホスト装置3とを結ぶメモリインタフェース19Aと、記憶装置2Aのバックアップ用の不揮発性記憶装置2Bが取り付け可能なメモリインタフェース19Bから構成されている。本実施形態では、記憶装置2Aは不揮発性記憶装置2Aとし、不揮発性記憶装置2A、2Bとして、SSD(Solid State Drive)を用いるが、たとえば、ハードディスクドライブ、ハイブリッドディスクドライブ、SDカード、USBメモリ、NAND型フラッシュメモリ、ReRAM (Resistance Random Access Memory)、磁気テープなど、他の不揮発性記憶装置であってもよい。また、不揮発性記憶装置2Aと不揮発性記憶装置2Bは異なる種類の不揮発性記憶装置であってもよいが、不揮発性記憶装置2Bのアクセス可能な論理アドレスであるLBA(Logical Block Addressing)の最大値(LBA Count)は不揮発性記憶装置2AのLBA Countと等しいか、あるいは不揮発性記憶装置2AのLBA Countよりも大きいことが望ましい。また、記憶装置2Aとして、不揮発性記憶装置ではなく、揮発性記憶装置であるDRAM (Dynamic Random Access Memory)やSRAM (Static Random Access Memory)を用いてもよい。また、記憶装置2Aは、書き込みと読み出しのうち読み出しのみ可能な記憶装置であってもよい。
また、本実施形態では、インタフェース19A、19Bとして、SATA(Serial Advanced Technology Attachment)インタフェースを用いるが、USB(Universal Serial Bus)やSAS(Serial Attached SCSI)やThunderbolt(登録商標)やPCI ExpressやLAN(Local Area Network)やファイバーチャネルやイーサネット(登録商標)など他のインタフェースであってもよい。インタフェース19Aおよびインタフェース19Bは異なる種類のインタフェースであってもよい。たとえば、インタフェース19AがSATAインタフェースであって、インタフェース19BがUSBインタフェースであってもよい。
また、バックアップ先の不揮発性記憶装置2Bは、ネットワークドライブやクラウドストレージのような、ネットワークを介してホスト装置3に取り付けられることで、物理的にはホスト装置3と離れた場所に設置されていてもよい。本実施形態では、一例として、インタフェース19BにSATAインタフェースが採用された場合の例を示す。
CPU(制御回路)4がホスト装置3における中央演算処理装置であり、ホスト装置3における種々の演算及び制御はCPU4によって行われる。CPU4はサウスブリッジ7を介して不揮発性記憶装置2A,2Bや、DVD−ROMなどの光学ドライブ10の制御を行う。CPU4は、ノースブリッジ5を介して、主メモリ6の制御を行う。主メモリ6としては、たとえばDRAMを採用してよい。
ユーザは、キーボード14やマウス15などの入力装置を通してホスト装置3の制御を行い、キーボード14やマウス15からの信号は、USB(Universal Serial Bus)コントローラ13及びサウスブリッジ7を介してCPU4で処理される。CPU4は、ノースブリッジ5及び表示コントローラ8を介してディスプレイ(表示装置)9に画像データやテキストデータなどを送る。ユーザは、ディスプレイ9を介してホスト装置3からの画像データやテキストデータなどを視認することができる。
CPU4は、コンピュータシステム1の動作を制御するために設けられたプロセッサであり、不揮発性記憶装置2Aから主メモリ6にロードされるオペレーティングシステム(OS)100を実行する。更に、光学ドライブ10が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU4は、それらの処理を実行する。また、CPU4は、BIOS(Basic Input/Output System)−ROM11に格納されたシステムBIOSも実行する。尚、システムBIOSは、コンピュータシステム1内のハードウェア制御のためのプログラムである。ROM11には、システムBIOSの代わりに、UEFI(Unified Extensible Firmware Interface)ファームウェアが格納され、CPU4に実行されてもよい。その他、CPU4は、サウスブリッジ7を介してLAN(Local Area Network)コントローラ12を制御する。
ノースブリッジ5は、CPU4のローカルバスと接続するブリッジデバイスである。ノースブリッジ5には、主メモリ6をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ5は、表示コントローラ8との通信などを実行する機能も有している。
主メモリ6は、プログラムやデータを一時的に記憶し、CPU4の作業用メモリとして機能する。主メモリ6として、たとえばDRAM(Dynamic Random Access Memory)やMRAM(Magnetoresistive Random Access Memory)やReRAM(Resistance Random Access Memory)やSRAM(Static Random Access Memory)が使用される。主メモリ6は、OS100を格納する記憶領域6Aと、制御ツール(制御プログラム)200を格納する記憶領域6Bを含んでいる。OS100は、一般的に知られているように、ホスト装置3の入出力装置を管理し、ディスクやメモリを管理し、ソフトウェアがホスト装置3のハードウェアを利用可能にするための制御を行うなど、ホスト装置3全体を管理するプログラムである。制御プログラム200は、不揮発性記憶装置2Aから不揮発性記憶装置2Bに対するデータバックアップ機能を有するプログラムである。本実施形態では、OS100と制御プログラム200を区別しているが、制御プログラム200はOS100の一部であってもよい。
表示コントローラ8は、コンピュータシステム1のディスプレイ9を制御するビデオ再生コントローラである。サウスブリッジ7は、CPU4のローカルバスと接続するブリッジデバイスである。サウスブリッジ7は、各種ソフトウェア及びデータを格納する記憶装置である不揮発性記憶装置2Aを、SATAインタフェース19Aを介して制御する。不揮発性記憶装置2Aは、サウスブリッジ7を経由せずにCPU4に直接接続されてもよい。
コンピュータシステム1では、LBAの最小単位である論理セクタ単位で不揮発性記憶装置2Aおよび不揮発性記憶装置2Bへのアクセスを行う。例えば、SATAインタフェース19A、19Bを介して、ライトコマンド(ライト要求)、リードコマンド(リード要求)、フラッシュコマンド等が不揮発性記憶装置2A、不揮発性記憶装置2Bに出力される。
また、サウスブリッジ7は、BIOS−ROM11、光学ドライブ10、LANコントローラ12、USBコントローラ13をアクセス制御するための機能も有している。USBコントローラ13にキーボード14、マウス15が接続されている。
[SSD]
図2に、バックアップ先である不揮発性記憶装置2Bのブロック図を示す。本実施形態では、不揮発性記憶装置2Bとしてソリッドステートドライブ(SSD)を採用した例について説明する。バックアップ元である不揮発性記憶装置2Aもこれと同様の構成であってもよいが、バックアップ元である不揮発性記憶装置2A自体にはトリムコマンドは送信されないため、不揮発性記憶装置2Aがトリムコマンドをサポートしていないなどここに示す要件を満たしていなくても本発明は適用可能である。本実施形態では、不揮発性記憶装置2Bは、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下NANDメモリと略す)16Bと、SATAインタフェース19Bを介してホスト装置3との信号の送受信を行うインタフェースコントローラ(IFC)42Bと、NANDメモリ16Bの物理アドレスとLBAとの論物変換テーブルを含む管理情報42BおよびIFC42BとNANDメモリ16Bとの中間バッファとして機能するキャシュメモリ(CM)44Bを有する半導体メモリとしてのRAM(Random Access Memory)40Bと、NANDメモリ16B及びRAM40Bの管理、制御、及びIFC42Bの制御を司るSSDコントローラ(SSDC)41Bと、これら構成要素を接続するバス43Bを備える。
RAM40Bとしては、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase Change Random Access Memory)、ReRAM(Resistance Random Access Memory)などを採用することができる。RAM40BはSSDC41Bに含まれてもよい。
NANDメモリ16Bは、ホスト装置3によって指定されたユーザデータを記憶したり、管理情報42Bをバックアップ用に記憶したりする。NANDメモリ16Bは、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。NANDメモリ16Bは、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、NANDメモリ16Bでは、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。
RAM40Bは、ホスト装置3とNANDメモリ16間でのデータ転送用キャッシュとして機能するキャッシュメモリ(CM)44Bを有する。また、RAM40は、管理情報42Bの記憶用メモリ及びその他作業領域用メモリとして機能する。管理情報42Bは、NANDメモリ16Bの領域45Bに記憶されている各種管理テーブルが不揮発性記憶装置2Bの起動時などに展開されたものであり、定期的あるいは電源断時にNANDメモリ16Bの領域45Bに退避保存される。
図3に示すように、管理テーブル42Bは、フリーブロックテーブル、アクティブブロックテーブル、及びアクティブページテーブルを含む。物理ブロックID及び物理ページアドレスは物理アドレスに含まれる。アクティブブロックテーブルは、物理ブロックIDと論理アドレス(LBA)とを結び付ける管理を行い、アクティブブロックテーブルに登録されている物理ブロック(アクティブブロック)は、少なくともSSDC41Bにとっては有効なデータを保持していることになる。フリーブロックテーブルは、LBAに結び付けられていない物理ブロックを管理している。フリーブロックテーブルに登録されている物理ブロック(フリーブロック)は、LBAに結び付けられていないため、有効なデータを保持していないことになる。
アクティブページテーブルは、物理ページアドレスとLBAとを結び付ける管理を行い、アクティブページテーブルに登録されている物理ページ(アクティブページ)は、少なくともSSDC41Bにとっては有効なデータを保持していることになる。また、アクティブページテーブルに登録されている物理ページは、これが属する物理ブロックID(物理ブロックアドレス)と関連付けられている。なお、管理テーブルで管理されているLBAは、不揮発性記憶装置2Bで管理できる最小データサイズ又はそれより大きいデータサイズのアドレスであることが望ましい。管理テーブル42Bのデータサイズを低減するために、アクティブブロックテーブルやアクティブページテーブルで保存される論理アドレスとしてLBAを所定ビット分だけ右シフト演算したアドレスを用いてもよい。
不揮発性記憶装置2BのコントローラであるSSDC41Bは、NANDメモリ16Bに記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト装置3からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト装置3−NANDメモリ16B間のデータ転送制御、RAM40B及びNANDメモリ16Bに記憶された各種管理テーブルの更新・管理、NANDメモリ16Bに書き込むデータのECC符号化、NANDメモリ16Bから読み出したデータのECC復号化などを実行する。
ホスト装置3は不揮発性記憶装置2Bに対し、リード要求またはライト要求を発行する際には、ATAインタフェース19Bを介して論理アドレスとしてのLBAを入力する。また、ホスト装置3は不揮発性記憶装置2Bに対し、リード要求またはライト要求を発行する際には、LBAと併せて、リード要求またはライト要求の対象となるセクタサイズを入力する。
IFC42Bは、ホスト装置3からのリード要求、ライト要求、その他要求及びデータを受信し、受信した要求やデータをSSDC41Bに送信したり、SSDC41Bの制御によりRAM40Bにデータを送信したりする機能を持つ。
<書き込み動作>
図4は、バックアップ先である不揮発性記憶装置2Bの書き込み動作を示すフローチャートである。不揮発性記憶装置2Bは、ホスト装置3から書き込み命令を受信する(ステップS100)。書き込み命令には、書き込みコマンド、LBA、及びデータが含まれる。
続いて、SSDC41Bは、DRAM40Bからフリーブロックテーブルを読み出し(ステップS110)、フリーブロックテーブルから物理ブロックIDを取得する。フリーブロックが存在しない場合は、後述するNAND整理を行い、物理ブロックIDを取得する(ステップS120、S130)。
続いて、SSDC41Bは、取得した物理ブロックIDに対応するフリーブロックに対してプログラム処理(書き込み処理)を行う(ステップS140)。続いて、SSDC41Bは、プログラムされた物理ブロックIDをフリーブロックテーブルから削除する(ステップS150)。続いて、SSDC41Bは、アクティブブロックテーブル及びアクティブページテーブルを更新する(ステップS160)。すなわち、プログラムされたブロックに対応するLBA及び物理ブロックIDをアクティブブロックテーブルに追加し、さらに、LBA、物理ブロックID及び物理ページアドレスをアクティブページテーブルに追加する。なお、ステップS140のプログラム処理の前に、書き込み対象の物理ブロックに対して消去を行ってもよい。
<NAND整理>
次に、不揮発性記憶装置2BのNAND整理処理(garbage collection, GC)について説明する。図5は、不揮発性記憶装置2BのNAND整理処理を示すフローチャートである。物理ブロックに含まれる全ページのうちアクティブページテーブルに登録されているアクティブページ(有効ページ)はLBAに対応付けられている。一方、物理ブロックに含まれる全ページが有効ページであるとは限らず、有効ページに該当しないページ(無効ページ)はLBAに対応付けられていない。物理ブロックは無効ページの分だけデータに空きがあることになり、これら無効ページと有効ページとを分類することでフリーブロックを確保することができる。
まず、SSDC41Bは、列番号i=0、空き領域累積量s=0に設定する(ステップS200)。続いて、SSDC41Bは、DRAM40Bからアクティブブロックテーブルの先頭行を読み出し、物理ブロックIDを取得する(ステップS210)。ステップS210にて取得した物理ブロックIDを現在物理ブロックIDと呼ぶ。続いて、SSDC41Bは、DRAM40Bからアクティブページテーブルを読み出し、現在物理ブロックIDに含まれる全物理ページアドレスを取得する(ステップS220)。
続いて、SSDC41Bは、現在物理ブロックのうち無効ページのサイズを算出し、この無効ページサイズを変数vに代入する(ステップS230)。続いて、SSDC41Bは、v>0であるか否かを判定し(ステップS235)、v>0である場合は、現在物理ブロックIDを整理対象ブロックリストに追加する(ステップS240)。一方、ステップS235において、無効ページがないと判定された場合(ステップS235:No)、SSDC41Bは、現在物理ブロックIDをインクリメントして、作業対象を次の物理ブロックIDに移す(ステップS245)。
続いて、SSDC41Bは、空き領域累積量sに変数vを加算する(ステップS250)。続いて、SSDC41Bは、空き領域累積量sが物理ブロックサイズに到達したか否か、すなわちこれまでに取得した無効ページのサイズ総量が物理ブロックサイズに到達したか否かを判定する(ステップS255)。空き領域累積量sが物理ブロックサイズに到達してない場合、列番号iに1を加算した後(ステップS245)、ステップS210以下の処理を繰り返す。
一方、空き領域累積量sが物理ブロックサイズに到達した場合、SSDC41Bは、整理対象ブロックリストの全物理ブロックから全アクティブページのデータを読み出し、この読み出したデータをDRAM40Bに格納する(ステップS260)。続いて、SSDC41Bは、整理対象ブロックリストの全物理ブロックに対して消去処理を行う(ステップS265)。続いて、SSDC41Bは、アクティブブロックテーブル、フリーブロックテーブル、及びアクティブページテーブルを更新する(ステップS270)。すなわち、消去処理が行われた物理ブロックをアクティブブロックテーブルから削除してフリーブロックテーブルに追加し、また、データが読み出されたアクティブページをアクティブページテーブルから削除する。
続いて、SSDC41Bは、DRAM40Bに格納された全アクティブページのデータをフリーブロックに書き込む(ステップS280)。続いて、SSDC41Bは、アクティブブロックテーブル、フリーブロックテーブル、及びアクティブページテーブルを更新する(ステップS290)。すなわち、プログラムされた物理ブロックをフリーブロックテーブルから削除してアクティブブロックテーブルに追加し、また、プログラムされた物理ページをアクティブページテーブルに追加する。
このように、NAND整理はNANDメモリ16Bの読み出し動作、消去動作、及びプログラム動作を多数伴うため、多くの時間を要する。よって、フリーブロックが枯渇した状況で不揮発性記憶装置2Bへの書き込みを行うとNAND整理が発生するため、ホスト装置3からみた書き込み処理速度が低下し、かつNANDメモリ16Bの信頼性が低下する可能性がある。なお、ステップS265の消去処理は、図4のステップS130のNAND整理内では行わずに、ステップS140の書き込み動作直前に行うようにしてもよい。
<削除通知処理>
次に、不揮発性記憶装置2Bの削除通知処理について説明する。削除通知のためのコマンドとして、たとえば、INCITS ATA/ATAPI Command Set−2 (ACS−2)で記述されているData Set Management Command(通称トリム(TRIM)コマンド)があげられる。削除通知処理は、OS100上でデータが削除された場合、LBAおよび論理セクタ数に関するデータ(LBA Range Entry)を不揮発性記憶装置に通知することにより、以後不揮発性記憶装置2B上でLBAから論理セクタ数分のLBA領域を空き領域として扱うことができる方式である。削除通知により、不揮発性記憶装置2Bはフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、Data Set Management Commandだけでなく、たとえばACS2記載のSCTコマンドを用いたベンダー独自のコマンドなどその他コマンドによって実現してもよい。また、インタフェース19BにSATAインタフェース以外のインタフェースを用いている場合、トリムコマンドとしてそのインタフェース固有の削除通知処理用コマンドを用いてもよい。また、トリムコマンドとして、NVM Express Revision 1.1 October 11, 2012 (http://www.nvmexpress.org/)に記述されている11h Dataset Management commandのDeallocate(AD)を用いてもよい。たとえば、不揮発性記憶装置2Bが後述の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を用いてもよい。なお、本実施形態では、データの削除の場合だけでなく、データをバックアップおよびコピーする場合にトリムコマンドを用いる。
図6は、不揮発性記憶装置2Bの削除通知処理を示すフローチャートである。不揮発性記憶装置2Bは、ホスト装置3から削除通知を受信する(ステップS300)。削除通知には、削除コマンド、LBA及びセクタサイズが含まれる。続いて、SSDC41Bは、DRAM40Bからアクティブページテーブルを読み出す(ステップS310)。続いて、SSDC41Bは、削除通知によって指定された削除対象となるLBA領域に対応する全ページのうち、ページ内全領域が削除通知対象である全ページをアクティブページテーブルから削除する(ステップS320)。これにより、削除通知対象のページはデバイス有効データからデバイス無効データとなる。
続いて、SSDC41Bは、DRAM40Bからアクティブブロックテーブルを読み出す(ステップS330)。続いて、SSDC41Bは、アクティブブロックテーブルを参照し、アクティブページテーブルに物理ブロックIDを持たない物理ブロックをアクティブブロックテーブルから削除しフリーブロックテーブルに追加する(ステップS340)。
このように、不揮発性記憶装置2Bは、削除通知処理対象のLBAに対応付けられたNAND領域上のデータをデバイス有効データからデバイス無効データに変えることで、NAND整理以外の方法により、削除通知処理によってもフリーブロックを確保することができる。なお、ホスト装置3が削除通知を行うデータサイズは、不揮発性記憶装置2Bが管理テーブルで管理している最小データサイズ以上であってもよい。
上記のように、削除通知を受信した不揮発性記憶装置は、フリーブロックを新たに確保することができる。このようにして、削除通知により指定されたデバイス有効データはデバイス無効データとなる。ホスト装置3からSSDに対する削除通知命令は管理情報の書き換えしか伴わないため、管理情報の書き換えおよびNANDメモリに対するユーザデータの書き込みが伴うホスト装置3からSSDに対する書き込み命令に比べて高速処理される。
<読み出し動作>
次に、バックアップ先である不揮発性記憶装置2Bの読み出し動作について説明する。図7は、不揮発性記憶装置2Bの読み出し動作を示すフローチャートである。バックアップ元の不揮発性記憶装置2Aのデータをバックアップ後に、ホスト装置3がバックアップ先である不揮発性記憶装置2Bからバックアップデータを読みだす場合がある。その場合不揮発性記憶装置2Bはホスト装置3から読み出し命令を受信する(ステップS400)。読み出し命令には、読み出しコマンド、及びLBAが含まれる。
続いて、SSDC41Bは、DRAM40Bからアクティブブロックテーブルを読み出す(ステップS410)。続いて、SSDC41Bは、ホスト装置3から受信したLBAに対応する物理ブロックIDを参照する(ステップS420)。アクティブブロックテーブルに物理ブロックIDが存在する場合、SSDC41Bは、以後、既書き込み領域読み出し処理を行う。すなわち、SSDC41Bは、アクティブページテーブルを読み出し(ステップS430)、このアクティブページテーブルを参照して、NANDメモリ16Bの該当ページを読み出す(ステップS440)。そして、SSDC41Bは、読み出したデータをホスト装置3に送信する(ステップS450)。
一方、ホスト装置3から受信したLBAに対応する物理ブロックIDがアクティブブロックテーブルに存在しない場合、SSDC41Bは、以後、未書き込み領域読み出し処理を行う。すなわち、SSDC41Bは、NANDメモリ16Bの読み出し処理を行わず、関数fで表されたデータをホスト装置3からの要求に対応するデータ長分ホスト装置3に送信する(ステップS460)。具体的には、関数fで表されたデータは、アドレスAi、データDiとすると、
f(Ai)=Di(iは0以上の整数)
を満たす。関数fは、自由に設定することが可能であり、その一例として、たとえば、LBAを変数として、
f(LBA)=0
と設定した場合、SSDC41Bは、ホスト装置3からの要求に対応するデータ長分の“0”で埋め尽くされたデータをホスト装置3に送信することになる。関数fはSSDC41Bに格納されてもよいし、NANDメモリ16B内に格納されてもよいし、RAM40B内に格納されても良い。未書き込み領域読み出しを高速に行うという観点では、関数fは、SSDC41BまたはRAM40B内に格納されるか、不揮発性記憶装置2Bの電源OFF時にはNANDメモリ16B内に格納しておき不揮発性記憶装置2B起動時にRAM40Bに読み出されることが望ましい。
未書き込み領域読み出し動作においては、NANDメモリ16Bの読み出し処理が伴わないか、あるいはNANDメモリ16Bの読み出し量が大幅に低減する。このため、アクティブページテーブルの読み出し処理及びNANDメモリ16Bの読み出し処理が伴う既書き込み領域読み出し動作に比べ、未書き込み領域読み出し動作は高速に行われる。
このように、ホスト装置3によって、バックアップ先である不揮発性記憶装置2Bの、デバイス無効データを含むLBA領域に対する読み出しが行われたとき、不揮発性記憶装置2BのNANDメモリ16Bの読み出し動作を行われなくてもよく、デバイス無効データの読み出し動作はデバイス有効データの読み出し動作に比べて高速に行われる。デバイス無効データからなるLBA領域が読み出されたときに不揮発性記憶装置2Bからホスト装置3に読み出されるデータは任意のデータで良いが、本実施形態では、少なくとも各LBAに対して確定的な(deterministicな)データである必要がある。また、バックアップされるデータをより正確に確定するという観点では、不揮発性記憶装置2Bは起動時またはホスト装置3との接続時に、不揮発性記憶装置2Bのデバイス無効データの値が確定的であることをホスト装置3に通知することが望ましい。たとえば非特許文献のACS-2に記述されているようにIDENTIFY DEVICE data word 169のbit14が1になっていることで、不揮発性記憶装置2Bはデバイス無効データの値が確定的であることを前もってホスト装置3に通知することができる。このような、少なくとも各LBAに対して確定的な(deterministicな)データを、本発明では関数f(LBA)を用いて
データ=f(LBA)
と表す。
特に、f(LBA)=0であるときは、IDENTIFY DEVICE data word 169のbit5が1になっていることが望ましく、それにより不揮発性記憶装置2Bはデバイス無効データの読み出し値が0の固定値であること(不揮発性記憶装置2BがDeterministic Zeroing TRIM機能を保有していること)を前もってホスト装置3に通知することができる。f(LBA)=0である場合で、特に論理セクタサイズが512バイトである場合は、関数fは、f(LBA)=00000…0のような0で埋め尽くされた(0-fill)512バイト長のデータとなる。
[制御プログラムの格納方法]
つぎに、ホスト装置3上で動作する制御プログラム(制御ツール)200の格納方法について説明する。例えば、制御ツール200は、図8に示すように、ホスト装置3が電源オフになっているときはバックアップ元である不揮発性記憶装置2AのNANDメモリ16Aに格納されているが、ホスト3の起動時またはプログラム起動時に、NANDメモリ16から主メモリ6上の領域6Bにロードされる。一方、ホスト装置3に不揮発性記憶装置2Aおよび不揮発性記憶装置2Bとは別の不揮発性記憶装置20が接続されている場合は、図9に示すように、制御プログラム200は、不揮発性記憶装置20の領域20Bに格納されており、ホスト装置3の起動時またはプログラム起動時に、領域20Bから領域6Bにロードされるようにしてもよい。特に、不揮発性記憶装置20がOSを格納するシステムドライブとして使用されており、不揮発性記憶装置2Aが文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ20にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ2Aにはユーザデータを格納するドライブとして使用するというように、ドライブ2Aとドライブ20の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置20に制御プログラムを格納することが望ましい。あるいは制御プログラム200を格納するドライブ20としてUSBメモリを採用すると、通常利用時はUSBメモリをホスト装置3から切り離しておき、不揮発性記憶装置2Aをバックアップする時などの制御プログラム200を使用するときにのみ、USBメモリをホスト装置3に接続するようにしてもよい。また制御プログラムを、バックアップ先である不揮発性記憶装置2Bに格納しておいてもよい。
制御プログラムのセットアップをユーザが行う労力を省く観点では、例えば図8や図9に示したように、制御プログラムが不揮発性記憶装置2Aや不揮発性記憶装置20に格納された状態(プリインストール状態)でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザが制御プログラムのインストールの可否を選択できるようにする観点、およびユーザに最新の制御プログラムを提供できるようにするという観点では、制御プログラム200は、WEBからのダウンロード、またはDVD−ROMやUSBメモリなど外部記憶媒体からのインストールにより不揮発性記憶装置2Aや不揮発性記憶装置20に格納できるようにすることが望ましい。
図10はWEBからのダウンロードの一例である。制御プログラム200はWEBサーバー21内の記憶媒体22の領域22Bに格納されており、制御プログラム200はインターネットやローカルネットワークや無線LANなどのネットワークを介して、たとえばLANコントローラ12やUSBコントローラ12に接続されたネットワーク機器を経由してNANDメモリ16Bにダウンロード(またはインストール)される。図9の場合は、制御ツール200は、不揮発性記憶装置20上の領域20Bにダウンロードまたはインストールされる。
図11はDVD−ROMやCD−ROMなど光学メディアからのインストールの一例である。制御ツール200はDVD−ROMやCD−ROMなどの光学メディア23の領域23Bに格納されており、光学メディア23が光学ドライブ10にセットされることで、制御ツール200は光学ドライブ10を介して不揮発性記憶装置2AのNANDメモリ16A上にインストールされる。図12はUSBメモリ24からのインストールの一例である。制御ツール200はUSBメモリ24の領域24Bに格納されており、USBメモリ24がUSBコントローラ13に接続されることで、制御ツール200はUSBコントローラ13を介して不揮発性記憶装置2AのNANDメモリ16A上にインストールされる。USBメモリ24のかわりに、SDカードなどその他外部メモリを採用してもよい。ユーザによる入手容易性の観点から、光学メディア23やUSBメモリ24は、SSD2の出荷時に、付属品としてSSD2と一緒に梱包されて販売されることが望ましい。一方、光学メディア23やUSBメモリ24はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
図13に、コンピュータシステム1のソフトウェアレベルでの階層構造を示す。制御プログラム200など主メモリ6上にロードされた各種ソフトウェアは、通常は不揮発性記憶装置2A、不揮発性記憶装置2Bと直接通信せずに、主メモリ6にロードされたOS100を経由して不揮発性記憶装置2A、不揮発性記憶装置2Bと通信する。各種ソフトウェアが不揮発性記憶装置2Aに対しリード要求、ライト要求などの命令を送信する必要が生じた場合、各種ソフトウェアは、OS100にファイル単位のアクセス要求を送信する。OS100はOS100に内包されるファイル管理テーブルを参照し、アクセス要求のあったファイルに対応する不揮発性記憶装置2A、不揮発性記憶装置2Bの論理アドレス(LBA)を特定し、当該インタフェース固有の命令に変換して不揮発性記憶装置2A、不揮発性記憶装置2Bに送信する。
不揮発性記憶装置2Aから応答が返ってきた場合、OS100は当該応答がどのソフトウェアに対する応答かを特定し、特定したソフトウェアに対して応答を返す。なお、制御プログラム200は、OS100のファイル管理テーブルを用いずにOS100を介して不揮発性記憶装置2A、不揮発性記憶装置2BのLBAに直接アクセスするよう構成されてもよいし、OS100を介さずに不揮発性記憶装置2Aまたは不揮発性記憶装置2BのLBAに直接アクセスするよう構成されてもよい。
[情報処理装置の物理的構成]
次に、コンピュータシステム1の構成例について説明する。コンピュータシステム1は、例えば、デスクトップコンピュータやノートブック型のポータブルコンピュータとして実現し得る。図14は、コンピュータシステム1としてのデスクトップコンピュータの概略図である。
デスクトップコンピュータは、コンピュータ本体31、ディスプレイ9、キーボード14、及びマウス15などを備えている。コンピュータ本体31は、主要なハードウェアが搭載されたマザーボード30、不揮発性記憶装置2A、及び電源装置32などを備えている。不揮発性記憶装置2Aは、SATAケーブルを介してマザーボード30に物理的に接続され、マザーボード30上に実装されたサウスブリッジ7を介して、同じくマザーボード30上に実装されたCPU4に電気的に接続されている。電源装置32は、デスクトップコンピュータで使用される各種電源を発生し、電源ケーブルを介してマザーボード30や不揮発性記憶装置2Aなどに電源を供給する。
図15は、コンピュータシステム1としてのポータブルコンピュータの概略図である。ポータブルコンピュータは、コンピュータ本体34、ディスプレイユニット35などから構成されている。ディスプレイユニット35は、例えばLCD(Liquid Crystal Display)で構成される表示装置9が組み込まれている。ディスプレイユニット35は、コンピュータ本体34に対し、この本体34の上面が露出される開放位置と本体34の上面を覆う閉塞位置との間を回動自由に取り付けられている。本体34は薄い箱形の筐体を有しており、その上面には、電源スイッチ36、キーボード14、タッチパッド33等が配置されている。また、本体34も、デスクトップコンピュータと同様に、不揮発性記憶装置2A、マザーボード、及び電源装置などを備えている。
本実施形態を適用する情報処理機器としては、コンピュータシステム1の他に、スチルカメラ或いはビデオカメラなどの撮像装置などであってもよいし、タブレットコンピュータやスマートフォンやゲーム機器やカーナビゲーションシステムなどであってもよい。
本実施形態では、不揮発性記憶装置2Aのバックアップ用記憶装置として、不揮発性記憶装置2Bを用いる。コンピュータシステム1の軽量化および省電力化および省スペース化の観点では、不揮発性記憶装置2Aの信頼性が劣化していない場合には、不揮発性記憶装置2Bはホスト装置3に接続されていないことが望ましく、この場合、不揮発性記憶装置2Aの信頼性が劣化した場合に、ディスプレイ9を介して制御プログラムから「バックアップ用記憶装置を接続してください」とのメッセージがユーザに表示され、バックアップ用不揮発性記憶装置2Bがユーザによりホスト装置3に接続されるようにすることが望ましい。たとえば、コンピュータシステム1がデスクトップコンピュータであった場合、不揮発性記憶装置2Bはたとえば図14に示すようにしてSATAケーブルやUSBケーブルを介してマザーボード30に接続されてもよい。不揮発性記憶装置2Bはコンピュータ本体31の内部に格納してもよい。また、コンピュータシステム1がポータブルコンピュータであった場合、不揮発性記憶装置2Bはたとえば図15のようにしてSATAケーブルやUSBケーブルを介してコンピュータ本体34に接続されてもよい。この場合、着脱容易性の観点では、インタフェース19BはeSATAインタフェースであることが好ましい。不揮発性記憶装置2Bはコンピュータ本体34の内部に格納してもよい。不揮発性記憶装置2Bが取り付けられた後、制御プログラム200は不揮発性記憶装置2Aから不揮発性記憶装置2Bに対してユーザデータのバックアップを行う。
制御プログラム200によるデータバックアップが終了した場合、コンピュータシステム1の省電力および軽量化および省スペース化の観点では、図16、図17に示すように、不揮発性記憶装置2Aをコンピュータシステム1から取り外し、不揮発性記憶装置2Bを不揮発性記憶装置2Aの取り付け位置に取り付けて、不揮発性記憶装置2Aを不揮発性記憶装置2Bで置換することが望ましい。
[バックアップ動作]
図18に、制御プログラム200によるバックアップ動作の動作フローを示す。制御プログラム200は不揮発性記憶装置2Aから不揮発性記憶装置2Bに対するデータバックアップ機能を有するプログラムである。制御プログラム200のバックアップ機能はキーボード14やマウス15を介してユーザによる手動で開始されてもよいし、CPU4により自動的に開始されてもよい。図18に示すフローでは、バックアップ対象のLBA領域を長さLの小領域に分割して、それぞれの小領域に対しバックアップ動作のサブルーチンを行うことになる。小領域の参照にはLBAのポインタであるcLBAがもちいられ、cLBAが0からLずつインクリメントされていくことにより、全LBA領域のデータがバックアップされることになる。小領域の長さLは1以上の整数である。
バックアップ機能が開始されると、制御プログラム200は、データコピー対象LBAのポインタであるcLBAをゼロにセットする(ステップS500)。制御プログラム200は、LBA=cLBAから論理セクタ数=Lに相当するデータを読み出す命令を不揮発性記憶装置2Aに送信する(ステップS510)。読み出し命令としては、たとえば非特許文献1のACS−2に記述されている60h READ FPDMA QUEUEDコマンドや25h READ DMA EXTコマンドなどを用いる。読み出し命令を受信した不揮発性記憶装置2Aは、当該LBA領域の読み出しデータ(D)をホスト装置3に送信し、ホスト装置3はデータDを受信する(ステップS520)。制御プログラム200は、データDを関数f(cLBA)と比較し(ステップS530)、データDが関数f(cLBA)と等しくない場合(ステップS530:No)と等しい場合(ステップS530:Yes)とで別々のステップに分岐する。
Dがf(cLBA)と等しくない場合(ステップS530:No)、制御プログラム200は不揮発性記憶装置2Bに対し、LBA=cLBAから論理セクタ数=Lに相当するLBA領域にデータDを書き込む命令を送信し、制御プログラム200は不揮発性記憶装置2BにデータDを送信し、不揮発性記憶装置2BのメモリコントローラであるSSDC41BはデータDをNANDメモリ16Bに書きこむ(ステップS540)。書き込み命令としては、たとえば非特許文献1のACS−2に記述されている61h WRITE FPDMA QUEUEDコマンドや35h WRITE DMA EXTコマンドなどを用いる。
Dがf(cLBA)と等しい場合(ステップS530:Yes)、制御プログラム200は不揮発性記憶装置2Bに対し、LBA=cLBAから論理セクタ数=Lに相当するLBA領域に削除通知を送信する。不揮発性記憶装置2BのSSDC41Bは管理情報42Bを書き換えて、当該LBA領域に対応するデータをデバイス無効データに変える(ステップS550)。削除通知命令としては、たとえば非特許文献1のACS−2に記述されている06h DATA SET MANAGEMENTコマンドやSCTコマンドや、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)などを用いる。
ステップS540またはステップS550が完了すると、制御プログラム200はcLBAをLだけインクリメントし(ステップS560)、ステップS500〜ステップS550のサブルーチンを全小領域に対して実行する。cLBAが不揮発性記憶装置2Bのアクセス可能最大LBAを超過したとき全LBA領域の読み出しが完了したことになり(ステップS570:Yes)、バックアップ処理が完了する。
なお、ステップS540で不揮発性記憶装置2Bに書かれたデータを確実にNAND型フラッシュメモリに格納したり、ステップS550で削除通知処理された最新の管理情報42Bを確実にNAND型フラッシュメモリに格納したりして、不揮発性記憶装置2Bの不正電源遮断時のデータ損失を防止するという観点では、バックアップ完了時に制御プログラム200が、たとえば非特許文献1のACS−2に記述されているE0h Standby ImmediateコマンドやE6h SLEEPコマンド等のスタンバイ状態・スリープ状態遷移コマンドを不揮発性記憶装置2Bに対して発行することで不揮発性記憶装置2Bを電源遮断可能な状態にしておいたり、たとえば非特許文献1のACS−2に記述されているE7h FLUSH CACHEコマンドやEAh FLUSH CACHE EXTコマンド等のフラッシュキャッシュコマンドを不揮発性記憶装置2Bに対して発行することで不揮発性記憶装置2BのRAM40Bの管理情報42BやCM44BのデータをNAND型フラッシュメモリ16Bに退避保存させることが望ましい。
制御プログラム200によるデータバックアップが終了した場合、コンピュータシステム1の省電力のために、Information technology ATA/ATAPI Command Set-3 (ACS-3)に記載されているE0h Standby ImmediateコマンドやE6h SLEEPコマンド等を不揮発性記憶装置2Aに送信したり、不揮発性記憶装置2Aへの供給電源を遮断したり、不揮発性記憶装置2AをSerial ATA Revision 3.1 Gold Revisionに記載のPartial状態やSlumber状態に遷移させたり、"Serial ATA Technical Proposal: SATA31_TPR_C108 Title: Device Sleep"に記載のDEVSLP信号をアクティブにして不揮発性記憶装置2AをDevSleep状態に遷移させたり、不揮発性記憶装置2AをPCI Express Base Specification Revision 3.0に記載のD1状態やD2状態やD3状態に遷移させたり、PCI Express Base Specification Revision 3.0に記載のL1状態やL2状態やL3状態に遷移させたりしてもよい。
前述のとおり、不揮発性記憶装置2Bに対する削除通知処理は不揮発性記憶装置2Bに対する書き込み処理よりも高速に行うことができる。また、不揮発性記憶装置2Bに対する書き込み処理はNANDメモリブロックを消費するが、不揮発性記憶装置2Bに対する削除通知処理はNANDメモリブロックをほとんど消費しないため、不揮発性記憶装置2Bの動作速度低下を低減する。また、不揮発性記憶装置2Bに対する書き込み処理によりNANDメモリブロックの消去が発生してNANDメモリの信頼性が劣化するが、不揮発性記憶装置2Bに対する削除通知処理はNANDメモリブロックの消去処理がほとんど発生しないため、NANDメモリの信頼性劣化を低減することができる。
比較例のバックアップ方式では、バックアップ先対象のLBA領域に対してステップS550の書き込み動作が行われていたため、低速であり、不揮発性記憶装置2Bの動作速度が低下し、NANDメモリ16Bの信頼性が劣化するという問題点があった。一方、本実施形態の制御ツール200を用いてバックアップを行うと、不揮発性記憶装置2Aのデータのうち、関数f(LBA)で表されるデータが有意に存在する場合は、それらのデータに対しステップS540ではなくステップS550が行われるため、比較例のバックアップ方式に比べて高速にバックアップを行うことができ、不揮発性記憶装置2Bの動作速度の低減を抑制でき、NANDメモリ16Bの信頼性劣化を抑えることが可能になる。本実施形態では、不揮発性記憶装置2BとしてSSDを採用したが、不揮発性記憶装置2Bとしてハードディスクドライブ(HDD)など他の不揮発性記憶装置を採用してもよい。たとえば、不揮発性記憶装置2BとしてHDDを採用した場合、ステップS550により、不揮発性記憶装置2Bへの書き込み量が低減することで不揮発性記憶装置2Bの信頼性劣化が低減し、ホスト装置3から不揮発性記憶装置2Bに転送されるデータ量が減少することでバックアップ動作が高速に行われる。
本実施形態では、不揮発性記憶装置2Aの全LBAをバックアップする場合について述べたが、バックアップ対象LBA領域を全LBA領域のうちの一部の領域に限定して行ってもよい。
また、本実施形態では、バックアップ元不揮発性記憶装置2Aとバックアップ先不揮発性記憶装置2Bとで異なるSSDを採用したが、バックアップ元不揮発性記憶装置2Aとバックアップ先不揮発性記憶装置2Bが同一のSSD(2A=2B)であってもよい。つまり、SSDを2つのパーティションであるパーティションA(先頭LBA=0)とパーティションB(先頭LBA=X)に区切っておき、制御プログラム200がパーティションAからパーティションBに対してバックアップ動作を行うようにしてもよい。その場合、たとえば、バックアップ元LBAとバックアップ先LBAとの対応関係をcLBA(バックアップ元LBA)→X+cLBA(バックアップ先LBA)という関係にしてバックアップを行えばよい。
(第2の実施形態)
第1の実施形態では、バックアップ単位として、等論理セクタ長Lごとに区切った小領域に対して行う場合について述べたが、可変長の小領域に対して行ってもよい。たとえば、小領域として、OS100上で管理されるファイル単位を採用してもよい。図19は、第2の実施形態の制御ツール200の動作例を示すフローチャートである。
制御プログラム200はバックアップ元不揮発性記憶装置2A内のNANDメモリ16Aに保存されたOSファイル管理テーブル(メタデータ)を取得し、不揮発性記憶装置2A内の全ファイル情報をバックアップ対象リストとして主メモリ6に保存する(ステップS600)。バックアップ対象リストは不揮発性記憶装置2Aの全ファイルである必要はなく、一部のファイルのリストであってもよい。制御プログラム200は、バックアップ対象リスト内の情報に基づき、バックアップ対象リスト内のそれぞれのファイルについて、当該ファイルのデータが保存されているLBAを取得し(=cLBAとする)(ステップS605)、バックアップ元不揮発性記憶装置2Aから当該LBAのデータを読み出す(ステップS610)。読み出し命令としては、たとえば非特許文献1のACS−2に記述されている60h READ FPDMA QUEUEDコマンドや25h READ DMA EXTコマンドなどを用いる。
ステップS610で読みだしたデータを判定するためには、読みだしたデータを論理セクタ単位に分解することが望ましい(ステップS620)。制御プログラム200は、分解後の1つのデータDを選択し(ステップS630)、分割データDがf(cLBA)と等しいかどうかを判定する(ステップS640)分割データDが関数f(cLBA)と一致しないデータについては、たとえば非特許文献1のACS−2に記述されている61h WRITE FPDMA QUEUEDコマンドや35h WRITE DMA EXTコマンドなどを用いるなどして、バックアップ先不揮発性記憶装置2Bにデータを書き込む(ステップS645)。分割データDが関数f(LBA)と一致しているデータについてはバックアップ先不揮発性記憶装置2Bにデータ書き込み命令を送信せずに、不揮発性記憶装置2Bの当該LBAにたいして、削除通知命令を送信する(ステップS650)。削除通知命令としては、たとえば非特許文献1のACS−2に記述されている06h DATA SET MANAGEMENTコマンドやSCTコマンドや、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)などを用いる。制御プログラム200は、全ての分割データに対し、ステップS630〜S650の処理を繰り返す。
制御プログラム200は、バックアップ先不揮発性記憶装置2BのOSファイル管理テーブル(メタデータ)に選択ファイルの情報を書き込む。これにより、バックアップしたファイルはOSから認識可能になる。制御プログラム200は、全てのファイルを読み出した否かを判定し(ステップS680)、全てのファイルを読み出していない場合は、次のファイルを選択し、選択ファイルのLBA情報を取得し(ステップS690)、手順をステップS610に移行させる。全てのファイルを読み出している場合は、これで処理を終了する。本実施形態では、不揮発性記憶装置2Aの全ファイルをバックアップする場合について述べたが、バックアップ対象ファイルを全ファイルのうちの一部のファイルに限定して行ってもよい。
このように第2の実施形態においては、バックアップ元のデータ読み出し、書き込みをファイル単位で行う。これにより、ファイルが存在しないLBAの読み出し、書き込み、削除通知を省略することが可能になり、バックアップ動作がより高速に行われる。
(第3の実施形態)
第1、第2の実施形態では、制御プログラム200内の関数f(LBA)を用いてバックアップ処理を行い、バックアップ後のデータ読み出し時においては、バックアップ先である不揮発性記憶装置2BのSSDC41Bは、NANDメモリ16B内の関数f(LBA)を用いてデバイス無効データ(device-invalid data)をf(LBA)に復元してホスト装置3に送信するようにしている。
第3の実施形態では、制御プログラム200の設計時、製品設計時若しくは工場出荷前において、又は工場出荷後において、関数f(LBA)を決定する手法について説明する。特に、SSDにインストールするOSやシステム構成が決定しているときは、それらシステムに対して最適な関数f(LBA)を制御プログラム200の設計時、製品設計時若しくは工場出荷前に設定しておくことが望ましい。関数f(LBA)は、たとえば、LBAとデータを対応付けるテーブルデータとして、あるいは関数f(LBA)をアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。あるいは、関数f(LBA)は、関数f(LBA)をアルゴリズムとして実現する電子回路として記憶装置2BのSSDC41Bに搭載されてもよい。たとえば関数f(LBA)が記憶装置2BのNANDメモリ16Bとホスト装置3の主メモリ6の制御プログラム200内に格納される場合、制御プログラム200内の関数f(LBA)とNANDメモリ16B内の関数f(LBA)は同じものである必要がある。たとえば、制御プログラム200と不揮発性記憶装置2Bを同じ関数f(LBA)を用いて設計してもよいし、制御プログラム200が不揮発性記憶装置2Bから関数f(LBA)を取得して、制御プログラム200が取得した関数f(LBA)を用いて制御プログラム200内の関数f(LBA)を上書きしてもよいし、不揮発性記憶装置2Bが制御プログラム200から関数f(LBA)を取得して、不揮発性記憶装置2Bが取得した関数f(LBA)を用いてNAND型フラッシュメモリ16B内の関数f(LBA)を上書きしてもよい。
図20は、論理アドレス及びデータの一例を示す図である。SSDの論理アドレス領域は、論理アドレス(LBA)によってホスト装置3に認識される。論理アドレスは1セクタが最小管理単位となっており、1セクタは例えば512バイトである。図20ように、各セクタに対し論理アドレス(0000h、0001h、0002h、…、ba02h、…)が割り当てられている。なお、数字の末尾のhは、この数字が16進数表記であることを示す。
図20では、エンドユーザがバックアップするであろう典型的なデータのモデルを想定して(シミュレートして)以下のように関数f(LBA)を決定する。不揮発性記憶装置2Bの設計者は、事前検証として、典型的なユーザが使うであろう環境を再現したモデルとなるデータパターンをSSDに書き込んだ状態で全論理アドレスを読み出し、0-fillセクタと比較することで、図21に示すような0-fillセクタの存在確率分布を導くことができる。また、比較時に、0-fillセクタとなっているセクタ数合計を全論理アドレス領域の合計容量で割ると、正確な0-fillセクタの割合を導くことができる。関数f(LBA)=000・・・0h(固定値、0は512バイト分の繰り返し)とすることで、バックアップ時に最大で0-fillセクタとなっているセクタ数合計相当のブロックを開放してフリーブロックを節約することができる。この場合、関数f(LBA)は、たとえば、512バイトのデータ000・・・0hとして、あるいは全LBAと512バイトのデータ000・・・0hを対応付けるテーブルデータとして、あるいは全LBAに対して512バイトのデータ000・・・0hを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
図22は、関数f(LBA)が一定の固定値とならない例である。ある論理アドレス領域ではあるデータパターンが頻発し、ある論理アドレス領域では別のデータパターンが頻発するというように、論理アドレス領域によって頻発する繰り返しパターンが異なる場合がある。図22に示すように、論理アドレス領域の前半では0-fillセクタが多数存在する一方、論理アドレス領域の後半では1-fillデータ(全ビットが“1”で埋め尽くされたデータ、16進数で表すとfhで埋め尽くされたデータということになる)が多数存在するよう場合を考える。0-fillセクタの存在確率分布及び1-fillセクタの存在確率分布は図23に示すようになる。この場合、関数f(LBA)=000…0h(固定値)としたり、関数f(LBA)=fff…fh(固定値)とするよりも、“関数f(LBA)=000…0h(LBA≦c000h),f(LBA)=fff…fh(LBA>c000h)”のように、関数f(LBA)を2つの論理アドレス領域で異なる値とするほうが、バックアップ後に確保できるフリーブロック数が多くなるため、望ましい。この場合、関数f(LBA)は、たとえば、LBA=c000h以下の範囲のLBAに対して512バイトのデータ000・・・0を対応付け、LBA=c001h以上の範囲のLBAに対して512バイトのデータfff・・・fhを対応付けるテーブルデータとして、あるいはLBA=c000h以下の範囲のLBAに対して512バイトのデータ000・・・0hを生成し、LBA=C001h以上の範囲のLBAに対して512バイトのデータfff・・・fhを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
図24は、3つの論理アドレス領域で頻発するデータが異なる場合である。0-fillセクタの存在確率分布、320a-fillセクタ(320aデータで埋め尽くされた1セクタ長のデータ)の存在確率分布、及び1-fillセクタの存在確率分布は図25に示すようになる。この場合、“関数f(LBA)=000…0h(LBA≦7fffh),f(LBA)=320a320a…320ah(8000h≦LBA≦c000h),f(LBA)=fff…fh(LBA≧c001h)”のように、関数f(LBA)を3つの論理アドレス領域で異なる値とするほうが、バックアップ後に確保できるフリーブロック数が多くなるため望ましい。この場合、関数f(LBA)は、たとえば、LBA≦7fffhの範囲のLBAに対して512バイトのデータ000…0hを対応付け、8000h≦LBA≦c000hの範囲のLBAに対して512バイトのデータ320a320a…320ahを対応付け、LBA≧c001hの範囲のLBAに対して512バイトのデータfff・・・fhを対応付けるテーブルデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。あるいは、関数f(LBA)は、たとえば、LBA≦7fffhの範囲のLBAに対して512バイトのデータ000・・・0hを生成し、8000h≦LBA≦c000hの範囲のLBAに対して512バイトのデータ320a320a…320ahを生成し、LBA≧c001hの範囲のLBAに対して512バイトのデータfff・・・fhを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
また、論理アドレス領域をサイズLごとに分割した管理単位を用いるようにしてもよい。サイズLはLBAの最小単位以上である。関数f(LBA)は管理単位の内部では一定値をとるが、異なる管理単位間では関数f(LBA)が異なってもよい。先頭の管理単位では関数f(LBA)=D0(固定値)、次の管理単位では関数f(LBA)=D1(固定値)、…というようになる。この場合の関数f(LBA)は、以下のように表される。
“f(LBA)=D0(0≦LBA≦L−1,f(LBA)=D1(L≦LBA≦2L−1),f(LBA)=D2(2L≦LBA≦3L−1,…,Dk(kL≦LBA≦(k+1)L−1),…”
Dk(k=0、1、…)は、サイズがLの任意のデータパターンである。この場合、関数f(LBA)は、たとえば、kL≦LBA≦(k+1)L−1の範囲のLBAに対して(k=0、1、…)、512バイトのデータDkを対応付けるテーブルデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。あるいは、関数f(LBA)は、たとえば、kL≦LBA≦(k+1)L−1の範囲のLBAに対して(k=0、1、…)、512バイトのデータDkを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
Dk(k=0、1、…)の選び方には任意性があり、最適なDkを選ぶことで最適な関数f(LBA)が決定される。Dkの各種候補に対して、不揮発性記憶装置2Bおよび制御プログラム200の設計者は、あらかじめエンドユーザがバックアップするであろう典型的なデータのモデルに基づき、以下の手法で点数付けを行う。
(1)各種セクタごとのデータを読み出す(又は、セクタの整数倍ごとにデータを読み出してもよいし、管理単位ごとにデータを読み出してもよい)。
(2)(1)で読み出したデータが関数f(LBA)に等しいか否かを判定する(セクタの整数倍ごとにデータを読み出した場合は、その中の全セクタが関数f(LBA)に等しいか否かを判定する)。
(3)等しい場合は1点、等しくない場合は0点と点数をつける。
(4)SSDの全論理アドレス領域に対して点数付けを行い、点数の合計を算出する(代表して一部領域のみについて点数付けを行ってもよい)。
そして、もっとも高得点となったDkが最適ということになり、このDkを用いて最適な関数f(LBA)が決定される。例えば、L=128MiB(MiB=1,048,576バイト)とすると、SSDの全論理アドレス領域を始端から均等に128MiBごとに区切り、それぞれの区画を読み出し、区画内全データが関数f(LBA)に等しいか否かを判定し、等しい場合は1点加算し、合計点数を計算する。その点数計算を例えば(D0,D1,…)=(0000…h,0000…h,…),(ffff…h,ffff…h,…),(ffff…h,0000…h,…),(0000…h,ffff…h,…)のような複数の候補について行い、もっとも得点の高い候補を最適な(D0,D1,…)として選定して関数f(LBA)を決定する。関数f(LBA)の情報として、最適化後のデータ列Dk(k=0、1、…)をSSDC41BまたはRAM40BまたはNANDメモリ16Bに記憶しておくことが望ましい。最適化後のデータ列Dk(k=0、1、…)を制御プログラム200に保存せず、制御プログラム200が不揮発性記憶装置2Bから取得するようにしてもよい。たとえば非特許文献1のACS−2に記述されているECh IDENTIFY DEVICEコマンドを用いることができ、たとえばIDENTIFY DEVICEデータのうちVendor Specificとして割り当てられているWord129以降のデータ領域をデータ列Dk(k=0、1、…)取得用領域として割り当ててもよい。
論理アドレス領域を可変長に区切った区画を管理単位として用いてもよい。この場合の関数f(LBA)は、以下のように表される。
“f(LBA)=D0(L0=0≦LBA≦L1−1,f(LBA)=D1(L1≦LBA≦L2−1),f(LBA)=D2(L2≦LBA≦L3−1,…,Dk(Lk≦LBA≦L(k+1)−1),…”
Dk(k=0、1、・・・)は、サイズがLの任意のデータパターンである。“L0<L1<L2<…Lk<…”である。この場合、関数f(LBA)は、たとえば、Lk≦LBA≦L(k+1)−1の範囲のLBAに対して(k=0、1、…)、512バイトのデータDkを対応付けるテーブルデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。あるいは、関数f(LBA)は、たとえば、Lk≦LBA≦L(k+1)−1の範囲のLBAに対して(k=0、1、…)、512バイトのデータDkを生成するアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
図26は、同一データで埋め尽くされているセクタが少ないため、論理アドレス領域を固定長または可変長に区切った区画を管理単位として用いる手法を適用しても十分な効果が得られないが、データとLBAとに一定の相関がある場合のケースである。このような場合には、より一般的な関数f(LBA)の決定手法を用いることが好ましい。例えば、複数の関数f(LBA)の候補を用意し、エンドユーザがバックアップするであろう典型的なデータのモデルにおいてそれぞれの関数f(LBA)に対して前述の点数付けを行い、もっとも高得点のf(LBA)を最適なf(LBA)として決定する。この場合は、図27に示すように、データとLBAとに一定の相関があるセクタが解放される。
また、例えば、2種類のパラメータa,bについて、“関数f(LBA)=a×LBA+b”を定義し、パラメータa,bを変化させたものを関数f(LBA)の候補として用いてもよい。そして、エンドユーザがバックアップするであろう典型的なデータのモデルにおいてもっとも高得点の(a,b)を求め、もっとも高得点の(a,b)を用いて関数f(LBA)を決定してもよい。図28は、関数f(LBA)の決定方法を説明する図である。図28には、パラメータbがb1、b2、b3の場合を図示している。パラメータaを変えると、(a,b)=(a0,b2)がもっとも得点の高い。よって、“関数f(LBA)=a0×LBA+b2”が算出される。この場合、関数f(LBA)は、たとえば、関数f(LBA)をアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
LBAがATA規格において一般的な48ビットのLBAである場合にはLBA=(d0,d1,d2,・・・,d47)tという列数48のベクトルとし(tは転置記号)、Aを512×48の行列とし、bを列数4096(1セクタ=512バイト=4096ビット)のベクトルとすることで、“関数f(LBA)=A×LBA+b”というように関数f(LBA)を列数4096のベクトル形式で取得してもよい。この場合、ベクトルf(LBA)の1列目が1ビット目のデータに、2列目が2ビット目のデータに、…、という対応関係がある。さらに一般的には、LBAがnビットで記述されるとき、LBA=(d0,d1,d2,…,dn−1)tという列数nのベクトルとし、Aをn×mの行列とし、bを列数mのベクトルとすることで、“関数f(LBA)=A×LBA+b”というように関数f(LBA)を列数mのベクトル形式で取得してもよい。この場合、関数f(LBA)は、たとえば、行列Aやベクトルbの配列データとして、あるいは、関数f(LBA)をアルゴリズムとして実現するソフトウェアデータやファームウェアデータとして、記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bや、ホスト装置3の主メモリ6に格納される。
本実施形態では、関数f(LBA)がLBAを引数としLBAにのみ依存する場合や、LBAに依存しない固定値である場合について述べたが、LBA以外の変数に依存しても良い。たとえば、関数fとして、LBAと、記憶装置2Bが設定するパラメータXを引数とする2変数関数f(LBA,X)を使用してもよいし、LBAと、ホスト装置3が設定するパラメータYを引数とする2変数関数f(LBA,Y)を使用してもよい。
(第4の実施形態)
関数f(LBA)=固定値(=Q)である場合、データQをバックアップ先不揮発性記憶装置2BのNANDメモリ16BまたはSSDC41BまたはRAM40Bにのみ保存し、制御プログラム200に保存しないようにしてもよい。第4の実施形態においては、制御プログラム200は、図18のステップS530や図19のステップS640において、データをf(LBA)=Qと比較する時、不揮発性記憶装置2Bから取得した固定値Qを用いて比較を行う。不揮発性記憶装置2Bから固定値Qを取得する方法として、たとえば非特許文献1のACS−2に記述されているECh IDENTIFY DEVICEコマンドを用いることができる。たとえば、ECh IDENTIFY DEVICEコマンドのデータのうち、Vendor Specificとして割り当てられているWord129をデータQに割り当ててもよい。その場合、Word129のデータ(=R)は1ワード=2バイトのデータ長であり、Qは512バイトのデータ長さであるため、制御プログラム200は
Q=RRRR…R (R256個を直列に並べたもの)
としてQを生成する。関数f(LBA)としてのデータRは、たとえば記憶装置2BのSSDC41BやNANDメモリ16BやRAM40Bに格納され、制御プログラム200が記憶装置2BからデータRを受信した後にホスト装置3の主メモリ6に格納される。
図29は第4の実施形態の動作例を示すフローチャートである。制御プログラム200は、関数f(LBA)取得コマンドとしてたとえばECh IDENTIFY DEVICEコマンドを不揮発性記憶装置2Bに発行し、不揮発性記憶装置2BのNANDメモリ16BからWord129のデータRを取得する(ステップS700)。そして、制御プログラム200は、取得したデータRを直列に結合してデータQを作成する(ステップS710)。
制御プログラム200は、データコピー対象LBAのポインタであるcLBAをゼロにセットする(ステップS720)。制御プログラム200は、LBA=cLBAから論理セクタ数=Lに相当するデータを読み出す命令を不揮発性記憶装置2Aに送信する(ステップS730)。読み出し命令を受信した不揮発性記憶装置2Aは、当該LBA領域の読み出しデータDをホスト装置3に送信し、ホスト装置3はデータDを受信する(ステップS740)。制御プログラム200は、データDを固定値Qと比較し(ステップS750)、データDが固定値Qと等しくない場合(ステップS750:No)と等しい場合(ステップS750:Yes)とで別々のステップに分岐する。
DがQと等しくない場合(ステップS750:No)、制御プログラム200は不揮発性記憶装置2Bに対し、LBA=cLBAから論理セクタ数=Lに相当するLBA領域にデータDを書き込む命令を送信し、制御プログラム200は不揮発性記憶装置2BにデータDを送信し、不揮発性記憶装置2BのメモリコントローラであるSSDC41BはデータDをNANDメモリ16Bに書きこむ(ステップS760)。
DがQと等しい場合(ステップS750:Yes)、制御プログラム200は不揮発性記憶装置2Bに対し、LBA=cLBAから論理セクタ数=Lに相当するLBA領域に削除通知を送信し、SSDC41Bは管理情報42Bを書き換えて、当該LBA領域に対応するデータをデバイス無効データに変える(ステップS770)。
ステップS760またはステップS770が完了すると、制御プログラム200はcLBAをLだけインクリメントし(ステップS780)、不揮発性記憶装置2Aの全LBA領域のデータを読み出すまで(ステップS790:Yes)、ステップS730〜ステップS780の処理を繰り返し実行する。
図30は第4の実施形態の他の動作例を示すフローチャートである。図30の動作例では、各LBAごとにバックアップ先不揮発性記憶装置2Bに対して、たとえばIdentify Deviceコマンドを発行してデータQを生成している。
制御プログラム200は、データコピー対象LBAのポインタであるcLBAをゼロにセットする(ステップS800)。制御プログラム200は、関数f(LBA)取得コマンドとしてたとえばECh IDENTIFY DEVICEコマンドを不揮発性記憶装置2Bに発行し、不揮発性記憶装置2BのNANDメモリ16BからWord129のデータRを取得する(ステップS810)。そして、制御プログラム200は、取得したデータRを直列に結合してデータQを作成する(ステップS820)。
制御プログラム200は、LBA=cLBAから論理セクタ数=Lに相当するデータを読み出す命令を不揮発性記憶装置2Aに送信する(ステップS830)。読み出し命令を受信した不揮発性記憶装置2Aは、当該LBA領域の読み出しデータDをホスト装置3に送信し、ホスト装置3はデータDを受信する(ステップS840)。制御プログラム200は、データDを固定値Qと比較し(ステップS850)、データDが固定値Qと等しくない場合(ステップS850:No)と等しい場合(ステップS850:Yes)とで別々のステップに分岐する。
DがQと等しくない場合(ステップS850:No)、制御プログラム200は不揮発性記憶装置2Bに対し、LBA=cLBAから論理セクタ数=Lに相当するLBA領域にデータDを書き込む命令を送信し、制御プログラム200は不揮発性記憶装置2BにデータDを送信し、不揮発性記憶装置2BのメモリコントローラであるSSDC41BはデータDをNANDメモリ16Bに書きこむ(ステップS860)。
DがQと等しい場合(ステップS850:Yes)、制御プログラム200は不揮発性記憶装置2Bに対し、LBA=cLBAから論理セクタ数=Lに相当するLBA領域に削除通知を送信し、SSDC41Bは管理情報42Bを書き換えて、当該LBA領域に対応するデータをデバイス無効データに変える(ステップS870)。
ステップS860またはステップS870が完了すると、制御プログラム200はcLBAをLだけインクリメントし(ステップS880)、不揮発性記憶装置2Aの全LBA領域のデータを読み出すまで(ステップS790:Yes)、ステップS810〜ステップS880の処理を繰り返し実行する。
なお、データRを取得する際に、LBAを含む関数f(LBA)取得コマンドを発行し、不揮発性記憶装置2Bがそのコマンドに対してR=f(LBA)を返すように不揮発性記憶装置2Bと制御プログラム200を設計すれば、f(LBA)が固定値でなく関数である場合にも本実施形態を適用することが可能である。たとえば、関数f(LBA)取得コマンドとしてACS2記載のSCTコマンドを使用し、SCT command transferにおいて記憶装置2Bに発行するB0h/D6h SMART WRITE LOGコマンドや3Fh WRITE LOG EXTコマンドや57h WRITE LOG DMA EXTコマンドの書き込みデータ内にLBAを格納して記憶装置2Bに転送し、SCT data transferにおいて記憶装置2BにB0h/D5h SMART READ LOGコマンドや2Fh READ LOG EXTコマンドや47h READ LOG DMA EXTコマンドを発行し記憶装置2Bから受信する読み出しデータからR=f(LBA)を取得する。
このようにこの実施形態では、関数f(LBA)をバックアップ先不揮発性記憶装置2B側で一元管理することができ、制御プログラム200に独立して保持する必要がないため、制御プログラム200の管理や開発が容易になる。
(第5の実施形態)
図31に示すように、バックアップ先の不揮発性記憶装置2Bとしてネットワークストレージドライブまたはクラウドストレージを用いることもできる。たとえば、コンピュータシステム1とクラウドストレージ2Bをインターネットやイントラネットなどのネットワークを介して接続し、制御ソフトウェア200がクラウドストレージ2Bにネットワーク経由で削除通知コマンドおよび書き込みコマンドを送信することによって、本実施形態のバックアップ処理を行うこともできる。大量のデータ転送を伴う書き込みコマンドに比べて削除通知コマンドのデータ転送量は少量であるため、バックアップ動作を高速に行うことができるとともに、書き込みによるクラウドストレージ2Bの信頼性劣化を抑制することができる。また、クラウドストレージ2Bの記憶媒体にSSDを採用している場合は、クラウドストレージ2Bのフリーブロック数減少を抑制することができる。
(第6の実施形態)
第2の実施形態では、バックアップ元記憶媒体として記憶装置2Aを用いる場合について述べたが、第6の実施形態では、データのコピー元を主メモリ6とする。すなわち、この第6の実施形態では、アプリケーションプログラムが起動されて動作しているときに、アプリケーションプログラムが主メモリ6上に一時的に記憶されているアプリケーションプログラム用データを、不揮発性記憶装置2Bにコピーして保存する際に、第2の実施形態で説明した手法を採用する。なお、本実施形態において、記憶装置2Aは必要ない。
主メモリ6として、たとえばDRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)などの揮発性メモリや、MRAM(Magnetoresistive Random Access Memory)やReRAM(Resistance Random Access Memory)などの不揮発性メモリが使用される。
図32にコンピュータシステム1の第6の実施形態の構成を示す。本実施形態においては、制御ツール200はOS100に含まれるとするが、OS100と制御ツール200は主メモリ6の別の領域に格納されてもよい。主メモリ6の領域6DにはMicrosoft Word(登録商標)やMicrosoft Power Point(登録商標)等の一般的なアプリケーションプログラム400が格納されている。アプリケーションプログラム400はホスト装置3で実行されるプログラムであり、たとえばホスト装置3起動時に不揮発性記憶装置から主メモリ6に読み出される。ホスト装置3は、CPU4の制御の下、アプリケーションプログラム400を実行して、ハードウェア資源との協働作用により処理を実現する。アプリケーションプログラム400は、主メモリ6上の領域6Eを作業領域として使用し、たとえばユーザがディスプレイ9とマウス15を介してアプリケーションプログラム400のGUI上で保存ボタンを押下したり、アプリケーションプログラム400の自動保存機能が呼び出されると、図33に示すように、アプリケーションプログラム400は領域6Eのアプリケーションデータ500を記憶装置2Bに保存するようOS100に命令を送信し、これによりOS100は領域6Eのデータを記憶装置2Bにバックアップコピーする。
図34は、第6の実施形態の制御ツール200の動作例を示すフローチャートである。制御ツール200は、コンピュータシステム1の起動時などに、図35に示すように、バックアップ先不揮発性記憶装置2B内のNANDメモリ16Bに保存されたOSファイル管理テーブル(メタデータ)300bを取得し、主メモリ6にOSファイル管理テーブル300として保存する。アプリケーションプログラム400からOS100に対して領域6Eのアプリケーションデータ500を記憶装置2Bに保存する命令が送信されると(ステップS900)、制御ツール200は主メモリ6内の領域6Cに格納されたOSファイル管理テーブル(メタデータ)300を読みだす(ステップS910)。これにより、制御ツール200(OS100)はデータを読み出すべき主メモリ6の領域6Eのアドレスと、保存すべきデータのLBAを取得する(ステップS920)。OS100は領域6Eからアプリケーションデータ500を読み出す(ステップS930)。
読みだしたアプリケーションデータ500を判定するためには、読みだしたアプリケーションデータ500を論理セクタ単位Dに分解することが望ましい(ステップS940)。制御ツール200は、分解後の1つのデータDを選択し(ステップS950)、分割データDが関数f(cLBA)と等しいかどうかを判定する(ステップS960)。分割データDが関数f(cLBA)と一致しないデータについては、たとえば非特許文献1のACS−2に記述されている61h WRITE FPDMA QUEUEDコマンドや35h WRITE DMA EXTコマンド、あるいはNVM Express Revision 1.1に記載されている01h Writeコマンドなどを用いるなどして、図36に示すように、記憶装置2Bにデータを書き込む(ステップS980)。分割データDが関数f(LBA)と一致しているデータについては、記憶装置2Bにデータ書き込み命令を送信せずに、図37に示すように、記憶装置2Bの当該LBAにたいして、削除通知命令を送信する(ステップS970)。削除通知命令としては、たとえば非特許文献1のACS−2に記述されている06h DATA SET MANAGEMENTコマンドやSCTコマンドや、NVM Express Revision 1.1に記述されている11h Dataset Management commandのDeallocate(AD)などを用いる。たとえば、不揮発性記憶装置2Bが後述の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を用いてもよい。
制御プログラム200は、全ての分割データに対し、それら処理を繰り返す(ステップS950〜S990)。制御プログラム200は、主メモリ6のOSファイル管理テーブル(メタデータ)300に、データ500が書き込まれたLBAを書き込む。また、主メモリ6のOSファイル管理テーブル300を不揮発性記憶装置2Bの内のNANDメモリ16Bにバックアップ保存し、処理を終了する(ステップS995)。
このように第6の実施形態においては、削除命令を利用して主メモリ6のデータを高速に記憶装置2Bにコピー保存することが可能となる。
(第7の実施形態)
第7の実施形態では、記憶装置2Aおよび記憶装置2Bのインタフェースとして、ネットワーク7002を使用する場合について説明する。本実施形態では、図38のコンピュータシステム1は、記憶部2Aおよび記憶部2Bに接続されたネットワーク7002を含んで構成される。
ネットワーク7002は、ストレージアクセスのためのストレージネットワークであり、たとえばファイバーチャネル(Fibre Channel)やイーサネット(登録商標)が用いられる。特に、ストレージネットワークとして、例えばSAN (Storage Area Network)やNAS (Network Attached Storage)が用いられる。SANには、たとえば、FC−SAN(Fibre Channel Storage Area Network)やIP−SAN (Internet Protocol Storage Area Network)が用いられ、その上位プロトコルとして、たとえば、SCSI (Small Computer System Interface)が用いられる。本実施形態では、ストレージネットワーク7002としてIP−SANを採用した例を示し、その上位プロトコルとしてはiSCSI(Internet Small Computer System Interface)が利用されるものとする。ストレージネットワーク7002にはネットワークスイッチ7005やハブ(図示せず)が含まれる。
ネットワーク7001は、1〜複数のサーバ、1〜複数のクライアントをそれぞれ接続するネットワークであり、たとえばLAN(Local Area Network)やWAN(Wide Area Network)が用いられる。LANとして、たとえばイーサネット(登録商標)が使用される。
クライアント7004は、ネットワーク7001に接続され、所望の処理を遂行するコンピュータである。クライアント7004は、典型的には、プロセッサと、メインメモリと、通信インタフェースと、ローカル入出力装置等のハードウェア資源を備え、また、デバイスドライバやオペレーティングシステム(OS)、アプリケーションプログラム等のソフトウェア資源を備える(図示せず)。これによって、クライアント7004は、プロセッサの制御の下、各種のプログラムを実行して、ハードウェア資源との協働作用により処理を実現する。例えば、クライアント7004は、プロセッサの制御の下、業務アプリケーションプログラムを実行することにより、データベースサーバ7003を経由して記憶部2AにI/Oアクセスし、所望の業務システムを実現する。
データベースサーバ(DBサーバ)7003は、ネットワーク7001とストレージネットワーク7002に接続され、データベース管理システム(DBMS:Database management system)が稼働しているサーバであり、クライアント7004からのデータ読み出し要求を受信すると、記憶部2Aや記憶部2Bからデータを読みだしてクライアント7004に読み出しデータを送信し、クライアント7004からのデータ書き込み要求を受信するとクライアント7004から書き込みデータを受信して記憶部2Aや記憶部2Bにデータを書き込む。データベースサーバ7003は、記憶部2Aや記憶部2Bの記憶データを管理するための管理情報(メタデータ)を記憶している。
記憶部2Aは、それ単体で、DBサーバ7003に対するデータストレージサービスを提供してもよいし、複数のストレージ装置から仮想的に構成される1つのストレージ装置として、DBサーバ7003に対するデータストレージサービスを提供してもよい。記憶部2Aには、DBサーバ7003に提供するための1つ以上の論理デバイス(LDEV)が形成される。論理デバイスは、RAID制御の下、いくつかのハードディスクドライブを仮想的に1つのデバイスにまとめた仮想デバイス(VDEV)に対して形成されてもよい。
論理デバイス(LDEV)は、DBサーバ7003が認識しうる論理的な記憶装置であり、論理ユニット(LU)が割り当てられ、DBサーバ7003は、物理デバイス上に形成された論理デバイスを論理ユニットとして認識する。各論理ユニットには、論理ユニット番号(LUN)が付与される。また、論理ユニットは、論理セクタ(論理ブロック)に分割され、各論理セクタには、LBAが割り当てられる。DBサーバ7003は、論理ユニット番号及びLBAからなる論理アドレスを含むコマンドをストレージ装置に与えることにより、特定の論理ユニットにおける特定の論理セクタに対してアクセスすることができる。上述のようにiSCSIを利用した本実施形態では、DBサーバ7003、記憶部2A、及び記憶部2Bはそれぞれ、iSCSIネームが割り当てられたiSCSIノードとしてのイニシエータ及びターゲットとして機能する。従って、DBサーバ7003、記憶部2A、及び記憶部2Bは、IPアドレス及びTCPポート番号の組み合わせで特定されるネットワークポータルを介して、iSCSI PDUを送受する。従って、DBサーバ7003は、iSCSIネーム、IPアドレス、及びTCPポート番号を指定することにより、ネットワーク7002上の記憶部2Aおよび記憶部2Bを認識し、その論理ユニット内の論理セクタに対してアクセスする。なお、クライアント7004はDBサーバ7003を経由せずにストレージネットワーク7002に直接接続されてもよい。
ストレージネットワーク7002にはバックアップサーバ7000が接続され、制御ツール200がバックアップサーバ7000内の主メモリに格納されている。なお、DBサーバ7003がバックアップサーバ7000の機能を具備してもよい。また、制御ツール200の機能は、バックアップサーバ7000の一部である制御ツール200としてではなく、図39に示すように、ネットワークスイッチ7005の一部である制御部200として実装されてもよいし、図40に示すように、バックアップ元記憶装置2Aの一部である制御部200としても実装されてもよい。さらに、クライアント7004の一部である制御部200として実装されてもよい。
なお、記憶部2Aのデータの記憶部2Bへのバックアップをディザスタリカバリのために行う場合には、記憶部2Aおよび記憶部2Bの物理的配置を100キロメートル以上の距離を離しておくことが望ましく、その場合には図41に示すように、記憶部2Aと記憶部2Bは、チャネルエクステンダ7006a、7006bを介し、WAN(Wide Area Network)または専用線のような長距離ネットワーク7007を経由して接続されることが望ましい。
本実施形態では、バックアップ元記憶部2Aとバックアップ先記憶部2Bが異なる記憶装置である場合について説明するが、同一の記憶装置内の異なる記憶領域をそれぞれ記憶部2Aおよび記憶部2Bとした場合であっても、本発明は適用可能である。つまり、同一の記憶装置に対して2つ以上のLDEVが形成されそれぞれにLUが割り当てられている場合、たとえばあるLUを記憶部2Aとし、別のLUを記憶部2Bとし、記憶部2Aのデータを記憶部2Bにコピーする場合においても、本発明は適用可能である。LUからLUへのデータコピーは、LU内の全LBA領域をコピーする場合であっても、LUの一部LBA領域をコピーする場合であっても、本発明は適用可能である。
図42に、本実施形態における制御ツール200(制御部200)のバックアップ動作を示す。バックアップが開始されると、バックアップサーバ700内の制御プログラム200は、データコピー対象LBAのポインタであるcLBAを、データコピー開始LBAとしてたとえばゼロにセットする(S1000)。制御プログラム200は、LBA=cLBAから論理セクタ数=Lのデータを読み出す命令を記憶部2Aに送信する(ステップS1010)。記憶部2Aからの読み出し命令としては、たとえば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)コマンドなどを用いる。読み出し命令を受信した記憶部2Aは、当該LBA領域の読み出しデータ(D)をストレージネットワーク7002を介してバックアップサーバ7000に送信し、バックアップサーバ7000はデータDを受信する(ステップS1020)。
制御プログラム200は、データDを関数f(cLBA)と比較する(ステップS1030)。データDが関数f(cLBA)と等しくない場合(ステップS1030:No)は、制御プログラム200は、LBA=cLBAから論理セクタ数=Lのデータを書き込む命令とデータDを記憶部2Bに送信する(ステップS1040)。これにより、記憶部2Bは、データDをNANDメモリ16Bに書きこむ。記憶部2Bへの書き込み命令としては、たとえば前述のSBC-3に記述されている2Ah WRITE (10)コマンドやAAh WRITE (12)コマンドや8Ah WRITE (16)コマンドや7Fh WRITE (32)コマンドなどを用いる。
Dがf(cLBA)と等しい場合(ステップS1030:Yes)、制御プログラム200はLBA=cLBAから論理セクタ数=LのLBA領域に対する削除通知を記憶部2Bに送信する(ステップS1050)。記憶部2BのSSDC41Bは管理情報42Bを書き換えて、当該LBA領域に対応するデータをデバイス無効データに変える。記憶部2Bへの削除通知命令としては、たとえば前述のSBC-3に記述されている42h UNMAPコマンドなどを用いる。
ステップS1040またはステップS1050が完了すると、制御プログラム200はcLBAをLだけインクリメントし(ステップS1060)、ステップS1010〜ステップS1050のサブルーチンを全小領域に対して実行する。cLBAが記憶部2Bのアクセス可能最大LBAを超過したとき全LBA領域の読み出しが完了したことになり(ステップS1070:Yes)、バックアップ処理が完了する。
バックアップを行う範囲として、記憶部2A全体をバックアップしてもよいし、記憶部2Aの一部をバックアップしてもよい。記憶部2Aの一部をバックアップする場合、たとえば記憶部2Aの論理ユニット(LU)単位内の全LBAについて記憶部2Bにバックアップするようにしてもよく、その場合、記憶部2Bに論理ユニット(LU)を割り当て、記憶部2Aの論理ユニット(LU)から記憶部2Bの論理ユニット(LU)にデータをコピーする。
図40に示したように、バックアップ元記憶装置2Aの一部に制御部200が実装されている場合、本実施形態における制御ツール200(制御部200)のバックアップ動作としてサーバーフリーバックアップを採用してもよく、その場合たとえば拡張コピーコマンドが用いられる。拡張コピーコマンドとして、たとえばSCSI Primary Commands-3 (SPC-3), INCITS T10/1731-D, Revision 36e (http://www.t10.org/)に記述されている83h EXTENDED COPYコマンドを用いてもよい。バックアップサーバ7000またはデータベースサーバ7003またはネットワークスイッチ7005またはクライアント7004は、バックアップ対象領域とバックアップ先のアドレスとを含む拡張コピーコマンドを記憶装置2Aに送信すると、制御部200はバックアップ対象領域に関して図18に示した処理と同様のバックアップ処理を行う。すなわち、制御部200は、拡張コピーコマンドにおいて指定された記憶装置2Aのバックアップ対象先頭LBAからバックアップ対象末尾LBAまでの領域に対して記憶装置2Aからのデータ読み出しを繰り返し、読み出しデータDがf(cLBA)に等しいかどうかを判定し、D≠f(cLBA)の時、書き込み命令およびデータDをストレージネットワーク7002を介して記憶装置2Bに送信し、D=f(cLBA)の時、削除通知をストレージネットワーク7002を介して記憶装置2Bに送信する。これにより、記憶装置2Bはデータ書き込み処理または削除通知処理を行う。
(第8の実施形態)
第7の実施形態では、ストレージネットワーク7002内でデータをバックアップする場合について述べたが、図43に示すように、クライアント7004Aに接続された記憶部2Aのデータをストレージネットワーク7002に接続された記憶部2Bにバックアップするようにしてもよい。このバックアップの際、制御ツール200は、記憶部2Aのバックアップ対象先頭LBAからバックアップ対象末尾LBAまでの領域に対して記憶部2Aからのデータ読み出しを繰り返し、読み出しデータDがf(cLBA)に等しいかどうかを判定し、D≠f(cLBA)の時、書き込み命令およびデータDをストレージネットワーク7002を介して記憶部2Bに送信し、D=f(cLBA)の時、削除通知をストレージネットワーク7002を介して記憶部2Bに送信する。
また、図44に示すように、ストレージネットワーク7002に接続された記憶部2Aのデータをクライアント7004Aに接続された記憶部2Bにバックアップするようにしてもよい。このバックアップの際、制御ツール200は、記憶部2Aのバックアップ対象先頭LBAからバックアップ対象末尾LBAまでの領域に対して記憶部2Aからのデータ読み出しを繰り返し、読み出しデータDがf(cLBA)に等しいかどうかを判定し、D≠f(cLBA)の時、書き込み命令およびデータDを記憶部2Bに送信し、D=f(cLBA)の時、削除通知をストレージネットワーク7002を介して記憶部2Bに送信する。
(第9の実施形態)
第9の実施形態では、記憶部2A、2Bのインタフェースとして、第7の実施形態と同様にネットワーク7002を使用し、かつファイル単位でバックアップを行う場合について説明する。図45のコンピュータシステム1は、ストレージネットワーク7002に接続されたメタデータサーバ(MDS)7008と、記憶部2A、記憶部2Cに分散管理されるメタデータ300を含んで構成される。
メタデータ300はたとえば第2の実施形態や第6の実施形態や図35に示したOSファイル管理情報300と同様の構造を保有してもよいし、その他の構造を保有しても良い。メタデータ300の管理アルゴリズムとしては、ブロックアルゴリズムやB+treeアルゴリズムを使用することができる。本実施形態では、メタデータ300が図46に示す構造を有する場合について説明する。メタデータ300は、ファイル識別IDと、ファイルが格納されている記憶部を特定するための記憶部識別IDと、ファイルが格納されている領域の先頭LBAを示すLBAと、ファイルのデータ長を示すセクタカウントと、ファイルの所有者IDと、ファイルの最終更新時刻と、その他属性情報からなる。記憶部識別IDは、各記憶部固有の番号であることが望ましく、たとえばWorld Wide Name (WWN)やIPアドレスやMACアドレスなどを使用可能である。メタデータ300はバックアップ元である記憶部2Aにのみ格納されてもよいが、システム全体の信頼性および性能向上の観点では、記憶部2Aや記憶部2B以外の記憶部であり、ストレージネットワーク7002に接続された記憶部2Cと記憶部2Aに分散管理されることが望ましい。あるいは、メタデータ300は、ストレージネットワーク7002上の記憶部にではなく、メタデータサーバ7008に接続されたローカル入出力装置(図示せず)に格納されてもよい。
メタデータサーバ(MDS)7008は、ストレージネットワーク7002に接続され、記憶部2Aや記憶部2Bや記憶部2Cに格納されるファイルデータのメタデータを管理することで、システム1においてファイルシステムを構築する。ファイルシステムとしては、例えば、SANファイルシステムやクラスタファイルシステムやRAIN(Redundant Array of Inexpensive/Independent Nodes)ファイルシステムやpNFS (parallel Network File System)やGoogle File System (GFS)などを採用可能である。メタデータサーバ7008は、典型的には、プロセッサと、メインメモリと、通信インタフェースと、ローカル入出力装置等のハードウェア資源を備え、また、デバイスドライバやオペレーティングシステム(OS)、メタデータ管理プログラム等のソフトウェア資源を備える(図示せず)。これによって、メタデータサーバ7008は、プロセッサの制御の下、各種のプログラムを実行して、ハードウェア資源との協働作用により処理を実現する。
クライアント7010は、ストレージネットワーク7002に接続され、所望の処理を遂行するコンピュータである。クライアント7010は、典型的には、プロセッサと、メインメモリと、通信インタフェースと、ローカル入出力装置等のハードウェア資源を備え、また、デバイスドライバやオペレーティングシステム(OS)、アプリケーションプログラム等のソフトウェア資源を備える(図示せず)。これによって、クライアント7010は、プロセッサの制御の下、各種のプログラムを実行して、ハードウェア資源との協働作用により処理を実現する。例えば、クライアント7010は、プロセッサの制御の下、業務アプリケーションプログラムを実行することにより、記憶部2Aおよび記憶部2Bおよび記憶部2Cにファイルアクセスし、所望の業務システムを実現する。
ファイルアクセスにおいてファイルの格納位置や属性情報が必要となるが、これらはクライアント7010がメタデータサーバ7008から取得する。たとえば、クライアント7010があるファイルからのデータ読み出しが必要となった時、クライアント7010は前記ファイルのファイル識別IDを含むファイル情報読み出し要求をメタデータサーバ7008に送信し、メタデータサーバ7008はメタデータ300からファイル識別IDを検索し、該当する行の記憶部識別IDやLBAやセクタカウントや属性情報等をクライアント7010に送信し、クライアントは記憶部識別IDにより特定された記憶部に対してLBAとセクタカウントを含むデータ読み出し命令を送信し、特定された記憶部はLBAからセクタカウント長のデータを読みだしてクライアント7010に送信する。
たとえば、クライアント7010があるファイルへのデータ書き込みが必要となった時、クライアント7010はファイルのファイル識別IDやファイルサイズを含む書き込み領域割り当て要求をメタデータサーバ7008に送信し、メタデータサーバ7008はメタデータ300をもとにファイルを書き込むべき記憶部識別IDやLBAを検索し、記憶部識別IDやLBAや属性情報等をクライアント7010に送信し、クライアント7010は記憶部識別IDにより特定された記憶部に対してLBAとセクタカウントを含むデータ書き込み命令と書き込みデータを送信し、特定された記憶部はLBAからセクタカウント長の領域にデータを書き込む。
図47に、本実施形態における制御ツール200(制御部200)のバックアップ動作を示す。記憶部2Aからの読み出し命令としては、たとえば前述のSBC-3に記述されている28h READ (10)コマンドやA8h READ (12)コマンドや88h READ (16)コマンドや7Fh READ (32)コマンドなどを用いる。記憶部2Bへの書き込み命令としては、たとえば前述のSBC-3に記述されている2Ah WRITE (10)コマンドやAAh WRITE (12)コマンドや8Ah WRITE (16)コマンドや7Fh WRITE (32)コマンドなどを用いる。記憶部2Bへの削除通知命令としては、たとえば前述のSBC-3に記述されている42h UNMAPコマンドなどを用いる。
制御ツール200は、メタデータサーバ7008にファイルIDリスト取得要求を送信する(ステップS1100)。メタデータサーバ7008はメタデータ300を読み出し、登録されているファイルのIDリストを取得し、ファイルIDリストをたとえば図48に示すようなデータ構造で制御ツール200に送信する(ステップS1110)。ファイルIDリストは、たとえばメタデータ300に含まれる全ファイルのファイルIDリストであってもよいし、あるいは記憶部2Aや特定のフォルダや特定のLUに含まれる全てのファイルなど、メタデータ300に登録されているファイルのうち一部のファイルのファイルIDリストであってもよい。本実施形態では、記憶部2Aに含まれる全ファイルをバックアップする場合について説明する。制御ツール200は受信したファイルIDリストをバックアップ対象ファイルリストとしてバックアップサーバ7000内の主メモリに格納する(ステップS1120)。
制御ツール200は、バックアップファイルリスト内のそれぞれのファイルについて、ファイル識別IDを含むファイル情報読み出し要求をメタデータサーバ7008に送信し、メタデータサーバ7008はメタデータ300からファイル識別IDを検索し、ファイルが格納されているLBA(=cLBA)やファイルサイズとしてのセクタカウント(=cL)を制御ツール200に送信する(ステップS1130)。
制御ツール200はファイルのファイル識別IDとセクタカウントcLを含む書き込み領域割り当て要求をメタデータサーバ7008に送信し、メタデータサーバ7008はメタデータ300をもとにファイルを書き込むべき記憶部識別IDやLBA(=tLBA)を検索し、バックアップ先としての記憶部2Bの記憶部識別IDやtLBAを制御ツール200に送信する(S1140)。書き込み領域割り当て要求の際、制御ツール200は書き込み領域に記憶部2Aの領域を割り当てないよう、書き込み領域割り当て要求内で明示的に指定することが望ましい。
制御ツール200は記憶部2Aに対してcLBAとセクタカウントcLを含むデータ読み出し命令を送信し、記憶部2AはLBAからデータを読みだして制御ツール200に送信する。(S1150)。制御ツール200は記憶部2Aから受信したデータをたとえば論理セクタ単位(=D)に分解し(ステップS1160)、制御ツール200はそれぞれの分解データDと該Dを書き込むLBA(=tLBA)に対してD=f(tLBA)であるかどうかを判定する(ステップS1170、S1180)。
制御ツール200は、D≠f(tLBA)のとき、tLBAにデータDを書き込む命令とデータDを記憶部2Bに送信し(ステップS1190)、D=f(tLBA)のとき、記憶部2BにtLBAの削除通知を送信する(ステップS1200)。S1190とS12000の処理効率改善のために、データ書き込み命令が連続する場合には、複数のデータ書き込み命令や書き込みデータを結合して記憶部2Bに送信したり、削除通知が連続する場合には、複数の削除通知を結合して記憶部2Bに送信したりすることが望ましい。
また、制御ツール200は、バックアップされたファイルの記憶部識別IDを記憶部2AのIDから記憶部2BのIDに書き換えるようメタデータサーバ7008に命令する。cLBA≠tLBAの場合は、制御ツール200は、バックアップされたファイルのcLBAをtLBAに書き換えるようメタデータサーバ7008に命令する(ステップS1170)。なお、cLBAとtLBAの関係は、cLBA=tLBAであってもよいし、cLBA≠tLBAであってもよい。
(第10の実施形態)
第1〜第9の実施形態による手法を用いれば、制御ツール200によって、記憶部2Aに格納されたユーザデータを記憶部2Bに高速にコピーすることが可能となる。記憶装置2Aの購入者であるエンドユーザは、購入した記憶装置2Aが信頼性劣化した時、制御ツール200を用いて新しく購入した信頼性の良い記憶装置2Bにデータをコピーすることでデータを救出することが可能である。一方、エンドユーザ自身がデータをリカバリするのではなく、記憶装置2Aや記憶装置2Bの販売業者が無償あるいは有償サービスとして、またはデータ復旧サービス業者が有償サービスとして、記憶装置2Aから記憶装置2Bへのエンドユーザのデータの救出サービスを行なっても良い。本実施形態では、このような企業サービスとしてのデータ救出サービスについて説明する。なお、本実施形態で説明するデータ救出サービスは、第1〜第9の実施形態の手法を用いても良いし、用いなくても良いが、第1〜第9の実施形態の手法を組み合わせることで、より高速にデータ救出できるとともに、バックアップ先の記憶装置2Bへのデータ書き込み量を低減することで記憶装置2Bを長寿命することができる。
エンドユーザは記憶装置2Aを購入すると、パーソナルコンピュータやサーバやゲーム機器やデジタルカメラなどの情報処理装置3にインタフェース2Aを経由して接続した記憶装置2Aにデータを書き込んだり記憶装置2Aからデータを読みだしたりすることで記憶装置2Aを使用する。
記憶装置2Aは、使用が増加していくうちに経年劣化したり、偶発的な不良が累積したり、記憶装置2Aがバグを保有していたりすることで、ある日突然起動しなくなったり正常に読み書きできなくなったりする故障が発生することがある。このような故障状態においては、エンドユーザは過去に記憶装置2Aに格納した業務文書や写真や電子メールなどのユーザデータを読み出すことができなってしまう。よって、記憶装置2Aが故障状態に到達する前に、ユーザデータを信頼性の良い記憶装置である記憶装置2Bにあらかじめコピーして救出しておくことが望ましい。
データ救出サービスでは、データ救出の際にユーザデータを誤って消さないようにし、かつ記憶装置2A故障予知時点や故障に到達してから記憶装置2Aの信頼性をさらに悪化させないようデータ救出を可及的速やかに行う。
また、データ救出サービスは、記憶装置2Aが故障状態に到達した後であっても、記憶装置2Aからデータを救出する。たとえば、特許第号4,643,671号公報に記載のリードオンリーモードやライトプロテクトモードに到達した時、特許第5,002,712号公報に記載のように、記憶装置2Aは受信した書き込みコマンドを正常に処理できなくなるため、Windows(登録商標)のようなOSは記憶装置2Aを正常に認識することができず、エンドユーザがユーザデータを救出することが困難になる。データ救出サービスを行う業者は、データ救出に使用するホスト装置3に、たとえば本実施形態で説明した制御ツール200や、たとえば特許第5,002,712号公報に採用の制御プログラムを搭載することで、そのような故障状態であってもユーザデータを救出することができる。
図49は、ユーザデータ救出サービスにおいて、記憶装置2Aの故障予知時点(または故障到達)の段階から、ユーザデータを記憶装置2Bに救出した段階に至るまでの手順を説明する図である。ユーザデータ救出サービスは、たとえば記憶装置2Aや記憶装置2Bの販売業者が無償あるいは有償サービスとして行なっても良いし、またはデータ復旧サービス業者が有償サービスとして記憶装置2Aから記憶装置2Bへのエンドユーザのデータの救出サービスを行なっても良い。
記憶装置2Aの故障は、記憶装置2AからたとえばS.M.A.R.T情報のような統計情報を収集することにより、故障をあらかじめ事前予知したり、故障到達を知ることが可能である。記憶装置2Aの故障はたとえば、特許第5,002,712号公報や特許第4,764,490号公報や特開2011−209879号公報に開示される技術を用いてエンドユーザの使用する故障予知ソフトウェアが事前予知することができる。
エンドユーザは、故障予知ソフトウェアにより、たとえばディスプレイ9を経由して故障予知や故障を通知されると、記憶装置2Aをホスト装置3から取り外し、データ救出サービスセンター宛(データ救出サービス業者宛)に記憶装置2Aを郵送する。
サービスセンターは、記憶装置2Aをユーザから受け取る。サービスセンターは、記憶装置2Aのデータのコピー先(救出先)として、信頼性の良い記憶装置である記憶装置2Bを用意する。たとえば、サービスセンターは記憶装置2Aのデータコピー先として、記憶装置2Bを新たに製造したり、記憶装置2Bを新たに購入したりする。
サービスセンターは、データ救出サービス用の装置であるデータ救出に使用するホスト装置3に、バックアップ元である記憶装置2Aとバックアップ先である記憶装置2Bを接続し、記憶装置2AのユーザデータD001を記憶装置2Bにコピーする。当該コピー処理は、たとえば本第1〜第9の実施形態に記載のコピー処理(バックアップ処理)により行なうことが望ましい。データ救出に使用するホスト装置3は、たとえば本実施形態で紹介の制御ツール200や、たとえば特許第5,002,712号に採用の制御プログラムを具備することが望ましい。
記憶装置2Aの信頼性をさらに劣化させないという観点では、記憶装置2Aに対しては書き込み動作を行わないことが望ましい。また、記憶装置2Aのインタフェースコントローラ42Bが信頼性劣化しているとホスト装置3との通信中にCRCエラーやRエラーなどの通信エラーを起こすおそれがあるため、データ救出サービスが必要なホスト装置3は、インタフェース19Aのリンク速度を可能な限り低速となるよう制御することが望ましい。たとえばインタフェース19Aや、記憶装置2Aのインタフェースコントローラ42BがSerial ATAのGeneration3の最大リンク速度である6.0Gbps対応であるときには、より低いリンク速度である3.0Gbpsや最低のリンク速度である1.5Gbpsで記憶装置2Aと通信することが望ましい。また、インタフェース19AがPCIExpressのような多レーン通信対応である場合には、記憶装置2Aのインタフェースコントローラ42Bが信頼性劣化していると、ホスト装置3との通信中にレーン間デスキューに失敗するなどの通信エラーを起こすおそれがあるため、データ救出に使用するホスト装置3は、インタフェース19Aのリンクレーン数を可能な限り低速となるよう制御することが望ましい。たとえばインタフェース19Aや、記憶装置2Aのインタフェースコントローラ42BがPCI Expressの4レーン通信対応であるときには、より小さいレーン数である2レーンや最低のレーン数である1レーンで記憶装置2Aと通信することが望ましい。コピー動作終了後に、データ救出に使用するホスト装置3は、記憶装置2Bに格納されたユーザデータD001を読みだして、記憶装置2Aから読みだしたデータと比較して一致していることを確認することが望ましい(ベリファイ動作)。
サービスセンターは、バックアップ先である記憶装置2Bをエンドユーザに郵送する。あるいは、サービスセンターは、救出したデータD001を電子メールでユーザに送信したりやクラウドストレージにアップロードしたりして、ユーザに電子的に送信しても良い。ユーザは、救出されたデータD001を入手する。
(変形例)
上記各実施形態では、バックアップ元の不揮発性記憶装置2AとしてSSDを例に挙げて説明したが、各実施形態はSSD以外の不揮発性記憶装置にも広く適用可能であり、例えば、磁性媒体(プラッタ)を用いたハードディスクドライブ(HDD)や、NAND型フラッシュメモリと磁性媒体(プラッタ)の両方を用いたハイブリッドハードディスクドライブ(ハイブリッドHDD)に適用することも可能である。削除通知命令が送信される先はバックアップ先の不揮発性記憶装置2Bであって、バックアップ元の不揮発性記憶装置2Aではないため、バックアップ元の不揮発性記憶装置2Aが削除通知命令をサポートしていなくても本発明は適用可能である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。