不揮発性半導体メモリには、NAND型フラッシュメモリのように、データを記憶させる場合にブロック単位で一度データを消去してからその後に書き込みを行うもの、ページ単位で書き込み/読み出しを行うものなど、消去/書き込み/読み出しの単位が固定されているものがある。一方、パーソナルコンピュータなどのホスト機器がハードディスクをはじめとする2次記憶装置に対してデータの書き込み/読み出しを行う単位は、セクタと呼ばれる。セクタは、半導体記憶装置の消去/書き込み/読み出しの単位とは独立に定められる。例えば、不揮発性半導体メモリの消去/書き込み/読み出しの単位は、ホスト機器の書き込み/読み出しの単位よりも大きい場合がある。
また、フラッシュメモリを用いてパーソナルコンピュータの二次記憶装置を構成する場合、誤りが多いなどの理由によって記憶領域として使用できなくなるブロック(不良ブロック、バッドブロック)や、読み出せなくなる領域(不良領域)などが生じる場合がある。このような不良ブロック数や不良領域数が上限値を超えた場合には、新たな不良ブロックや不良領域を登録することができないので、バッファメモリ(キャッシュメモリ)に格納されているデータとライト要求のあったデータの両方をフラッシュメモリへ書き込むことを保障できない。このため、不良ブロック数や不良領域数が所定値を超えた場合には、フラッシュメモリに空き容量があるにも関わらず、突然データの書き込みが不能になるといった問題があった。
それに対する解決策として、NAND型フラッシュメモリで発生したバッドクラスタの数とバッドブロックの数を管理し、バッドクラスタ数、バッドブロック数に応じて、ホスト装置からNAND型フラッシュメモリへのデータの書き込みの際の動作モードを切り替えるという方法がある。クラスタとは、SSDでの論理アドレスとしての管理単位である。クラスタサイズは、セクタサイズの2以上の自然数倍であり、クラスタアドレスは、LBAの所定のビットから上位のビット列で構成される。
この方法においては、SSDの動作モードは、例えば以下の3つのモードに分かれる。
・WBモード(Write Back Mode):キャッシュメモリに一旦データを書き込み、所定の条件に基づきNAND型フラッシュメモリへの追い出しを行う通常の動作モード。
・WTモード:(Write Through Mode):一回のライト要求でキャッシュメモリに書き込まれたデータを、NAND型フラッシュメモリに都度書き込む動作モード。NAND型フラッシュメモリに都度書き込むことで、ホストから書き込まれたデータをできるだけ保障する。SSDは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、WTモードへと遷移する。
・ROモード(Read Only Mode):NAND型フラッシュメモリへの書き込みを伴う処理を全て禁ずるモード。ホストからの全てのライト要求に対してエラーを返し書き込みを行わないようにすることで、SSDが寿命に近づいたときに、ホストからすでに書き込まれていたデータをできるだけ保障できるようにしている。SSDは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、またはフリーブロックが不足となったとき、ROモードへと遷移する。
WBモード及びWTモードにおいては、SSDはホストからリード要求とライト要求の両方を受け付けて処理をする。一方、ROモードにおいては、SSDはホストからリード要求を受け付けて処理をするが、ホストからのライト要求に対しては処理をせずエラーを返す。
Windows(登録商標)などのオペレーティングシステム(OS)を搭載したホストに対してSSDが接続されたとき、ホストはSSDに対してライト要求を送信し、ライト要求が正常に処理されたとき、ホストはSSDを利用可能な外部記憶装置として認識する。
一方、上記ROモードに遷移したSSDがWindows(登録商標)を搭載したホストに接続されたとき、ホストがSSDに対してライト要求を送信すると、SSDはホストにエラーを返すため、ホストはSSDを利用可能な外部記憶装置として認識しない場合がある。そのため、読み出しは可能なROモードのSSDをホストに接続しても、過去に記録したデータをSSDから読み出せない可能性があった。
このように、SSDが寿命が到達した場合、あるいはSSDが寿命に近づいた場合は、SSDに対する書き込みを禁止すべきである。しかし、コンピュータシステムに搭載される通常のオペレーティングシステム(OS)では、ブート時にSSDへの書き込みが発生し、またユーザが意図しないSSDへの書き込みがバックグラウンドで発生する。このため、SSDが寿命が到達した場合、あるいはSSDが寿命に近づいた場合に、コンピュータシステムに通常のOSが搭載される状況下では、SSDの信頼性がさらに劣化し、既に書き込まれているデータが破壊される可能性がある。
そこで、本実施形態においては、SSDが寿命に到達したと判断された場合、ブートローダを書き換え、システムを再起動した際、SSD2に対する書き込み動作を行わない緊急時ソフトウェアとしての例えば緊急時OSが起動されるようにすることで、SSDの信頼性劣化を防止し、既に書き込まれているデータ破壊を防止する。緊急時OSとしては、ブート時にSSDに対し読み出し動作のみを行い、ユーザが意図しないバックグラウンドでのSSDへの書き込みを行わないものを採用する。
以下に添付図面を参照して、実施形態にかかる情報処理装置を詳細に説明する。なお、これら実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1にコンピュータシステムの第1の実施形態の構成を示す。本コンピュータシステム1は、不揮発性記憶装置としてのSSD2と、ホスト装置3と、SSD2とホスト装置3とを結ぶメモリインタフェース19とから構成されている。本実施形態では、不揮発性記憶装置として、SSD(Solid State Drive)を用いるが、たとえば、ハードディスクドライブ、ハイブリッドディスクドライブ、SDカード、USBメモリ、マザーボード上に直接実装されたNAND型フラッシュメモリなど、他の不揮発性記憶装置であってもよい。また、本実施形態では、インタフェース19として、ATA(Advanced Technology Attachment)インタフェースを用いるが、USB(Universal Serial Bus)やSAS(Serial Attached SCSI)やThunderbolt(登録商標)やPCI Expressなど他のインタフェースであってもよい。CPU(制御回路)4がホスト装置3における中央演算処理装置であり、ホスト装置3における種々の演算及び制御はCPU4によって行われる。CPU4はサウスブリッジ7を介してSSD2や、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の動作を制御するために設けられたプロセッサであり、SSD2から主メモリ6にロードされるオペレーティングシステム(OS)100を実行する。更に、光学ドライブ10が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU4は、それらの処理を実行する。また、CPU4は、BIOS(Basic Input/Output System)−ROM11に格納されたシステムBIOSも実行する。尚、システムBIOSは、コンピュータシステム1内のハードウェア制御のためのプログラムである。その他、CPU4は、サウスブリッジ7を介してLAN(Local Area Network)コントローラ12を制御する。
ノースブリッジ5は、CPU4のローカルバスと接続するブリッジデバイスである。ノースブリッジ5には、主メモリ6をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ5は、表示コントローラ8との通信などを実行する機能も有している。
主メモリ6は、プログラムやデータを一時的に記憶し、CPU4の作業用メモリとして機能する。主メモリ6は、OS100を格納する記憶領域6Aと、制御ツール200を格納する記憶領域6Bを含んでいる。OSは、一般的に知られているように、ホスト装置3の入出力装置を管理し、ディスクやメモリを管理し、ソフトウェアがホスト装置3のハードウェアを利用可能にするための制御を行うなど、ホスト装置3全体を管理するプログラムである。
表示コントローラ8は、コンピュータシステム1のディスプレイ9を制御するビデオ再生コントローラである。サウスブリッジ7は、CPU4のローカルバスと接続するブリッジデバイスである。サウスブリッジ7は、各種ソフトウェア及びデータを格納する記憶装置であるSSD2を、ATAインタフェース19を介して制御する。
コンピュータシステム1では、論理セクタ単位でSSD2へのアクセスを行う。ATAインタフェース19を介して、ライトコマンド(ライト要求)、リードコマンド(リード要求)、フラッシュコマンド等がSSD2に入力される。
また、サウスブリッジ7は、BIOS−ROM11、光学ドライブ10、LANコントローラ12、USBコントローラ13をアクセス制御するための機能も有している。USBコントローラ13にキーボード14、マウス15が接続されている。
制御ツール200は、例えば、図2に示すように、ホスト装置3が電源オフになっているときはSSD2のNAND型フラッシュメモリ(NANDメモリ)16の領域16Bに格納されているが、ホスト3の起動時またはプログラム起動時に、NANDメモリ16の領域16Bから主メモリ6上の領域6Bにロードされる。一方、ホスト3に複数の不揮発性記憶装置が接続されている場合は、図3に示すように、SSD制御ツール200は、SSD2とは別の不揮発性記憶装置20の領域20Bに格納されており、ホスト装置3の起動時またはプログラム起動時に、領域20Bから主メモリ6上の領域6Bにロードされるようにしてもよい。特に、不揮発性記憶装置20がOSを格納するシステムドライブとして使用されており、SSD2が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ20にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ2にはユーザデータを格納するドライブとして使用するというように、ドライブ2とドライブ20の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置20に制御ツールを格納することが望ましい。
制御ツール200のセットアップをユーザが行う労力を省く観点では、例えば図2や図3に示したように、制御ツール200がSSD2や不揮発性記憶装置20に格納された状態でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザが制御ツールのインストールの可否を選択できるようにする観点、およびユーザに最新の制御ツールを提供できるようにするという観点では、制御ツール200は、WEBからのダウンロード、またはDVD−ROMやUSBメモリなど外部記憶媒体からのインストールによりSSD2や不揮発性記憶装置20に格納できるようにすることが望ましい。
図4はWEBからのダウンロードの一例である。制御ツール200はWEBサーバ21内の記憶媒体22の領域22Bに格納されており、制御ツール200はインターネットやローカルネットワークや無線LANなどのネットワークを介して、たとえばLANコントローラ12を経由してSSD2のNANDメモリ16上の領域16Bにダウンロード(またはインストール)される。図3の場合は、制御ツール200は、不揮発性記憶装置20上の領域20Bにダウンロードまたはインストールされる。
図5はDVD−ROMやCD−ROMなど光学メディアからのインストールの一例である。制御ツール200はDVD−ROMやCD−ROMなどの光学メディア23に格納されており、光学メディア23が光学ドライブ10にセットされることで、制御ツール200は光学ドライブ10を介してSSD2のNANDメモリ16上の領域16B(または領域20B)にインストールされる。図6はUSBメモリからのインストールの一例である。制御ツール200はUSBメモリ24の領域24Bに格納されており、USBメモリ24がUSBコントローラ13に接続されることで、制御ツール200はUSBコントローラ13を介してSSD2のNANDメモリ16上の領域16B(または領域20B)にインストールされる。USBメモリ24のかわりに、SDカードなどその他外部メモリであってもよいのはもちろんである。ユーザによる入手容易性の観点から、光学メディア23やUSBメモリ24は、SSD2の出荷時に、付属品としてSSD2と一緒に梱包されて販売されることが望ましい。一方、光学メディア23やUSBメモリ24はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
本実施形態では、OS100として、通常時OS(第1のオペレーティングシステム)100Aと緊急時OS(第2のオペレーティングシステム)100Bの2種類が存在する。通常時OS100AはSSD2の信頼性が劣化していない場合に使用されるオペレーティングシステムである。前述したように、通常時OSは、ブート時にSSDへの書き込みが発生し、またユーザが意図しないSSDへの書き込みがバックグラウンドで発生する。通常時OS100Aは、図7に示すように、ホスト装置3が電源オフになっているときはNANDメモリ16の領域16Dに格納されている。緊急時OS100BはSSD2の信頼性が劣化した場合に使用されるオペレーティングシステムであり、SSD2への書き込みは行わない(書き込み非サポート)。すなわち、緊急時OSは、ブート時にSSDに対し読み出し動作のみを行い、ユーザが意図しないバックグラウンドでのSSDへの書き込みを行わない。なお、緊急時OS100Bは信頼性劣化した時のSSD2以外の不揮発性記憶装置に対しては書き込みを行うことができてもよい。また、緊急時OS100Bは、緊急時OSのシステム情報など一部のデータをSSD2に書き込む必要がある場合は、例外としてSSD2に当該データを書き込むことを許可してもよいが、当該データはデータ量がNANDメモリ16の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいSSD2に対してデータを書き込んでしまうことを防止するために、緊急時OS100BはSSD2に対する通常の書き込みコマンドを行うことを禁止し、SSD2に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりSSD2に対する書き込みを許可するようにすることが望ましい。
緊急時OS100Bは、図7に示すように、ホスト装置3が電源オフになっているときはNANDメモリ16の領域16Eに格納されている。緊急時OS100BはSSD2が正常な状態においては使用されないため、領域16Eでの緊急時OSデータの破壊を防止する観点では、通常時OS使用時には領域16Eはホスト装置3から書き換えできないように設定されていることが望ましい。たとえば、通常時OS100Aの動作時には、領域16Eには後述するSSD2の管理情報において、LBAが割り当てられていないことが望ましく、この場合は、緊急時OS動作が必要になった後に領域16EにLBAが割り当てられる。あるいは、通常時OS100Aの動作時には、領域16Eは通常時OS100Aによって書き込みプロテクトを設定されていることが望ましい。
SSD2の信頼性が劣化した状態でSSD2へのアクセスを極力減らすという観点では、緊急時OS100Bが格納されている領域16Eのデータ量はNANDメモリ16の容量に比べて大幅に小さいことが望ましい。緊急時OS100Bとしては、たとえばMS−DOS(商標)やLinuxなどのOSにSSD2への書き込みを禁止するようなカスタマイズを行ったり、SSD2のバックアップ機能を付加したりしたものを採用してもよいし、SSD2用に独自に開発したソフトウェアであってもよい。
コンピュータシステム1の電源がONしたときやOSが再起動されたときなどのような、コンピュータシステム1の起動時、ホスト装置3はNANDメモリ16の領域16Cに書き込まれているブートローダ300を読み出し、ブートローダ300の情報をもとに、通常時OS100Aと緊急時OS100Bのどちらがホスト装置3における領域6Aにロードされるかが決定される。そのためには、ブートローダ300には読み出すべきOSのLBAを示すOSポインタ情報OSPTを保持させておく。ホスト装置3はブートローダ300の読み出し時、OSポインタ情報OSPTの示すLBAを開始点として読み出しを行い、読み出したデータを主メモリ6上の領域6Aに書き込むようにすればよい。ブートローダ300は、初期状態では、通常時OS100Aをロードされるように構成されている。SSD2の信頼性が劣化したのち、主メモリ6上の領域6Bに格納された制御ツール200はNANDメモリ16上の領域16Cに記憶されているブートローダ300を書き換えて、緊急時OS100Bを読み出すようにブートローダ300を再構築する。ブートローダ300として、たとえばマスターブートレコード(MBR)を採用してもよいし、GUIDパーティションテーブル(GPT)を採用してもよい。
ホスト装置3に複数の不揮発性記憶装置が接続されている場合は、OSは、SSD2とは別の不揮発性記憶装置20に格納されていてもよい。たとえば、図8に示すように、通常時OSと緊急時OSの両方が不揮発性記憶装置20に格納されていてもよいし、通常時OSがSSD2に格納され、緊急時OSが不揮発性記憶装置20に格納されていてもよいし、通常時OSが不揮発性記憶装置20に格納され、緊急時OSがSSD2に格納されていてもよい。特に、不揮発性記憶装置20がOSを格納するシステムドライブとして使用されており、SSD2が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ20にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ2にはユーザデータを格納するドライブとして使用するというように、ドライブ2とドライブ20の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置20に通常時OSが格納されていることが望ましく、さらに望ましくは、システムドライブとしての不揮発性記憶装置20に緊急時OSも格納されていることが望ましい。
緊急時OSのセットアップをユーザが行う労力を省く観点では、例えば図7や図8に示したように、緊急時OSがSSD2や不揮発性記憶装置20に格納された状態でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザが緊急時OSのインストールの可否を選択できるようにする観点、およびユーザに最新の緊急時OSを提供できるようにするという観点では、緊急時OSは、WEBからのダウンロード、またはDVD−ROMやUSBメモリなど外部記憶媒体からのインストールによりSSD2や不揮発性記憶装置20に格納できるようにすることが望ましい。
図9はWEBからのダウンロードの一例である。緊急時OSはWEBサーバ21内の記憶媒体22の領域22Eに格納されており、緊急時OSはインターネットやローカルネットワークや無線LANなどのネットワークを介して、たとえばLANコントローラ12を経由してSSD2のNANDメモリ16上の領域16Eにダウンロードまたはインストールされる。図8の場合は不揮発性記憶装置20上の領域20Eにダウンロードまたはインストールされる。
図10はDVD−ROMやCD−ROMなど光学メディアからのインストールの一例である。緊急時OSはDVD−ROMやCD−ROMなどの光学メディア23の領域23Eに格納されており、光学メディア23が光学ドライブ10にセットされることで、緊急時OSは光学ドライブ10を介してSSD2のNANDメモリ16上の領域16E(または領域20E)にインストールされる。図11はUSBメモリからのインストールの一例である。緊急時OSはUSBメモリ24の領域24Eに格納されており、USBメモリ24がUSBコントローラ13に接続されることで、緊急時OSはUSBコントローラ13を介してSSD2のNANDメモリ16上の領域16E(または領域20E)にインストールされる。USBメモリ24のかわりに、SDカードなどその他外部メモリであってもよいのはもちろんである。ユーザによる入手容易性の観点から、光学メディア23やUSBメモリ24はSSD2の出荷時に、付属品としてSSD2と一緒に梱包されて販売されることが望ましい。一方、光学メディア23やUSBメモリ24はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。緊急時OSと制御ツールは光学メディア23やUSBメモリ24など同一の外部メモリに格納されていることが、インストールの平易さの観点では望ましい。
図12に、コンピュータシステム1のソフトウェアレベルでの階層構造を示す。主メモリ6上にロードされた制御ツール200及びその他ソフトウェア(制御ツール200以外のソフトウェア)は、通常はSSD2と直接通信せずに、主メモリ6にロードされたOS100を経由してSSD2と通信する。制御ツール200やその他ソフトウェアがSSD2に対しリード要求、ライト要求などの命令を送信する必要が生じた場合、制御ツール200やその他ソフトウェアは、OS100にファイル単位のアクセス要求を送信する。OS100はOS100に内包されるファイル管理テーブルを参照し、アクセス要求のあったファイルに対応するSSD2の論理アドレス(LBA)を特定し、対応するLBAを含む当該インタフェース固有の命令をSSD2に送信する。SSD2から応答が返ってきた場合、OS100は変換後の当該インタフェース固有の応答がどのソフトウェアに対する応答かを特定し、特定したソフトウェアに対して応答を返す。
次に、コンピュータシステム1の構成例について説明する。コンピュータシステム1は、例えば、デスクトップコンピュータやノートブック型のポータブルコンピュータとして実現し得る。図13は、コンピュータシステム1としてのデスクトップコンピュータの概略図である。デスクトップコンピュータは、コンピュータ本体31、ディスプレイ9、キーボード14、及びマウス15などを備えている。コンピュータ本体31は、主要なハードウェアが搭載されたマザーボード30、SSD2、及び電源装置32などを備えている。SSD2は、SATAケーブルを介してマザーボード30に物理的に接続され、マザーボード30上に実装されたサウスブリッジ7を介して、同じくマザーボード上に実装されたCPU4に電気的に接続されている。電源装置32は、デスクトップコンピュータで使用される各種電源を発生し、電源ケーブルを介してマザーボード30やSSD2などに電源を供給する。
図14は、コンピュータシステム1としてのポータブルコンピュータの概略図である。ポータブルコンピュータは、コンピュータ本体34、ディスプレイユニット35などから構成されている。ディスプレイユニット35は、例えばLCD(Liquid Crystal Display)で構成される表示装置9が組み込まれている。ディスプレイユニット35は、コンピュータ本体34に対し、この本体34の上面が露出される開放位置と本体34の上面を覆う閉塞位置との間を回動自由に取り付けられている。本体34は薄い箱形の筐体を有しており、その上面には、電源スイッチ36、キーボード14、タッチパッド33等が配置されている。また、本体34も、デスクトップコンピュータと同様に、SSD2、マザーボード、及び電源装置などを備えている。
本発明を適用する情報処理機器としては、コンピュータシステム1の他に、スチルカメラ或いはビデオカメラなどの撮像装置などであってもよいし、タブレットコンピュータやスマートフォンやゲーム機器やカーナビゲーションシステムなどであってもよい。
つぎに、SSD2の主な構成要素であるNANDメモリ16について説明する。図15にNANDメモリ16を構成するNANDメモリチップ80の内部構成例を示す。NANDメモリ16は、1以上の数のNANDメモリチップ80よりなる。NANDメモリチップ80は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。メモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。本実施形態では、個々のメモリセルが上位ページ及び下位ページを使用しての2bit/cellの4値記憶方式の書き込み方式である場合について説明するが、個々のメモリセルが単一ページを使用しての1bit/cellの2値記憶方式の書き込み方式、または上位ページ及び中位ページ及び下位ページを使用しての3bit/cellの8値記憶方式の書き込み方式である場合、あるいは4bit/cell以上の多値記憶方式の書き込み方式を採用する場合であっても本発明の本質は変わらない。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開2010−161199号公報や特開2011−29586号公報に記述されるような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
図15に示すように、NANDメモリチップ80は、データを記憶するメモリセルをマトリックス状に配置してなるメモリセルアレイ82を備えている。メモリセルアレイ82は複数のビット線と複数のワード線と共通ソース線を含み、ビット線とワード線の交点に電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ82には、ビット線を制御するためのビット線制御回路83、及びワード線電圧を制御するためのワード線制御回路85が接続されている。すなわち、ビット線制御回路83は、ビット線を介してメモリセルアレイ82中のメモリセルのデータを読み出す一方、ビット線を介してメモリセルアレイ82中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行う。
ビット線制御回路83には、カラムデコーダ84、データ入出力バッファ89及びデータ入出力端子88が接続されている。メモリセルアレイ82から読み出されたメモリセルのデータは、ビット線制御回路83、データ入出力バッファ89を介してデータ入出力端子88から外部へ出力される。また、外部からデータ入出力端子88に入力された書き込みデータは、データ入出力バッファ89を介して、カラムデコーダ84によってビット線制御回路83に入力され、指定されたメモリセルへの書き込みが行われる。
また、メモリセルアレイ82、ビット線制御回路83、カラムデコーダ84、データ入出力バッファ89、及びワード線制御回路85は、制御回路86に接続されている。制御回路86は、制御信号入力端子87に入力される制御信号に従い、メモリセルアレイ82、ビット線制御回路83、カラムデコーダ84、データ入出力バッファ89、及びワード線制御回路85を制御するための制御信号及び制御電圧を発生させる。NANDメモリチップ80のうち、メモリセルアレイ82以外の回路部分をNANDコントローラ(NANDC)81と呼ぶ。
図16は、図15に示すメモリセルアレイ82の構成を示している。メモリセルアレイ82はNANDセル型メモリセルアレイであり、複数のNANDセルを含んで構成されている。1つのNANDセルは、直列接続されたメモリセルからなるメモリストリングMSと、その両端に接続される選択ゲートS1、S2とにより構成されている。選択ゲートS1はビット線BLに接続され、選択ゲートS2はソース線SRCに接続されている。同一のロウに配置されたメモリセルMCの制御ゲートはワード線WL0〜WLm-1に共通接続されている。また、第1の選択ゲートS1はセレクト線SGDに共通接続され、第2の選択ゲートS2はセレクト線SGSに共通接続されている。
メモリセルアレイ82は、1または複数のプレーンを含んでおり、プレーンは複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。
また、1つのワード線に接続された複数のメモリセルは、1物理セクタを構成する。この物理セクタ毎にデータが書き込まれ、読み出される(この物理セクタは、後述するLBAの論理セクタとは無関係である)。1物理セクタには、2bit/cell書き込み方式(4値)の場合例えば2ページ分のデータが記憶される。一方、1bit/cell書き込み方式(2値)の場合は、1物理セクタに例えば1ページ分のデータが記憶され、3bit/cell書き込み方式(8値)の場合、1物理セクタに例えば3ページ分のデータが記憶される。
リード動作、プログラムベリファイ動作及びプログラム動作時において、後述のSSDC41から受信した物理アドレスに応じて、1本のワード線が選択され、1物理セクタが選択される。この物理セクタ内のページの切り替えは物理アドレスによって行われる。本実施形態ではNANDメモリ16は2bit/cell書き込み方式であり、SSDC41は物理セクタには上位ページ(Upper Page)と下位ページ(Lower Page)の2ページが物理ページとして割り当てられていると取扱い、それら全ページに対して物理アドレスが割り当てられている。
2bit/cellの4値NANDメモリは、1つのメモリセルにおける閾値電圧が、4通りの分布を持ち得るように構成されている。図17は、4値NANDセル型フラッシュメモリのメモリセルに記憶される2ビットの4値データ(データ“11”、“01”、“10”、“00”)とメモリセルの閾値電圧分布との関係を示している。なお、図17において、VA1は、下位ページのみ書き込み済みで上位ページが未書き込みの物理セクタについて、2つのデータを読み出す場合に選択ワード線に印加される電圧であり、VA1Vは、A1への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。
また、VA2、VB2、VC2は、下位ページと上位ページが書き込み済みの物理セクタについて、4つのデータを読み出す場合に選択ワード線に印加される電圧であり、VA2V、VB2V、VC2Vは、各閾値電圧分布への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。また、Vread1、Vread2は、データの読み出しを行う場合に、NANDセル中の非選択メモリセルに対し印加され、その保持データに拘わらず当該非選択メモリセルを導通させる読み出し電圧を示している。さらに、Vev1、Vev2は、メモリセルのデータを消去する場合において、その消去が完了したか否かを確認するためメモリセルに印加される消去ベリファイ電圧であり、負の値を有する。その大きさは、隣接メモリセルの干渉の影響を考慮して決定される。上述の各電圧の大小関係は、
Vev1<VA1<VA1V<Vread1
Vev2<VA2<VA2V<VB2<VB2V<VC2<VC2V<Vread2
である。
なお、消去ベリファイ電圧Vev1、Vev2、Vev3は前述の通り負の値であるが、実際に消去ベリファイ動作においてメモリセルMCの制御ゲートに印加される電圧は、負の値ではなく、ゼロ又は正の値である。すなわち、実際の消去ベリファイ動作においては、メモリセルMCのバックゲートに正の電圧を与え、メモリセルMCの制御ゲートには、ゼロ又はバックゲート電圧より小さい正の値の電圧を印加している。換言すれば、消去ベリファイ電圧Vev1、Vev2、Vev3は、等価的に負の値を有する電圧である。
ブロック消去後のメモリセルの閾値電圧分布ERは、その上限値も負の値であり、データ“11”が割り当てられる。下位ページおよび上位ページ書き込み状態のデータ“11”、“01”、“10”、“00”のメモリセルは、それぞれ正の閾値電圧分布ER2、A2、B2、C2を有し(A2、B2、C2の下限値も正の値である)、データ“01”の閾値電圧分布A2が最も電圧値が低く、データ“00”の閾値電圧分布C2が最も電圧値が高く、各種閾値電圧分布の電圧値はA2<B2<C2の関係を有する。下位ページ書き込みかつ上位ページ未書き込み状態のデータ“10”のメモリセルは、正の閾値電圧分布A1を有する(A1の下限値も正の値である)。なお、図17に示す閾値電圧分布はあくまでも一例であって、本発明はこれに限定されるものではない。例えば、図17では閾値電圧分布A2,B2,C2は全て正の閾値電圧分布であるとして説明したが、閾値電圧分布A2は負の電圧の分布であり、閾値電圧分布B2、C2が正の電圧の分布であるような場合も、本発明の範囲に含まれる。また、閾値電圧分布ER1・ER2は正の値であったとしても、本発明はこれに限定されるものではない。また、本実施形態ではER2、A2、B2、C2のデータの対応関係がそれぞれ“11”、“01”、“10”、“00”であるとしているが、たとえばそれぞれ“11”、“01” 、“00”、“10”であるような他の対応関係であってもよい。
1つのメモリセルの2ビットデータは、下位ページデータと上位ページデータからなり、下位ページデータと上位ページデータは別々の書き込み動作、つまり、2回の書き込み動作により、メモリセルに書き込まれる。データを“*@”と標記するとき、*は上位ページデータを、@は下位ページデータを表している。
まず、下位ページデータの書き込みを、図17の1段目〜2段目を参照して説明する。全てのメモリセルは、消去状態の閾値電圧分布ERを有し、データ“11”を記憶しているものとする。図17に示すように、下位ページデータの書き込みを行うと、メモリセルの閾値電圧分布ERは、下位ページデータの値(“1”、或いは“0”)に応じて、2つの閾値電圧分布(ER1、A1)に分けられる。下位ページデータの値が“1”の場合には、消去状態の閾値電圧分布ERを維持するのでER1=ERであるが、ER1>ERであってもよい。
一方、下位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VA1Vを設定し、このベリファイ電圧VA1V以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“10”)に変化する。書き込み動作を所定回繰り返しても閾値電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
次に、上位ページデータの書き込みを、図17の2段目〜3段目を参照して説明する。上位ページデータの書き込みは、チップの外部から入力される書き込みデータ(上位ページデータ)と、メモリセルに既に書き込まれている下位ページデータとに基づいて行われる。
即ち、図17の2段目〜3段目に示すように、上位ページデータの値が“1”の場合には、メモリセルのトンネル酸化膜に高電界がかからないようにし、メモリセルの閾値電圧Vthの上昇を防止する。その結果、データ“11”(消去状態の閾値電圧分布ER1)のメモリセルは、データ“11”をそのまま維持し(ER2)、データ“10”(閾値電圧分布A1)のメモリセルは、データ“10”をそのまま維持する(B2)。ただし、各分布間の電圧マージンを確保するという点で、上述のベリファイ電圧VA1Vよりも大きい正のベリファイ電圧VB2Vを用いて閾値電圧分布の下限値を調整し、これにより閾値電圧分布の幅を狭めた閾値電圧分布B2を形成するのが望ましい。下限値調整を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
一方、上位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VA2V、VC2Vを設定し、このベリファイ電圧VA1V以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、データ“11”(消去状態の閾値電圧分布ER1)のメモリセルは、閾値電圧分布A2のデータ“01”に変化し、データ“10”(A1)のメモリセルは、閾値電圧分布C2のデータ“00”に変化する。このとき、ベリファイ電圧VA2V、VC2Vが用いられて、閾値電圧分布A2、C2の下限値が調整される。書き込み動作を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
一方、消去動作においては、消去ベリファイ電位Vevを設定し、このベリファイ電圧Vev以下の閾値電圧となるまで消去動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“00”)に変化する。消去動作を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する消去は「消去エラー」となる。
以上が、一般的な4値記憶方式におけるデータ書き込み方式の一例である。3ビット以上の多ビット記憶方式においても、上記の動作に更に上位のページデータに応じ、閾値電圧分布を8通り以上に分割する動作が加わるのみであるので、基本的な動作は同様である。
つぎに、SSD2の構成例について説明する。図18に示すように、SSD2は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下NANDメモリと略す)16と、ATAインタフェース19を介してホスト装置3との信号の送受信を行うインタフェースコントローラ(IFC)42と、インタフェースコントローラ42とNANDメモリ16との中間バッファとして機能するキャシュメモリ(CM)46を有する半導体メモリとしてのRAM(Random Access Memory)40と、NANDメモリ16及びRAM40の管理、制御、及びインタフェースコントローラ42の制御を司るSSDコントローラ(SSDC)41と、これら構成要素を接続するバス43を備える。
RAM40としては、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)などを採用することができる。RAM40はSSDC41に含まれてもよい。
NANDメモリ16は、複数のNANDメモリチップ80からなり、ホスト装置3によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、RAM40で管理される管理情報をバックアップ用に記憶したりする。NANDメモリ16は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイ82を有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。NANDメモリ16は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、NANDメモリ16では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。
RAM40は、ホスト装置3とNANDメモリ16間でのデータ転送用キャッシュとして機能するキャッシュメモリ(CM)46を有する。また、RAM40は、管理情報記憶用メモリ及び作業領域用メモリとして機能する。RAM40の領域40Aで管理される管理テーブルは、NANDメモリ16の領域40Mに記憶されている各種管理テーブルがSSD2起動時などに展開されたものであり、定期的あるいは電源断時にNANDメモリ16の領域40Mに退避保存される。
SSDC41は、NANDメモリ16に記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト装置3からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト装置3−NANDメモリ16間のデータ転送制御、RAM40及びNANDメモリ16に記憶された各種管理テーブルの更新・管理、NANDメモリ16に書き込むデータのECC符号化、NANDメモリ16から読み出したデータのECC複合化などを実行する。
ホスト装置3はSSD2に対し、リード要求またはライト要求を発行する際には、ATAインタフェース19を介して論理アドレスとしてのLBA(Logical Block Addressing)を入力する。LBAは、論理セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。また、ホスト装置3はSSD2に対し、リード要求またはライト要求を発行する際には、LBAと併せて、リード要求またはライト要求の対象となる論理セクタサイズを入力する。
IFC42は、ホスト装置3からのリード要求、ライト要求、その他要求及びデータを受信し、受信した要求やデータをSSDC41に送信したり、SSDC41の制御によりRAM40にデータを送信したりする機能を持つ。
図19にSSD2で使用する管理情報の構成を示す。これらの管理情報は、前述したように、NANDメモリ16の領域40Mで不揮発記憶されている。領域40Mで記憶された管理情報がSSD2の起動時にRAM40の領域40Aに展開されて使用される。領域40Aの管理情報44は、定期的あるいは電源断時に領域40Mに退避保存される。RAM40がMRAMやFeRAMなどのような不揮発RAMである場合には、この管理情報44はRAM40にのみ記憶されるようにしてもよく、この場合はこの管理情報44はNANDメモリ16には記憶されない。NANDメモリ16への書き込み量を少なくするためには、管理情報45に記憶されるデータは、RAM40の領域40Aに記憶されているデータを圧縮したものであることが望ましい。また、NANDメモリ16への書き込み頻度を少なくするためには、管理情報45には、RAM40の領域40Aに記憶されている管理情報44の更新情報(差分情報)を追記するようにすることが望ましい。
図19に示すように、管理情報は、フリーブロックテーブル(FBT)60と、バッドブロックテーブル(BBT)61と、アクティブブロックテーブル(ABT)62と、トラックテーブル(トラック単位の論物変換テーブル)63と、クラスタテーブル(クラスタ単位の論物変換テーブル)64、統計情報65を含む。
LBAは、図20に示すように、論理セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。本実施形態においては、SSD2の論理アドレス(LBA)の管理単位として、LBAの下位(s+1)ビット目から上位のビット列で構成されるクラスタアドレスと、LBAの下位(s+t+1)ビットから上位のビット列で構成されるトラックアドレスとを定義する。すなわち、論理セクタは、ホスト装置3からの最小アクセス単位である。クラスタは、SSD内部で「小さなデータ」を管理する管理単位であり、論理セクタサイズの自然数倍がクラスタサイズとなるように定められる。また、トラックは、SSD内部で「大きなデータ」を管理する管理単位であり、クラスタサイズの2以上の自然数倍がトラックサイズとなるように定められる。したがって、トラックアドレスはLBAをトラックサイズで割ったものであり、トラック内アドレスはLBAをトラックサイズで割った余りであり、クラスタアドレスはLBAをクラスタサイズで割ったものであり、クラスタ内アドレスはLBAをクラスタサイズで割った余りである。以下の説明では、便宜上、トラックのサイズは1物理ブロックに記録可能なデータのサイズに等しい(物理ブロックにSSDC41で行うECC処理の冗長ビットが含まれる場合はこれを除いたサイズ)とし、クラスタのサイズは1物理ページに記録可能なデータのサイズに等しい(物理ページにSSDC41で行うECC処理の冗長ビットが含まれる場合はこれを除いたサイズ)とする。
フリーブロックテーブル(FBT)60は、NANDメモリ16に書き込みを行うときに書き込み用に新規に割り当てることのできるNANDメモリの用途未割り当ての物理ブロック(フリーブロック:FB)のIDを管理する。また、物理ブロックID毎に消去回数を管理しており、物理ブロックが消去されたとき、当該ブロックの消去回数をインクリメントする。
バッドブロックテーブル(BBT)61は、誤りが多いなど記憶領域として使用できない物理ブロック(物理ブロック)としてのバッドブロック(BB)のIDを管理する。FBT60と同様に物理ブロックID毎に消去回数を管理するようにしてもよい。
アクティブブロックテーブル(ABT)62は、用途が割り当てられた物理ブロックであるアクティブブロック(AB)を管理する。また、物理ブロックID毎に消去回数を管理しており、物理ブロックが消去されたとき、当該ブロックの消去回数をインクリメントする。
トラックテーブル63は、トラックアドレスと、このトラックアドレスに対応するトラックデータが記憶される物理ブロックIDとの対応関係を管理する。
クラスタテーブル64は、クラスタアドレスと、このクラスタアドレスに対応するクラスタデータが記憶される物理ブロックIDと、このクラスタアドレスに対応するクラスタデータが記憶される物理ブロック内ページアドレスとの対応関係を管理する。
統計情報65には、SSD2の信頼性に関わる種々のパラメータ(X01〜X24)を格納する。
統計情報65としては、バッドブロック数総計(統計情報X01)、消去回数総計(統計情報X02)、消去回数平均値(統計情報X03)、NANDメモリの書き込みエラー発生回数累積値(統計情報X04)、NANDメモリの消去エラー発生回数累積値(統計情報X05)、読み出し論理セクタ数総計(統計情報X06)、書き込み論理セクタ数総計(統計情報X07)、ECC訂正不能回数総計(統計情報X08)、nビット〜mビットECC訂正単位総計数(統計情報X09)、SATA通信のRエラー発生回数(統計情報X10)、SATA通信のエラー発生回数(統計情報X11)、RAM40のエラー発生回数(統計情報X12)、SSD2の使用時間総計(統計情報X13)、温度が推奨動作温度の最高値を上回った時間累計(統計情報X14)、温度が推奨動作温度の最低値を下回った時間累計(統計情報X15)、コマンドの応答時間最大値(統計情報X16)、コマンドの応答時間平均値(統計情報X17)、NANDメモリの応答時間最大値(統計情報X18)、NANDの応答時間平均値(統計情報X19)、現在温度(統計情報X20)、最高温度(統計情報X21)、最低温度(統計情報X22)、統計情報増加率(統計情報X23)、NAND整理失敗フラグ(統計情報X24)などが含まれる。
バッドブロック数総計(統計情報X01)について説明する。SSD2内のNANDメモリ16の物理ブロックが一つバッドブロックに追加されるごとに統計情報X01が1インクリメントされる。統計情報X01はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましく、検査工程でエラーが発生したり、閾値分布の分布間マージンが少ないことが判明したブロックは、あらかじめバッドブロックに加えておくことがさらに望ましい。統計情報X01は統計情報65に格納せず、BBT61から直接計算してもよい。統計情報X01が大きいほど信頼性が悪化していることを示す。
消去回数総計(統計情報X02)について説明する。統計情報X02はSSD2内のNANDメモリ16の全ブロックの消去回数累計値を示す。SSD2内のNANDメモリ16の物理ブロックが一つ消去されるごとに統計情報X02が1インクリメントされる。統計情報X02はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X02は統計情報65に格納せずFBT60、BBT61、ABT62から直接計算してもよい。統計情報X02が大きいほど信頼性が悪化していることを示す。
消去回数平均値(統計情報X03)について説明する。統計情報X03はSSD2内のNANDメモリ16の全ブロックの消去回数の1ブロックあたりの平均値を示す。管理情報を格納するブロックなど一部のブロックを統計情報X03の集計対象から除外してもよい。統計情報X03はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X03は統計情報65に格納せずFBT60、BBT61、ABT62から直接計算してもよい。統計情報X03が大きいほど信頼性が悪化していることを示す。
NANDメモリの書き込みエラー発生回数累積値(統計情報X04)について説明する。統計情報X04はSSD2内のNANDメモリ16で書き込みエラーが1書き込み単位で発生するごとに1加算される(ブロック単位で加算してもよい)。統計情報X04はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X04が大きいほど信頼性が悪化していることを示す。
NANDメモリの消去エラー発生回数累積値(統計情報X05)について説明する。統計情報X05はSSD2製造時(検査工程前)にゼロにリセットされていることが望ましい。SSD2内のNANDメモリ16で消去エラーが1ブロックで発生するごとに統計情報X05が1加算される。複数のブロックをまとめて消去単位とし、この消去単位1つで消去エラーが発生するごとに統計情報X05に1加算するようにしてもよい。統計情報X05が大きいほど信頼性が悪化していることを示す。
読み出し論理セクタ数総計(統計情報X06)について説明する。統計情報X06はIFC42が読み出しデータとしてホスト装置3に送信したデータの論理セクタ数合計である。統計情報X06はSSD2製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X06が大きいほど信頼性が悪化していることを示す。
書き込み論理セクタ数総計(統計情報X07)について説明する。統計情報X07はIFC42が書き込みデータとしてホスト装置3から受信したデータの論理セクタ数合計である。統計情報X07はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X07が大きいほど信頼性が悪化していることを示す。
ECC訂正不能回数総計(統計情報X08)について説明する。ECC訂正によりエラービットが修復できなかった場合に、1読み出し単位ごとに統計情報X08を1インクリメントする。エラー訂正できなかったエラービット数の推定値を加算するようにしてもよいし、エラー訂正できなかったブロックの数を加算するようにしてもよい。統計情報X08はSSD2製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X08が大きいほど信頼性が悪化していることを示す。
nビット〜mビットECC訂正単位総計数(統計情報X09)について説明する。n,mは自然数で、0≦n≦m≦訂正可能最大ビット数である。ECC訂正単位(たとえば物理ページ)に対してECC訂正を行った時、全エラービットが正常に修復され、かつ修復されたエラービット数がn以上m以下である場合、ECC訂正単位1つにつき「nビット〜mビットECC訂正単位総計数」を1加算する。ECC訂正により1訂正単位につき最大64ビット訂正可能である場合、たとえば、「1ビット〜8ビットECC訂正単位総計数」「9ビット〜16ビットECC訂正単位総計数」「17ビット〜24ビットECC訂正単位総計数」「25ビット〜32ビットECC訂正単位総計数」「33ビット〜40ビットECC訂正単位総計数」「41ビット〜48ビットECC訂正単位総計数」「49ビット〜56ビットECC訂正単位総計数」「57ビット〜64ビットECC訂正単位総計数」の8つのパラメータを用意し、ECC訂正が正常に行われた場合、1ECC訂正単位のECC訂正につきこれら8つのパラメータのうちいずれか1つに1がインクリメントされる。統計情報X09はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X09が大きいほど信頼性が悪化していることを示す。
SATA通信のRエラー発生回数(統計情報X10)について説明する。統計情報X10はSATA規格におけるRエラー(Reception Error, R_ERR)が1回発生するごとに1インクリメントされる。ホストとSSDの間で送受信されるフレームにたとえばCRCエラーなど何らかのエラーがあった場合、Rエラーとしてカウントされる。統計情報X10として、SATA規格のPhy Event Countersのカウンタのいずれかを採用してもよい。統計情報X10はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X10が大きいほど信頼性が悪化していることを示す。
SATA通信のエラー発生回数(統計情報X11)について説明する。その他の(Rエラー以外の)SATA通信での異常が1回発生するごとに1インクリメントされる。たとえば、ATAインタフェース19やIFC42やSSDC41がSATA Generation3規格として設計されているにも関わらず、実際にSSD2やホスト装置3との間でネゴシエーションされた通信規格がGeneration2のようなより低速の通信規格であった場合、SATA通信上のエラーとみなし、統計情報X11を1インクリメントする。統計情報X11はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
RAM40のエラー発生回数(統計情報X12)について説明する。たとえば、RAM40にECC回路やエラー検知回路を搭載している場合、ECC訂正できなかった旨の信号やエラー検知された旨の信号をRAM40からSSDC41が受け取った場合、統計情報X12を1インクリメントする。統計情報X12はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
SSD2の使用時間総計(統計情報X13)について説明する。SSD2の電源がONになっている間、SSDC41がクロックをカウントしたり内部の時計回路から時刻情報を受信することで、経過時間をインクリメントする。あるいは、SSDC41がホスト装置3から定期的にホスト装置3の時刻情報を受信するようにし、その時刻情報の差分をインクリメントするようにしてもよい。統計情報X13はSSD2製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
推奨動作温度の最高値を上回った時間累計(統計情報X14)について説明する。たとえば、SSD2の基板上、SSDC41内、NANDメモリ16内など、SSD2内に温度計が実装されている場合、SSDC41は温度計から定期的に温度情報を受信している。受信した温度が推奨動作温度(たとえば100℃)を上回った場合、SSDC41はクロックや内部の時計やホスト装置3から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。統計情報X14はSSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
推奨動作温度の最低値を下回った時間累計(統計情報X15)について説明する。SSD2内に温度計が実装されている場合、SSDC41は温度計から定期的に温度情報を受信している。受信した温度が推奨動作温度(たとえば−40℃)を下回った場合、SSDC41はクロックや内部の時計やホスト装置3から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。SSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
コマンドの応答時間最大値(統計情報X16)について説明する。統計情報X16はホスト装置3からコマンドを受信してから、ホスト装置3へ応答するまで(またはコマンド実行完了するまで)に要した時間(またはクロック数)の最大値である。X16を上回る応答時間が発生した場合は、この応答時間をX16に上書きする。コマンドそれぞれに対して統計情報X16を保持してもよい。SSD2の製造時(検査工程前)またはSSD2の出荷時にはX16がゼロにリセットされていることが望ましい。
コマンドの応答時間平均値(統計情報X17)について説明する。統計情報X17は、ホスト装置3からコマンドを受信してから、ホスト装置3へ応答するまで(またはコマンド実行完了するまで)に要した時間(またはクロック数)の平均値である。たとえば応答時間リストを一定数RAM40に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報X17を保持してもよい。SSD2の製造時(検査工程前)またはSSD2の出荷時にはX17がゼロにリセットされていることが望ましい。
NANDメモリの応答時間最大値(統計情報X18)について説明する。統計情報X18は、SSDC41がNANDメモリ16に命令してから応答を得る(またはコマンド実行完了通知を受信する)までに要した時間(またはクロック数)の最大値である。X18を上回る応答時間が発生した場合は、この応答時間をX18に上書きする。コマンドそれぞれに対して統計情報X18を保持してもよい。SSD2の製造時(検査工程前)またはSSD2の出荷時にはX18がゼロにリセットされていることが望ましい。
NANDの応答時間平均値(統計情報X19)について説明する。統計情報X19は、SSDC41がNANDメモリ16に命令してから応答を得る(またはコマンド実行完了通知を受信する)までに要した時間(またはクロック数)の平均値である。たとえば応答時間リストを一定数RAM40に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報X19を保持してもよい。SSD2の製造時(検査工程前)またはSSD2の出荷時にはX19がゼロにリセットされていることが望ましい。
現在温度(統計情報X20)について説明する。SSD2内に温度計が実装されている場合、SSDC41は温度計から定期的に温度情報を受信する。SSDC41は温度計から最後に受信した温度を現在温度として統計情報X20に保持する。この値が極端に大きいと(たとえば85℃以上)、SSD2の信頼性に悪影響があり、また、この温度が極端に小さいと(たとえば−10℃以下)、SSD2の信頼性に悪影響があると判断する。
最高温度(統計情報X21)について説明する。SSDC41は、現在温度X20の最大値を最高温度として統計情報X21に保持する。この値が極端に大きいと(たとえば85℃以上)、SSD2の信頼性に悪影響がある。SSDC41は、X21よりも大きい現在温度を温度計から受信した時、X21を現在温度に書き換える。SSD2の製造時(検査工程前)またはSSD2の出荷時にはX21がSSD2の動作温度にくらべて十分に小さい温度(たとえば−40℃)にリセットされていることが望ましい。
最低温度(統計情報X22)について説明する。SSDC41は、現在温度X20の最小値を最低温度として統計情報X22に保持する。この値が極端に小さいと(たとえば−40℃以下)、SSD2の信頼性に悪影響がある。SSDC41は、X22よりも小さい現在温度を温度計から受信した時、X22を現在温度に書き換える。SSD2の製造時(検査工程前)またはSSD2の出荷時にはX22がSSD2の動作温度にくらべて十分に大きい温度(たとえば120℃)にリセットされていることが望ましい。
統計情報増加率(統計情報X23)について説明する。統計情報X01〜X19の最新でない情報(たとえば一定時刻前や、SSD2をパワーオンした時の値や前回SSD2をパワーダウンしたときの値など)を別途保持しておく。統計情報X23は、例えば、下記のいずれかで定義される。
統計情報増加率=(最新統計情報)―(旧情報)
統計情報増加率=((最新統計情報)―(旧情報))/(旧情報を取得してからの経過時刻)
統計情報増加率=((最新統計情報)―(旧情報))/(旧情報を取得してからのNANDアクセス回数)
SSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
NAND整理失敗フラグ(統計情報X24)について説明する。統計情報X24が1になっていると、NAND整理によっても動作に十分な数のフリーブロック数を確保できないことになる。SSD2の製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
統計情報65としては、上述したすべてのパラメータを格納してもよいし、これらの一部あるいはどれか一つのみを格納してもよい。統計情報65は最新情報をRAM40上の領域40Aに保持し、定期的にNANDメモリ16上の領域40Mにバックアップすることが望ましい。一方、RAM40やNANDメモリ16のどちらか一方にのみ保存するようにしてもよいし、当該統計情報をホスト装置3に送信して、ホスト装置3やホスト装置3に接続された記憶装置に保存するようにしてもよい。
(LBA正引き変換)
つぎに、図21を用いてSSD2においてLBAから物理アドレスを特定する手順(LBA正引き変換)について説明する。LBAが指定されたとき、SSDC41はLBAからトラックアドレスとクラスタアドレスとクラスタ内アドレスを計算する。
SSDC41は、まずトラックテーブル63を検索し、計算したトラックアドレスに対応する物理ブロックIDを特定する(ステップS100、S101)。SSDC41は、特定した物理ブロックIDが有効であるか否かを判定し(ステップS102)、物理ブロックIDがヌルではなく有効な値である場合は(ステップS102:Yes)、この物理ブロックIDがABT62にエントリされているか否かを検索する(ステップS103)。ABT62に物理ブロックIDがエントリされている場合は(ステップS104:Yes)、この物理ブロックIDの指定する物理ブロックの先頭位置からトラック内アドレス分だけシフトした位置が指定されたLBAに対応するNANDメモリ16上の物理的な位置となる(ステップS105)。このような場合には、LBAに対応するNANDメモリ16上の物理的な位置の特定にはクラスタテーブル64を必要とせず、このようなLBAを「トラック管理されているLBA」と呼ぶ。ステップS104において、ABT62に物理ブロックIDがエントリされていない場合は(ステップS104:No)、指定されたLBAは対応する物理アドレスを持たないことになり、このような状態を「未書き込み状態」と呼ぶ(ステップS106)。
ステップS102において、指定されたトラックアドレスに対応する物理アドレスがヌルであり無効な値の場合は(ステップS102:No)、SSDC41はLBAからクラスタアドレスを計算し、クラスタテーブル64を検索し、計算したクラスタアドレスに対応する物理ブロックID及び対応する物理ブロック内ページアドレスをクラスタテーブル64から取得する(ステップS107)。物理ブロックIDと物理ブロック内ページアドレスが指定する物理ページの先頭位置からクラスタ内アドレス分だけシフトした位置が指定されたLBAに対応するNANDメモリ16上の物理的な位置となる。このような場合は、LBAに対応するNANDメモリ16上の物理的な位置は、トラックテーブル63のみからは特定できず、クラスタテーブル64の参照を必要とすることになり、このようなLBAを「クラスタ管理されているLBA」という(ステップS108)。
(読み出し動作)
つぎに、図22、図23を用いてSSD2における読み出し動作を説明する。本実施形態で説明する読み出し動作はINCITS ACS−2に記載されている60h READ FPDMA QUEUEDの場合であるが、25h READ DMA EXTなどその他書き込みコマンドを採用してもよく、読み出しコマンドの種類の違いは発明の本質には影響しない。SSD2がホスト装置3から読み出し命令を受信した場合は(ステップS110)、SSDC41がこの読み出し命令をRAM40上の読み出し命令待ち行列に追加し(ステップS111)、読み出し命令を受理した旨をホスト装置3に返信する。
一方、SSDC41は、RAM40上の読み出し命令待ち行列に命令が存在している場合、読み出し処理を実行可能な状態になっているか否かを判定し(ステップS120)、読み出し処理を実行可能な状態になったと判断すると、先の図21に示したLBA正引き変換手順にしたがってホスト装置3から受信したLBAからデータの物理的な位置を特定する(ステップS121)。SSDC41は、特定した位置の物理ページからデータを読み出し(ステップS123)、読み出したデータのうちECC冗長ビットを用いてECC復号化し(ステップS124)、復号化したデータをIFC42を介してホスト装置3に送信し(ステップS125)、統計情報65を更新する。なお、NANDメモリ16から読み出したデータは、いったんRAM40に書き込み、RAM40に書き込んだデータを復号化してホスト装置3に送信するようにしてもよいし、復号化したデータをいったんRAM40に書き込み、RAM40に書き込んだデータをホスト装置3に送信するようにしてもよい。
ステップS124において、SSDC41はECCによる復号化を試みるが、復号化できなかった場合、復号化できなかったページを含む物理ブロックをABT62から削除してBBT61に登録し、統計情報65のECC訂正できなかったECC訂正単位数総計(統計情報X08)を加算する。その際、当該ブロックのデータをFBT60から割り当てたフリーブロックにコピーし、当該フリーブロックの物理ブロックIDをABT62に登録してトラックテーブル63およびクラスタテーブル64の物理ブロックをコピー元物理ブロックIDからコピー先物理ブロックIDに書き換えることが望ましい。
(書き込み動作)
つぎに、図24、図25を用いてSSD2における書き込み動作を説明する。本実施形態で説明する書き込み動作はINCITS ACS−2に記載されている61h WRITE FPDMA QUEUEDの場合であるが、35h WRITE DMA EXTなどその他書き込みコマンドを採用してもよく、書き込みコマンドの種類の違いは発明の本質には影響しない。SSD2がホスト装置3から書き込み命令を受信した場合は(ステップS130)、SSDC41がこの書き込み命令をRAM40上の読み出し命令待ち行列に追加し(ステップS131)、書き込み命令を受理した旨をホスト装置3に返信する。
一方、SSDC41は、RAM40上の書き込み命令待ち行列に命令が存在している場合、書き込み処理を実行可能な状態になっているか否かを判定し(ステップS140)、書き込み処理を実行可能な状態になったと判断すると、ホスト装置3に書き込み可能であることを通知し、ホスト装置3から書き込みデータを受信し、受信したデータをECC符号化し、符号化したデータをRAM40のキャッシュメモリ46に記憶する。なお、符号化しないデータをキャッシュメモリ46に記憶し、NANDメモリ16に書き込む時に符号化するようにしてもよい。
つぎに、SSDC41はFBT60を読み出し(ステップS141)、FBT60からフリーブロックの物理ブロックIDを取得する。フリーブロックが存在しない場合は(ステップS142:No)、SSDC41は後述するNANDメモリ16の整理(NAND整理)を行い(ステップS143)、この整理の後、FBT60を読み出し(ステップS144)、FBT60からフリーブロックの物理ブロックIDを取得する。SSDC41は、物理ブロックIDを取得したフリーブロックに対し、消去動作を行う。消去エラーが発生した場合は、当該物理ブロックIDをBBT61に追加し、FBT60から削除し、S141からやり直してフリーブロックを再取得する。なお、一度消去エラーが発生した物理ブロックであっても、再度消去動作を行うと消去エラーが発生せずに正常に消去できることがあるため、バッドブロック数の不必要な増大を防止するという観点では、FBT60やABT62に統計情報X05としてのブロックごと消去エラー発生回数の項目を各ブロックごとに設け、ブロックの消去エラーが発生した場合にこれをインクリメントするようにし、ブロックごと消去エラー発生回数が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。さらに望ましくは、連続して消去エラーが発生する物理ブロックのみをバッドブロック化するために、SSDC41は、前記「ブロックごと消去エラー発生回数」のかわりに「ブロックごと消去連続エラー回数」の項目をもうけ、ブロックの消去エラーが発生した場合にこれをインクリメントするようにし、消去をエラー無く行えた場合にこれをゼロにリセットするようにし、「ブロックごと消去連続エラー回数」が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。
つぎに、SSDC41は、書き込み命令で指定されているLBAが未書き込み状態であるか否かを検索するために、先の図21に示した正引き変換手順にしたがってLBAに対応する有効なデータがNANDメモリ16に記憶済みであるか否か判定する(ステップS145、S146)。
LBAが未書き込み状態である場合は(ステップS146:Yes)、SSDC41は、キャッシュメモリ46に記憶している受信データをフリーブロックに書き込み(ステップS147)、書き込みを行ったフリーブロック(新物理ブロック)のID及びその消去回数をABT62に登録し、書き込みを行った物理ブロックのIDをFBT60から削除する(ステップS151)。この際、受信データのLBAをトラック単位の区画(トラック区画)で区切り、トラック区画内がデータで埋め尽くされているか否かを判定することで、トラック管理するかクラスタ管理するかを判定する(ステップS152)。すなわち、トラック区画内がデータで埋め尽くされている場合は、トラック管理となり、トラック区画内がデータで埋め尽くされていない場合は、クラスタ管理となる。クラスタ管理の場合は、クラスタテーブル64を書き換えて、LBAに新物理ブロックIDを関連付け(ステップS153)、さらにトラックテーブル63を書き換えて、LBAに無効な物理ブロックID(例えば、ヌル)を関連付ける。トラック管理の場合は、トラックテーブルを書き換えて、LBAに新物理ブロックIDを関連付ける(ステップS154)。
一方、ステップS146において、LBAが未書き込み状態でない場合は、SSDC41は正引き変換により得られた物理ブロックIDをもとに、対応する物理ブロック内全データをNANDメモリ16から読み出して、RAM40に書き込む(ステップS148)。そして、キャッシュメモリ46に記憶されているデータとNANDメモリ16から読み出してRAM40に書き込んだデータとをRAM40上で合成し(ステップS149)、合成したデータをフリーブロックに書き込む(ステップS150)。
なお、ステップS150で書き込みエラーが発生した場合は、当該物理ブロックIDをBBT61に追加し、FBT60から削除し、ステップS141からやり直してフリーブロックを再取得する。なお、一度書き込みエラーが発生した物理ブロックであっても、再度書き込み動作を行うと書き込みエラーが発生せずに正常に書き込みできることがあるため、バッドブロック数の不必要な増大を防止するという観点では、FBT60やABT62に統計情報X04としてのブロックごと書き込みエラー発生回数の項目を各ブロックごとに設け、ブロックの書き込みエラーが発生した場合にこれをインクリメントするようにし、「ブロックごと書き込みエラー発生回数」が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。さらに望ましくは、連続して書き込みエラーが発生する物理ブロックのみをバッドブロック化するために、SSDC41は、前記「ブロックごと書き込みエラー発生回数」のかわりに「ブロックごと書き込み連続エラー回数」の項目をもうけ、ブロックの書き込みエラーが発生した場合にこれをインクリメントするようにし、書き込みをエラー無く行えた場合にこれをゼロにリセットするようにし、「ブロックごと書き込み連続エラー回数」が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。
SSDC41は、書き込みを行ったフリーブロック(新物理ブロック)のID及びその消去回数をABT62に登録し、書き込みを行った物理ブロックのIDをFBT60から削除する(ステップS151)。LBAがクラスタ管理である場合は、クラスタテーブル64の旧物理ブロックIDを新物理ブロックIDに書き換える(ステップS152、S153)。トラック管理の場合は、トラックテーブルの旧物理ブロックIDを新物理ブロックIDに書き換える(ステップS152、S154)。さらに、SSDC41は、旧物理ブロックID及びその消去回数をFBT60に追加し、旧物理ブロックID及びその消去回数をABT62から削除する(ステップS155)。SSDC41は以上の書き込み処理の内容を統計情報65に反映する。
(NAND整理)
SSD2の全LBAの容量は、SSD2のNANDメモリ16の全容量よりも小さく設計されているため、書き込み動作がトラック単位で書き込まれ続ける限りはフリーブロックが枯渇することはない。一方、未書き込みLBAに対してクラスタ単位の書き込みが多数発生した場合、クラスタ単位の書き込み一つに対してクラスタよりも容量の大きい物理ブロックが割り当てられることになるため、書き込まれるデータ容量よりも多くのNANDメモリ16物理ブロックを必要とすることになり、それによりフリーブロックが枯渇する可能性がある。フリーブロックが枯渇した場合は、以下に示すNANDメモリ16の整理によってフリーブロックを新たに確保することができる。
図26を用いてSSD2におけるNAND整理を説明する。物理ブロックに記憶されている全てのクラスタが有効クラスタであるとは限らず、有効クラスタに該当しない無効クラスタはLBAに対応付けられていない。有効クラスタとは最新のデータを記憶しているクラスタであり、無効クラスタとは同一LBAのデータが他の場所に書きこまれ、参照されることがなくなったクラスタである。物理ブロックは無効クラスタの分だけデータに空きがあることになり、有効クラスタのデータを集めて違うブロックに書き直すNAND整理を実行することでフリーブロックを確保することができる。
まず、物理ブロックIDi=0にし、空き領域累積量S=0にする(ステップS160)。SSDC41は、このIDがi=0の物理ブロックがトラックテーブル63にエントリされているか否かを判定する(ステップS161)。トラックテーブルにエントリされている場合はiを+1し(ステップS162)、つぎの番号のIDを持つ物理ブロックについて同様の判定を行う(ステップS161)。すなわち、物理ブロックIDがトラックテーブル63に含まれている場合は、この物理ブロックのデータはトラック管理であるため、NAND整理対象に含めない。
SSDC41は、ID=iの物理ブロックがトラック管理でない場合は(ステップS161:No)、つぎにクラスタテーブル64を参照し、ID=iの物理ブロックに含まれる有効クラスタのアドレスを全て取得する(ステップS163)。そして、SSDC41は、取得した有効クラスタの総容量分のサイズvを求め(ステップS164)、v<物理ブロックサイズであるときは(ステップS165)、現在物理ブロックのIDをNAND整理対象ブロックリストに加える(ステップS166)。さらに、SSDC41は、取得クラスタ累計量Sに現在物理ブロックの取得クラスタ容量vを加算し、取得クラスタ累計量Sを更新する(ステップS167)。
ステップS165で、v<物理ブロックサイズでないとき、あるいはステップS168で取得クラスタ累計量Sが物理ブロックサイズに到達していない場合は、SSDC41は、iを+1し(ステップS162)、つぎの番号のIDを持つ物理ブロックについて、ステップS161〜S167の手順を前記同様に実行する。そして、ステップS168で、取得クラスタ累計量Sが物理ブロックサイズに到達するまで、ステップS161〜S167の手順を繰り返す。
そして、ステップS168において、取得クラスタ累計量Sが物理ブロックサイズに到達した場合は、SSDC41は、NAND整理対象ブロックリスト上の全物理ブロックについての全有効クラスタのデータをNANDメモリ16から読み出してRAM40に書き込み(ステップS169)、さらに、NAND整理対象ブロックリスト上の全物理ブロックに対して消去処理を行い(ステップS170)、消去処理を行った全物理ブロックをABT62から削除してFBT60に追加する(ステップS171)。その際、消去回数をインクリメントする。なお、ステップS170で行う消去動作の対象は、ステップS172でデータを書き込む対象のブロックに限定してもよく、ブロックの消去回数を抑制するという観点ではそのように行うことが望ましい。
消去エラーが発生した場合は、当該物理ブロックIDをBBT61に追加し、FBT60から削除する。なお、一度消去エラーが発生した物理ブロックであっても、再度消去動作を行うと消去エラーが発生せずに正常に消去できることがあるため、バッドブロック数の不必要な増大を防止するという観点では、FBT60やABT62に「ブロックごと消去エラー発生回数」の項目を各ブロックごとに設け、ブロックの消去エラーが発生した場合にこれをインクリメントするようにし、ブロックごと消去エラー発生回数が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。さらに望ましくは、連続して消去エラーが発生する物理ブロックのみをバッドブロック化するために、SSDC41は、前記「ブロックごと消去エラー発生回数」のかわりに「ブロックごと消去連続エラー回数」の項目をもうけ、ブロックの消去エラーが発生した場合にこれをインクリメントするようにし、消去をエラー無く行えた場合にこれをゼロにリセットするようにし、「ブロックごと消去連続エラー回数」が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。
そして、SSDC41は、FBT60から新たなフリーブロックを取得し、取得したフリーブロックに対しRAM40に書き込んだデータを書き込み(ステップS172)、データを書き込んだフリーブロックの物理ブロックID及び当該ブロックの消去回数をABT62に追加し、さらにデータが書き込まれたブロックのブロックIDをFBT60から削除する(ステップS173)。さらに、SSDC41は、今回のNAND整理に対応するように、クラスタテーブル64におけるクラスタアドレス、物理ブロックID及び物理ブロック内ページアドレスを更新する(ステップS174)。SSDC41は上記NAND整理の処理内容を統計情報65に反映する。
なお、ステップS172で書き込みエラーが発生した場合は、当該物理ブロックIDをBBT61に追加し、FBT60から削除し、フリーブロックを再取得する。なお、一度書き込みエラーが発生した物理ブロックであっても、再度書き込み動作を行うと書き込みエラーが発生せずに正常に書き込みできることがあるため、バッドブロック数の不必要な増大を防止するという観点では、FBT60やABT62に「ブロックごと書き込みエラー発生回数」の項目を各ブロックに設け、ブロックの書き込みエラーが発生した場合にこれをインクリメントするようにし、「ブロックごと書き込みエラー発生回数」が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。さらに望ましくは、連続して書き込みエラーが発生する物理ブロックのみをバッドブロック化するために、SSDC41は、前記「ブロックごと書き込みエラー発生回数」のかわりに「ブロックごと書き込み連続エラー回数」の項目をもうけ、ブロックの書き込みエラーが発生した場合にこれをインクリメントするようにし、書き込みをエラー無く行えた場合にこれをゼロにリセットするようにし、「ブロックごと書き込み連続エラー回数」が所定値以上になった場合に当該ブロックをBBT61に登録するようにするのが望ましい。
なお、図26の手順では、フリーブロックにデータを詰め込むことを優先するNAND整理を行ったが、ステップS164で、vを物理ブロックサイズから取得したクラスタの容量を減算することによって求め、ステップS165でv>0か否かを判定し、v>0の場合はステップS168に移行し、v>0でない場合はステップS162に移行させるようにすることで、フリーブロックを確保することを優先するNAND整理を行うようにしてもよい。
つぎに、図27を用いてSSD2における削除通知について説明する。削除通知は、ホスト装置3上のOS100によってデータの削除が行われた場合に、ホスト装置3から外部記憶装置に対して送信される命令である。削除通知の例として、例えば、INCITS ATA/ATAPI Command Set−2(ACS−2)で記述されているData Set Management Command(通称トリム(TRIM)コマンド)があげられる。これは、OS100上でデータが削除された場合、削除されたデータの存在する論理アドレス領域(LBA領域)を、LBA及びセクタ数の組みよりなるLBA Range Entryとして外部記憶装置に通知することにより、外部記憶装置上でもその領域を空き領域として扱うことができる方式である。削除通知により、SSD2はフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、Data Set Management Commandだけでなく、たとえば、INCITS ACS−2で記述されているSCT Command Transportや、その他ベンダー独自のコマンドなどその他コマンドによって実現してもよい。OS100が緊急時OSである場合は、NANDメモリに対する書き込みを減らすという観点では、緊急時OSでは当該削除通知の発行を禁止することが望ましい。一方、当該削除通知処理ではNANDメモリ16に関して高々管理情報45程度の書き換えしか発生しないため、緊急時OSにおいても当該削除通知を許可してもよい。
SSD2がホスト装置3から削除通知を受信した場合は(ステップS180)、SSDC41は、削除通知に含まれるLBAを先の図21に示した手順に従ってLBA正引き変換する。SSDC41は、削除通知に含まれるLBAがトラック管理である場合は(ステップS181:Yes)、物理ブロックIDをFBT60に追加してABT62から削除する(ステップS184)。一方、SSDC41は、削除通知に含まれるLBAがクラスタ管理である場合は(ステップS181:No)、物理ブロックに対応する全クラスタをクラスタテーブル64から削除し(ステップS182)、トラックテーブル63において、LBAに対応するトラックに対応する物理ブロックIDに適当な有効値(例えばFFFF)を記入し(ステップS183)、物理ブロックIDをFBT60に追加してABT62から削除する(ステップS184)。SSD2では、NAND整理以外に、削除通知処理によってもフリーブロックを確保することができる。
このようなNAND整理により、書き込みに対し十分な数のフリーブロックを確保できるのが通常である。NAND整理によっても、書き込みに対し十分な数のフリーブロックを確保できなかった場合は、統計情報65のNAND整理失敗フラグを1にして、ホスト装置3による統計情報65の取得を通じてSSD2がフリーブロックを確保できなかったことをホスト装置3に通知できるようにすることが望ましい。NAND整理失敗フラグが1になってから実際にSSD2が動作しなくなるまでの時間に猶予をもたせるという観点では、
(NAND整理をして確保できたフリーブロック数)<(書き込みに必要なフリーブロック数)+(マージン)
の条件を満たす場合にNAND整理失敗フラグを1にセットするようにしておくことが望ましい。
上記NAND整理は、ホスト装置3からライト要求を受信した時だけでなく、ホストから最後に命令を受信してから所定時間経過した時、またはホスト装置3からスタンバイやアイドルやスリープ状態に移行するコマンドを受信した時などに実行してもよいし、ACS−2に記載のSCT Command Transportやその他ベンダーコマンドなどを通じて、NAND整理を開始する命令をSSD2がホスト装置3から受信した時などに実行してもよい。なお、OS100が緊急時OSである場合は、NANDメモリに対する書き込みを減らすという観点では、ホスト装置3から最後に命令を受信してから所定時間経過した時、ホスト装置3からスタンバイやアイドルやスリープ状態に移行するコマンドを受信した時に、上記NAND整理を行わないことが望ましい。さらには、OS100が緊急時OSである場合は、NANDメモリ16に対する書き込みを減らすという観点では、緊急時OSにおいてはNAND整理を開始する命令発行が禁止されていることが望ましい。
(エラー処理)
次に、図28を用いてSSD2でのNANDメモリ16に関するエラー処理について説明する。ホスト装置3からのライト要求に対する処理やNAND整理処理など各種処理は通常は上記のように行われるが、NANDメモリ16に対する書き込み動作(プログラム動作)で書き込みエラーが発生する場合、NANDメモリ16に対する消去動作(イレーズ動作)で消去エラーが発生する場合、NANDメモリ16に対する読み出し動作の際にECCエラー(誤り訂正処理の失敗)が生じる場合などがあり、これらに対する例外処理が必要となる。
SSDC41は、上記の何れかのエラーが発生した場合(ステップS190)、エラーが発生した物理ブロックをBBT61に追加し(ステップS191)、エラーが発生した物理ブロックをABT62及びFBT60から削除することで(ステップS192)、以後は、エラーが発生した物理ブロックにアクセスできないようにする。この際、エラーが発生した物理ブロックのデータを別の物理ブロックにコピーしてもよい。SSDC41は上記エラー処理を統計情報65に反映させる。
上記では、エラー処理の一例を、読み出し処理、書き込み処理、NAND整理処理に関して示したが、エラー処理はこれらの例に限らず、NANDメモリ16に対する全ての読み出し処理、書き込み処理、消去処理に対して適用可能である。
(制御ツール)
SSD2を利用しているうちに、NANDメモリ16の各ブロックの信頼性が劣化していき、バッドブロックの数が増えていき、フリーブロック数とアクティブブロック数の和が減っていくことになる。さらにSSD2を使用していると、NAND整理を行っても、書き込み処理を行うのに十分なフリーブロック数を確保できなくなり、これがSSD2の寿命である。以下では、SSD2の寿命が到達した場合の制御ツール200の処理を示す。
制御ツール200は起動されると、主メモリ6に常駐してSSD2の統計情報65を監視する。SSD2の統計情報65を常に監視するためには、制御ツール200の起動プログラムが通常時OS100Aのスタートアッププログラムに登録されるなどして、通常時OS100Aが領域16D(または20D)から領域6Aに読み出されるときまたはその直後に制御ツール200が領域16B(または領域20B)から読み出されるのが望ましい。たとえば、OS100がWindows(登録商標)である場合は、制御ツール200を、例えばWindows(登録商標)のスタートアップメニューに登録したり、あるいはサービスとして登録したり、Windows(登録商標)のレジストリに登録したりすることで、制御ツール200を起動時の常駐プログラムに設定しておくことで、制御ツール200を自動起動させることが可能となる。
制御ツール200は、例えば図29に示すように、一定時間おき(たとえば1分おき)にSSD2から統計情報65を取得する。統計情報を取得する方式として、例えば、INCITS ACS-2に記述されている、メモリの自己診断機能であるS.M.A.R.T(Self-Monitoring Analysis and Reporting Technology)のコマンドであるSMART READ DATA(B0h(D0h))又はACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドを用いてもよい。
図30は、SSD2で管理される統計情報65(統計情報X01〜X19、X23、X24)に関するテーブルを示すものである。S.M.A.R.Tを用いる場合、図30に示すように、統計情報65の構成要素(X01〜X19、X23、X24など)それぞれに対し、属性ID(attribute ID)を割り当るが、これら構成要素の一部のみに割り当ててもよいのはもちろんである。これら統計情報65の構成要素に関し、規格化後、最良値としてSMABを採用し、規格化後の信頼性保証下限値としてSMAL=SMAB*AMALR(0≦AMALR<1)(SMALは整数で、四捨五入、小数点以下切り上げ、小数点以下切り上げのいずれかにより少数から整数に変換される)を採用し、
attribute value = SMAL + SMAB×(1-AMALR)×(RMAX−生の値)/ RMAX
attribute Threshold=30(固定値)
RMAX=信頼性保証できる統計情報生の値の上限値
生の値=統計情報の生の値
により、SSDC41は、smart情報のattribute value(図30の「Value」)を計算して制御ツール200に送信する。attribute Thresholdは、図26の「Threshold」であり、生の値は、図26の「Raw Data」である。
規格化後の最良値SMABは任意の自然数であればよく、たとえばSMAB=100を採用してもよい。AMALRは0≦AMALR<1をみたす任意の数であればよく、たとえばAMALR=0.3を採用してもよい。また、RMAX、AMALRおよびSMABは各X01〜X19、X23、X24に対して、それぞれ別の値を採用することができる。SMAB=100で、AMALR=;0.3を採用した時、採用対象の統計情報に関してattribute valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD2が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、attribute valueが30かそれ以下の値に到達することになる。なお、Attribute ValueがThresholdを超過しているか否かをホスト3が検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
RMAXは、たとえば図31のように統計情報の生の値とSSD2の不良率の関係を開発段階に導き出し、不良率が許容値を超える時の統計情報生の値をRMAXとして採用することが望ましい。たとえば、SSD2の開発段階で、多数個(たとえば100個)の試験用SSD2群に対して高温で書き込み動作を繰り返しながら、書き込んだデータが一定時間以上正しく記憶され続けるかを検証する摩耗試験を行い、同時に統計情報をモニタしつづけ、不良率が一定割合に到達する時点での統計情報の生の値をRMAXとして採用すればよい。たとえば、摩耗したSSD2を高温状態である時間以上放置して、その後SSD2の温度を下げ、SSD2に対して読み出し動作を行い、読み出したデータがECC訂正できない場合(またはECC訂正できないデータが一定数以上の場合)、これをSSD2の不良として定義し、不良数を、同等の試験を行ったSSD2の個数で割った値を不良率として採用すればよい。この不良率が、前記許容できる不良率を統計的に有意に下回る統計情報生の値をRMAXとして採用すればよい。RMAXにある程度マージンをもたせて、
RMAX´=RMAX−マージン
としたRMAX´をRMAXとして採用してもよい。
図30の「Worst」を制御ツール200がSSD2の寿命を診断する仕様として採用してもよい。「Worst」はattribute valueの最悪値としてSSDC41に計算される。たとえば、X01〜X19、X23の場合、Worstは、たとえばSSD2が出荷後の(または製造後の)、attribute valueの最小値である。あるいは、Worstとして、過去ある一定時間範囲内のattribute valueの最小値をWorst Valueとして採用してもよいし、ある一定回数(一定データ量)通信または処理が行われた過去にさかのぼって、その過去から現在に至るまでの最小値をworst valueとして採用してもよい。
図30の「Raw Data」(Raw Value)を制御ツール200がSSD2の寿命を診断する仕様として採用してもよい。統計情報(たとえば、X01〜X19、X23、X24)の生の値がRaw DataとしてSSD2から制御ツール200に送信される。この場合、制御ツール200は、RMAXを制御ツール200内にすでに保持しているかSSD2から別途読み出すかその他記憶装置から読み出すかしてRMAXを取得し、RMAXとRaw Dataを比較し、Raw Data>RMAXまたはRaw Data≧RMAXとなった時、SSD2が寿命に到達したと判断する。たとえば、NAND整理失敗フラグの場合、これが1である場合にSSD2が寿命に到達したと判断する。たとえば、バッドブロック数総計の場合、これが所定値を上回った場合にSSD2が寿命に到達したと判断する。Raw Dataとして、必ずしも統計情報の生の値を出力する必要はなく、たとえば、統計情報の生の値を四則演算した値をRaw DataとしてSSDC41が制御ツール200に送信し、同じくRMAXを四則演算した値と比較することで判定を行ってもよい。また、統計情報の生の値を暗号化したデータをRaw DataとしてSSDC41が制御ツール200に送信し、SSDC41がこれを復号化して復号化後のデータをRMAXと比較することで判定を行ってもよい。
上記のようにして、制御ツール200は、SSD2が寿命に到達したか否か(SSD2が異常状態であるか否か)を判定し、SSD2が寿命に到達したと判定された場合(SSD2が異常状態であると判定された場合)、後述する寿命到達時処理(ステップS205)に移行する。統計情報65は、統計情報X01〜X19、X23、X24以外にも種々の形態をとりうるが、本発明はこれらに対しても適用可能である。また、X01〜X19、X23、X24と不良率の関係には正の相関関係が存在するが、不良率と負の相関関係が存在する統計情報に対しても本発明は適用可能である。たとえば、SSD2が出荷後に体験した最低温度などである。その場合、RMAXの代わりに、信頼性保証できる下限値RMINを採用し、統計情報がRMINを下回った場合にSSD2が寿命に到達したと判断すればよい。
図29において、S.M.A.R.Tを用いる場合、制御ツール200は、一定時間おき(たとえば1分おき)に統計情報の取得を行う(ステップS200:Yes)。制御ツール200は、統計情報取得コマンドであるACS−2に記載のB0h/D0h SMART READ DATAを発行し(ステップS201)、SSD2から統計情報を含むデータを受信し(ステップS202)、この受信したデータを診断する(ステップS203)。診断方法は前述したとおりである。ステップS204において、SSD2が寿命に到達したと制御ツール200が判断した時(ステップS204:Yes)、制御ツールは寿命到達時処理に移行する(ステップS205)。SSD2が寿命に到達していなくても、統計情報があらかじめ定められたRMAXを上回ったり、あるいは通常動作ではありえない異常値を示した場合などにおいても、ステップS205の処理に移行することが望ましい。
統計情報65以外の情報を用いて、寿命到達時処理に移行してもよい。たとえば、図32に示すように、制御ツール200は、OS100がSSD2から受信する応答情報(図12参照)をOS100から取得(監視)し(ステップS210)、エラー応答であった場合(ステップS211)、SSD2が異常状態に至ったと判断し、寿命到達時処理に移行する(ステップS212)。監視する応答はどのようなコマンドに対する応答でもよいが、たとえばACS−2記載の61h WRITE FPDMA QUEUEDや35h WRITE DMA EXTなどのSSD2に対する書き込みコマンドに対する応答のみを監視することが、CPU4への負荷低減の観点から望ましい。特に、SSD2が特許文献1として提示した特開2009−217603号公報の発明を採用したSSDである場合、SSD2が寿命に至ると、SSD2への書き込みコマンドに対する応答がエラーで返ってくるようになるため、統計情報の取得無しに寿命到達を判断することができる。なお、SSD2が特許文献1として提示した特開2009−217603号公報の発明を採用したSSDで無い場合であっても本発明が適用できることはもちろんである。
なお、SSD2が書き込みコマンドに対してエラーを返す状態である場合で、後述するSSD2のブートローダの書き換えや緊急時OSの書き込み等書き込みを行う場合は、特許文献1のReadOnlyモード状態において特殊な書き込みコマンド(例えばACS−2に記述されているSCT Command Transportやその他ベンダー独自コマンドなど)に対してはエラーを返さないようSSDC41を構成しておき、前述した特殊な書き込みコマンドを用いてSSD2に書き込みを行うことが望ましい。なお、SSD2以外の記憶装置への書き込みには必要ない。あるいは、通常時OS時が、書き込みコマンドとしてある書き込みコマンド(たとえば61h WRITE FPDMA QUEUED)のみを使うようなOSである場合には、SSDC41が特許文献1のReadOnlyモードに至ると、当該書き込みコマンド(たとえば61h WRITE FPDMA QUEUED)に対してエラーを返すようにSSDC41を構成し、別の書き込みコマンド(たとえば30h WRITE SECTOR(S))に対してはエラーを返さないようにSSDC41を構成し、別の書き込みコマンド(たとえば30h WRITE SECTOR(S))を用いてSSD2に対してブートローダや緊急時OSなどの書き込みを行うようにしてもよい。
監視対象のコマンドは、書き込みコマンド以外のコマンドであってもよいのはもちろんである。たとえば、コマンド応答としてACS−2記載のB0H/D4H SMART EXECUTE OFF-LINE IMMEDIATEの応答(Outputs)やレポートを用いてもよいし、90h EXECUTE DEVICE DIAGNOSTICの応答を用いてもよい。
あるコマンド応答がエラーであっても、同コマンドを再度送信するとエラーでない可能性があり、この場合はSSD2が寿命に到達していない可能性があるため、再現性のあるコマンドエラーが発生した場合にのみ寿命到達時処理を行う観点では、コマンドエラーが複数回発生した場合に寿命到達時処理を行うことが望ましい。さらに、エラー再現性を厳密に判定する観点では、コマンドエラーが複数回連続で発生した場合に寿命到達時処理を行うことが望ましい。あるいは、図33に示すように、SSD2へのコマンド監視中にコマンド応答がエラーで返ってきた場合(ステップS220、S221:Yes)、制御ツール200またはOS100が同コマンドをSSD2に再度送信(コマンドリトライ)し(ステップS222)、リトライしたコマンドがエラーした場合に(ステップS223:Yes)、寿命到達時処理を行うようにしてもよい(ステップS224)。
(寿命到達時処理)
つぎに、寿命到達時処理(異常状態時処理)について説明する。第1の実施形態では、通常時OSおよび緊急時OSがSSD2にすでに格納されている場合での寿命到達時処理について説明する。通常時OS100A、緊急時OS100Bおよびブートローダ300は、図7〜図11に示したように、たとえば、コンピュータシステム1の出荷前にコンピュータシステム1の製造業者によりSSD2に書き込まれているか、コンピュータシステム1の出荷後にユーザがDVD−ROMやUSBメモリやSSDなどのインストールディスクによりインストールを行うか、コンピュータシステム1の出荷後にユーザがWEBからインストールイメージをダウンロードしダウンロードしたインストールイメージを使ってインストールを行うことで、SSD2に書き込まれる。NANDメモリ16において、図7に示すように、ブートローダ300は領域16Cに、通常時OS100Aは領域16Dに、緊急時OS100Bは領域16Eに書き込まれており、RAM40に格納される管理情報44により、領域16C、領域16D、領域16EにはそれぞれLBAが割り当てられている。領域16CにはLBA16Cが、領域16DにはLBA16Dが、領域16EにはLBA16Eが割り当てられているとする。ブートローダ300内で保持される前述のOSポインタ情報OSPT(読み出すべきOSのLBAを示しているポインタ情報)にも、同様にLBAが割り当てられており、OSPTに割り当てられるLBAをLBAOSPTと呼称する。LBAOSPTはLBA16Cに含まれている。
制御ツール200は、ブートローダ300を書き換えることで、次回以降コンピュータシステム1が起動されたときには、通常時OS100Aではなく緊急時OS100Bがホスト装置3の主メモリ6上の領域6Aに読み出されるようにする。通常時OS100AがOS100としてCPU4に使用されている時は、ホスト装置3はSSD2に対して書き込み動作を行う恐れがあり、それによりSSD2の寿命がさらに短くなったり、SSD2に書き込んだデータやすでに書き込まれているデータを破壊してしまう可能性がある。一方、本実施形態により、通常時OS100Aではなく、緊急時OS100Bを主メモリ6上の領域6Aに読み出し、CPU4が緊急時OS100Bをオペレーティングとして使用しているときは、ホスト3がSSD2に対して書き込み動作を行うことは禁止されるため、SSD2のデータが破壊されたりSSD2が読み出し不可能になったりする前に、SSD2のデータを読み出したり、SSD2に格納されているユーザデータを別の記憶媒体にバックアップしたりすることが可能になる。
たとえば図29のステップS205で寿命到達時処理が呼び出されると、図34に示すように、制御ツール200はブートローダ300を書き換えて、次回以降コンピュータシステム1が起動されたときには、通常時OS100Aではなく緊急時OS100Bが主メモリ6上の領域6Aに読み出されるようにする。たとえば、制御ツール200は、LBAOSPTに対して、書き込みデータとしてLBA16Eを書き込む。これにより、次回以降コンピュータシステム1が起動されると、CPU4はOSポインタ情報OSPTを読み出し、OSポインタ情報OSPTの示すLBAであるLBA16Eに対して読み出し命令を送信することで、緊急時OS100Bを読み出すことができる。ブートローダ300の書き換え前後で、制御ツール200がディスプレイ9を通して、「SSDが寿命に到達しました。緊急時OSを有効にします。」という旨の表示を行ってもよい。
図34では、寿命到達時処理としてブートローダ300の書き換えのみを行ったが、図35に示すように、制御ツール200は、ステップS240でのブートローダ書き換え後に、コンピュータシステム1に対してリセットコマンドを送信したり、通常時OSに対してリセットコマンドを送信したりすることにより、コンピュータシステム1を再起動してもよい(ステップS241)。
また、図36に示すように、ステップS250でのブートローダ書き換え後に、ディスプレイ9を通して、「SSDが寿命に到達しました。緊急時OSを有効にします。今すぐ再起動しますか?」という旨のテキスト表示と、OKボタンの表示を行い(ステップS251)、OKボタンがたとえばマウス15やキーボード14により押下されたとき(ステップS252:Yes)、コンピュータシステム1を再起動するようにしてもよい(ステップS253)。また、OKボタンの表示の代わりに、コマンドプロンプト画面で「SSDが寿命に到達しました。緊急時OSを有効にします。今すぐ再起動しますか?y:Yes, n:No」というテキスト表示を行い、キーボード14から“y”とエンターキーを入力されたとき、コンピュータシステム1を再起動するようにしてもよい。
図37は、コンピュータシステム1の再起動時の動作手順を示すものである。コンピュータシステム1が再起動されると、CPU4は領域16Cに対応するLBAおよびLBAOSPTを使用してブートローダ300およびOSポインタ情報OSPTをSSD2から読み出す(ステップS260)。つぎに、CPU4は、ブートローダ300を使用して所要のブート処理を行うとともに、OSポインタ情報OSPTを解析し、OSポインタ情報OSPTが示すLBAを特定する。そして、CPU4は、特定したLBAに対する読み出し命令をSSD2へ送信することで、OSポインタ情報OSPTが指定するOSをSSD2から読み出す。したがって、OSポインタ情報OSPTが示すLBAが通常時OS100Aの記憶領域である領域16Dを指定しているときには(ステップS261:Yes)、通常時OA100Aが領域16Dから読み出されて主メモリ6上の領域6Aに書き込まれ(ステップS262)、OSポインタ情報OSPTが示すLBAが緊急時OS100Bの記憶領域である領域16Eを指定しているときには(ステップS261:No)、緊急時OA100Bが領域16Eから読み出されて主メモリ6上の領域6Aに書き込まれる(ステップS263)。このように、制御ツール200による寿命到達時処理によってブートローダ300のOSポインタ情報OSPTが、緊急時OS100Bを読み出すように書き換えられているときには、緊急時OA100Bが領域16Eから読み出されて主メモリ6上の領域6Aに書き込まれることになる。
(バックアップ機能)
ユーザがSSD2のユーザデータを他の記憶装置に容易にバックアップしやすくするという観点では、緊急時OS100Bに、ユーザデータバックアップ機能を付加することが望ましい。SSD2が寿命に到達したと考えられる状態では、SSD2のデータリテンション特性が悪化していると考えられるため、できるだけ早急にSSD2上のユーザデータを他のバックアップ用記憶装置にデータを退避させることが必要である。
図38は、緊急時OS100Bがバックアップ機能を搭載している場合の、ホスト装置3の構成を示す図である。ホスト装置3には、インタフェース19(本実施形態ではSATAインタフェースを採用する)を介して、バックアップ用記憶装置(他のSSD、ハードディスクドライブなど)150が接続されている。バックアップ用記憶装置150はコンピュータシステム1の出荷時には搭載されている必要が無く、たとえばユーザが別途購入したSSDをバックアップ用記憶装置150として用いる場合は、SSDのSATAポートをSATAケーブルを経由してマザーボード30(図13参照)に接続し、SSD2の電源ポートを電源ケーブルを経由して電源32に接続するとよい。
図39は、緊急時OS100Bにバックアップ機能を付加した場合の、緊急時OS100Bの起動手順の一例を示すものである。図39のステップS270〜S273の動作は、図37のステップS260〜S263の動作と同じである。図39では、図37に示したコンピュータシステム1の起動手順にステップS274〜S276を追加している。緊急時OS100Bの起動後、ステップS274以降の処理は、たとえば、ユーザがキーボード14やマウス15を介して緊急時OS100Bのプログラムメニューからバックアップ機能を選択するか、あるいは、緊急時OS100Bが起動すると自動的に開始される。バックアップ処理の前に、ディスプレイ9に「バックアップするか?」というメッセージと、OKボタンを表示して、バックアップするタイミングをユーザが自由に選択できるようにすることが望ましい。マウス15やキーボード14によりOKボタンを選択すると、ステップS275のYesにすすむ。あるいは、ディスプレイ9に、コマンドプロンプト経由で「バックアップするか?Yes:Y、No:N」というメッセージを表示して、キーボード14からYボタンとエンターキーを押すことでステップS275のYesにすすむようにしてもよい。このようにして、バックアップ機能が選択されると(ステップS275:Yes)、緊急時OS100Bはバックアップ処理を開始する。
バックアップ処理の内容としては、たとえば、緊急時OS100Bは、SSD2から読み出したデータのLBA(SSD2のLBA)と同一のLBA(バックアップ用記憶装置150上のLBA)に、SSD2から読み出したデータを書き込む(LBA単位のバックアップ)。例えば、SSD2上のLBA=0hのデータはバックアップ用記憶装置150上のLBA=0hにコピーされる(ステップS276)。また、SSD2上のLBA=234c5hのデータはバックアップ用記憶装置150上のLBA=234c5hにコピーされる。データのコピーは、SSD2に対し、たとえばACS−2記載の60h READ FPDMA QUEUEDや25h READ DMA EXTコマンドをLBAおよびセクタ長を指定して送信し、SSD2から読み出しデータを受信して主メモリ6に書き込み、たとえばACS−2記載の61h WRITE FPDMA QUEUEDや35h WRITE DMA EXTをバックアップ用記憶装置150にLBAおよびセクタ長を指定して送信し、主メモリ6に書き込んだデータをバックアップ用記憶装置150に送信することで実行される。バックアップ処理は全LBA領域について行ってもよいが、一部のLBA領域についてのみ行ってもよい。
なお、このバックアップ処理の際、緊急時OS100Bは、SSD2の全ファイルをバックアップ用記憶装置150にコピーするようにしてもよい。多くのOSにおいては、ユーザはLBAを直接指定してデータにアクセスするのではなく、ファイルID(ファイル名)を用いてデータにアクセスする。例えば、SSD2は、図40に示すように、ファイルIDとLBAやセクタ長を関連付けるファイル管理テーブル140を格納している。管理情報44によってファイル管理テーブル140にもLBAが割り当てられている。通常時OS100Aは、図12に示したその他ソフトウェアから受信したファイルIDを、ファイル管理テーブル140をもとにLBAに変換してSSD2に送信したり、SSD2から受信したLBAをファイル管理テーブル140をもとにファイルIDに変換してその他ソフトウェアに送信したりする。バックアップ処理において、緊急時OS100Bはファイル管理テーブル140をSSD2から読み出し、ファイルIDそれぞれに対し、ファイル管理テーブル140で対応しているLBAのデータを読み出すコマンド(60h READ FPDMA QUEUEDや25h READ DMA EXTコマンドなど)をSSD2に送信し、SSD2から読み出しデータを受信して主メモリ6に書き込む。さらに、緊急時OS100Bは、バックアップ用記憶装置150のファイル管理テーブル(図示せず)を読み出し、まだファイルIDの割り当てられていないLBAに対し主メモリ6に書き込んだデータを書き込み、書き込んだLBAとファイル名を対応付けるようSSD2の全ファイルの全LBAを取得し、取得したLBAの全データを読み出し、読み出したデータをバックアップ用記憶装置150に書き込み、書き込んだLBAとファイルIDが対応付けられるようにバックアップ用記憶装置150のファイル管理テーブル(図示せず)を書き換える。バックアップ処理は全ファイルについて行ってもよいが、一部のファイルについてのみ行ってもよい。
また、バックアップ用記憶装置150にバックアップデータを書き込む際、SSD2から読み出したデータを圧縮して書き込んでもよい。また、ファイル管理テーブル140をはじめとするSSD2の管理情報を読み出し、使用されている領域やファイルの情報を取得し、取得した情報をもとに、SSD2のデータについてのROMイメージを作成し、作成したROMイメージを他のバックアップ用記憶装置150に保存するようにしてもよい。
上記説明では、バックアップ用記憶装置として、SATAインタフェースで接続されるSATAデバイスである場合を採用したが、その他のバックアップ用記憶装置を用いてもよいのはもちろんである。たとえば、図41に示すように、バックアップ用記憶装置としてUSBメモリやUSB対応SSDなどのUSBストレージデバイス151を採用してもよく、図42に示すように、バックアップ用記憶装置としてDVD−RやDVD−RWやBlu−ray(登録商標) Discなどのような書き込み可能な光学ドライブ152を採用してもよく、図43に示すように、バックアップ用記憶装置としてインターネットやLAN経由で接続されたネットワークストレージサーバ153を採用してもよい。また、当該バックアップ機能は他の実施形態の場合にも適用可能である。
図7に示したように、緊急時OS100Bの格納領域16Eは管理情報44でLBAに対応付けられているとした。一方、ユーザによって不用意に領域16Eのデータが書き換えられてしまうことを防止するためには、SSD2の出荷時にLBAを割り当てることなく格納領域16Eに緊急時OSを記録しておいて、寿命到達時処理時に、制御ツール200がSCT Command Transportやベンダー独自のコマンドをSSD2に送信することにより、SSDC41が管理情報44を書き換えて領域16EにLBAを割り当てるようにしてもよい。あるいは、LBAが割り当てられている領域16EのLBA Rangeを含むSCT Command Transportやベンダー独自のコマンドを制御ツール200がSSD2に送信することにより、領域16EがLBAに割り当てられないようにSSDC41が管理情報44を書き換え、寿命到達時処理時に、制御ツール200がSCT Command Transportやベンダー独自のコマンドをSSD2に送信することにより、SSDC41が管理情報44を書き換えて領域16EにLBAを割り当てるようにしてもよい。
このように第1の実施形態によれば、制御ツール200は、SSD2が寿命に到達したか否か、SSD2が正常な状態であるか否かを判定し、SSD2が寿命に到達したと判定された場合やSSD2が異常な状態であると判定された場合、ブートローダ300を、書き込み動作をサポートしていない緊急時OSが起動されるように書き換え、コンピュータシステム1を再起動した際、緊急時OSが起動されるようにすることで、SSD2に対する書き込み動作を禁止、あるいはSSD2に対する書き込み動作を陽に行わないようにすることで、SSD2の信頼性劣化を防止し、SSD2に書き込むデータやSSDにすでに書き込まれているデータが破壊されることを防止し、ユーザがユーザデータを容易にSSD2から読み出したり他の記憶装置にバックアップしたりすることを実現する。
(第2の実施形態)
第1の実施形態では、通常時OS100Aおよび緊急時OS100Bの双方がSSD2のNANDメモリ16に格納されている場合について説明した。第2の実施形態では、通常時OS100AがSSD2に格納されており、緊急時OS100BがSSD2に格納されていない場合について説明する。第2の実施形態では、図33のステップS224に示した寿命到達時処理の際のブートローダ300の書き換え処理(図34、図35のステップS240参照)の前後で、制御ツール200が緊急時OS100Bを、SSD2と異なる外部記憶装置20(図8参照)からSSD2のNANDメモリ16の領域16Eにインストールする。ユーザが不用意に、SSD2の緊急時OSが格納された領域16Eを書き換えることで緊急時OS用データが破壊されることを防止する観点、領域16Eの確保によりSSD2の空き領域が減少することを防止する観点では、第2の実施形態を採用することが望ましい。
また、制御ツール200は、例えば、図9に示したように、ブートローダ300の書き換え前後で、WEBサーバ21から緊急時OS100Bのデータまたはインストールプログラムをダウンロードし、ダウンロードデータをもとにSSD2のNANDメモリ16の領域16Eに緊急時OS100Bをインストールする。または、制御ツール200は緊急時OSのデータまたはインストールプログラムを格納しているWEBサーバのアドレスをディスプレイ9を通じてユーザに表示するようにしてもよい。
あるいは、図10や図11に示したように、制御ツール200は、ブートローダ300の書き換え前後で、外部記憶媒体(DVD−ROMのような光学メディア、USBメモリ、SDカード、SSDなど)23、24から緊急時OS100BをSSD2のNANDメモリ16の領域16Eにインストールするようにしてもよい。あるいは、制御ツール200は、ブートローダ300の書き換え前後で、緊急時OS100Bのインストールプログラムが格納された外部記憶媒体(DVD−ROMのような光学メディア、USBメモリ、SDカード、SSDなど)をセットするように、ディスプレイ9を通じてユーザにメッセージを表示するようにしてもよい。
NANDメモリ16への緊急時OS100Bのインストール時、NANDメモリ16への書き込みが発生するので、NANDメモリ16の信頼性劣化やデータ破壊を防止する観点では、緊急時OSのデータ量はNANDメモリ16の容量に対して大幅に小さいことが望ましい。
(第3の実施形態)
第3の実施形態では、通常時OS100Aおよび緊急時OS100BがSSD2とは別の不揮発性記憶装置20に格納されている場合の寿命到達時処理について説明する。図8に示したように、通常時OS100Aおよび緊急時OS100BがSSD2とは別の不揮発性記憶装置20に格納されてSSD2に格納されていない場合や、どちらか一方がSSD2に格納されていてもう一方が不揮発性記憶装置20に格納されている場合にも本発明は適用可能である。その場合、制御ツール200はSSD2のブートローダだけでなく、不揮発性記憶装置20のブートローダに対しても書き換えを行う必要がある場合がある。
通常時OS100Aおよび緊急時OS100BがSSD2とは別の不揮発性記憶装置20に格納されている場合、制御ツール200は不揮発性記憶装置20の記憶されているブートローダ300の書き換えを行い、SSD2のブートローダの書き換えは行わない。
通常時OS100AがSSD2に格納されており、緊急時OS100Bが不揮発性記憶装置20に格納されている場合は、制御ツール200は、SSD2と不揮発性記憶装置20の両方のブートローダの書き換えを行うことが望ましい。不揮発性記憶装置20がホスト装置3から取り外されている状態でコンピュータシステム1が起動された場合、SSD2への書き込みアクセスが不用意に発生することを防止する観点では、通常時OSが起動しないようブートローダが構成されることが望ましい。
緊急時OS100BがSSD2に格納されており、通常時OS100Aが不揮発性記憶装置20に格納されている場合は、SSD2と不揮発性記憶装置20の両方のブートローダの書き換えを行うことが望ましいが、不揮発性記憶装置20のブートローダを書き換えるだけでもよい。この場合は、不揮発性記憶装置20がホスト装置3から取り外されている状態でコンピュータシステム1が起動された場合においても、SSD2のブートローダ300の読み出しを行ってSSD2のNANDメモリ16の領域16Eから緊急時OSを起動することができる。
(第4の実施形態)
第4の実施形態では、通常時OS100AがSSD2にインストールされているが、緊急時OSがSSD2にインストールされていない場合について説明する。信頼性が劣化したSSD2へのアクセスを極力抑制する観点では、緊急時OS100Bの起動はSSD2とは別の記憶装置から行うことが望ましい。本実施形態の制御ツール200は、寿命到達時処理の際に、緊急時OSをインストールした緊急時起動用の起動ディスクを作成する機能を有している。
緊急時起動用の起動ディスクとしては、USBメモリ、SDカード、CD・DVDなどの光学メディア、SSD、ハードディスクドライブなど、種々の不揮発性記憶装置を採用することができる。本実施形態ではこの中で、緊急時起動用の起動ディスクとしてUSBメモリを採用した場合について説明する。
緊急時起動用の起動ディスクを作成するための緊急時OSデータを含むデータ(イメージデータ)は、たとえばSSD2や、その他SSDや、USBメモリや、SDカードや、DVD−ROMドライブなど光学メディアや、WEBサーバの記憶媒体などに記憶しておけばよい。本実施形態では、緊急時OSインストール用のイメージデータが格納される記憶媒体としてSSD2を採用した場合について紹介する。つまり、信頼性劣化したSSD2そのものに、インストール元イメージデータが格納されている。
緊急時OSのインストール時には、SSD2からイメージデータの読み出しが発生するが、いったんインストールを行えば、同イメージデータを読み出すことはなくなる。また、SSD2が寿命に到達するより以前の段階から、緊急時起動用の起動ディスクをユーザが任意に作成できる機能を制御ツール200が持っていることが望ましい。
図44に緊急時起動用ディスクを作成する時のデータの移動の概念図を示す。また、図45に、緊急時起動用ディスクを作成する際の制御ツール200の動作手順を示す。制御ツール200は、寿命到達時処理開始時、ホスト装置3のUSBコントローラ13にUSBメモリが接続されているかどうかを確認し、接続されていない場合は、「緊急時OS起動用USBメモリを作成します。USBメモリを接続してください。」という旨のメッセージを、ディスプレイ9を介してユーザに表示することが望ましい。
図44に示すように、USBメモリ24が接続されている場合、制御ツール200は、SSD2のNANDメモリ16の領域16Qに記憶されているインストールイメージデータ400から緊急時OSデータを抽出し(緊急時OSデータが圧縮・暗号化されている場合はこれを復号化する)、USBメモリ24の領域24Rにコピー(インストール)する(ステップS280)。つぎに、制御ツール200は、USBメモリ24に記憶されているブートローダ310が読み込まれた場合にUSBメモリ24にインストールされた緊急時OS100Bが読み出されるべく、緊急時OS100Bの記憶領域24Rを参照するようブートローダ310を書き換える(ステップS281)。具体的には、制御ツール200は、たとえば、ブートローダ310のOSポインタ情報OSPT311に記憶領域24Rに対応するLBAを書き込む。
ホスト装置3にUSBメモリ24とSSD2の両方が接続されている場合、USBメモリ24のブートローダ310が優先して起動されるよう、ブートローダ310とブートローダ310が書き換えられたり、BIOS−ROM11の設定が変更されることが望ましい(ステップS282)。なお、ステップS282を実行しなくてもよい。
ホスト装置3にUSBメモリ24が接続されていない場合に、SSD2から通常時OS100Aが起動してしまいSSD2に不用意に書き込みアクセスが発生することを防止する観点では、ステップS282において、SSD2から通常時OS100Aが起動しないようSSD2のブートローダ300を書き換えることが望ましい。たとえば、ブートローダ300のOSポインタ情報OSPT301に通常時OS100Aの記憶領域16D以外のLBAを書き込んだりあるいは無効なLBAを書き込むことにより、SSD2のブートローダ300が読み出されても通常時OS100Aがロードされることを防止することができる。あるいは、通常時OS100Aのデータを書き換えてしまってもよい。
このようにして、SSD2が寿命に到達した場合やSSD2が異常な状態になった場合に、SSD2の信頼性悪化やSSD2のデータ破壊を抑制しながらSSD2のデータを読み出したりSSD2のデータを他の不揮発性記憶装置にバックアップすることが可能なOSを立ち上げるための起動ディスクを作成することができる。
また、図46に示すように、緊急時OS100BとしてMS−DOS(商標)やLinux(商標)やWindows(登録商標) PE(商標)などのOSを採用し、緊急時OSをUSBメモリ24にインストールするのと同時に、SSD2のデータをバックアップする機能を有する緊急時ツール210をUSBメモリ24の領域24Sにインストールし、緊急時ツール210を緊急時OS100Bから実行できるようにしてもよい。緊急時ツール210は第1の実施形態で説明したものと同様のバックアップ機能を有することが望ましい。
図47は、ホスト装置3の起動時の動作を示すものである。ホスト装置3の起動時、USBメモリ24から緊急時OS100Bが読み出され、主メモリ6に書き込まれることで、緊急時OS100BがUSBメモリ24から起動される(ステップS290)。つぎに、USBメモリ24から緊急時ツール210が読み出され、主メモリ6に書き込まれることで、緊急時ツール210がUSBメモリ24から起動される(ステップS291)。緊急時ツール210が緊急時OS100Bのスタートアップに登録されるなどして、緊急時OS100Bの起動後に自動的に緊急時ツール210が起動されることが望ましい。
緊急時OS100Bは、図48に示すように、ディスプレイ9を介して、ユーザが選択可能なメニュー項目の一つとしてバックアップメニューを表示したり、「バックアップするか?」というメッセージとOKボタンを表示したり、または「バックアップするか?」というメッセージを表示してキーボード14の入力待機状態にしたりすることで、ユーザが任意にバックアップ機能を起動可能状態にすることが望ましい(ステップS292)。なお、緊急時OS100Bは、バックアップを自動的に開始してもよい。
キーボード14やマウス15により、バックアップ機能起動が選択されると(ステップS293)、緊急時ツール210が起動する。緊急時ツール210はSSD2のデータをバックアップ用記憶装置150にコピーする(ステップS293)。バックアップの方式は、第1の実施形態で説明したものと同様の方式を採用してもよく、例えばLBA単位バックアップやファイル単位バックアップを採用してもよい。
(第5の実施形態)
上述の実施形態によって、SSD2の信頼性劣化やSSD2のデータ破壊を抑制したうえで、ユーザがユーザデータを容易にSSD2から読み出したり、他の記憶装置にバックアップしたりすることを実現した。第5の実施形態では、さらにSSD2の信頼性劣化を抑制する方法を提供する。SSD2では、経年劣化やリードディスターブの影響によるデータの破損を修復するために、バックグラウンドでリフレッシュ処理を行う機能を搭載する場合がある。この機能では、NANDメモリ16のブロックを定期的に読み出し、データの誤り数が多いブロックのデータを別のブロックに書き込む処理を行う。これにより、経年劣化やリードディスターブの影響を低減することが可能になるが、一方で、余分なブロックの消去・書き込みが発生してしまうため、SSD2の信頼性劣化が早まるという問題もある。
本実施形態では、制御ツール200あるいは緊急時OS100Bが、リフレッシュ制御コマンド(ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドやその他コマンド)を用いて、リフレッシュの実施を停止するようSSDC41に命令する。SSDC41はリフレッシュ制御コマンドをうけて、リフレッシュ処理を停止したり、リフレッシュの実行間隔(たとえば1分)を長く設定したりする(たとえば2分)。SSDC41にリフレッシュ実行間隔を長く設定させる場合は、リフレッシュ制御コマンド内でリフレッシュ実行間隔を明示的に指定することが望ましい。
図49は、制御ツール200がリフレッシュ制御コマンドを発行する際の動作を示すものである。この場合、制御ツール200は、図29のステップS205に示した寿命到達時処理の際に、リフレッシュ制御コマンドを発行すればよい。制御ツール200は、図34で説明したブートローダ300の書き換えを行い(ステップS300)、この後、リフレッシュ制御コマンドをSSD2に対して送信する(ステップS301)。
図50は、緊急時OS100Bがリフレッシュ制御コマンドを発行する際の動作を示すものである。この場合、CPU4は、システム起動時、図37で説明したように、SSD2のNANDメモリ16からOSポインタ情報OSPTを含むブートローダ300を読み出し(ステップS310)、OSポインタ情報OSPTが示すLBAを特定する。そして、CPU4は、特定したLBAに対する読み出し命令をSSD2へ送信することで、OSポインタ情報OSPTが指定するOSをSSD2から読み出す。OSポインタ情報OSPTが示すLBAが通常時OS100Aの記憶領域である領域16Dを指定しているときには(ステップS311:Yes)、通常時OA100Aが領域16Dから読み出されて主メモリ6上の領域6Aに書き込まれ(ステップS312)、OSポインタ情報OSPTが示すLBAが緊急時OS100Bの記憶領域である領域16Eを指定しているときには(ステップS311:No)、緊急時OA100Bが領域16Eから読み出されて主メモリ6上の領域6Aに書き込まれる(ステップS313)。緊急時OA100Bが起動された場合、緊急時OA100Bは、リフレッシュ制御コマンドをSSD2に対して送信する(ステップS314)。
このように、第5の実施形態では、制御ツールは、寿命到達時処理の際に、リフレッシュ処理などのSSD2でのバックグラウンドでの書き込み処理を禁止方向に制御するようにしたので、SSDの信頼性劣化を抑制することが可能となる。
(第6の実施形態)
第1の実施形態においては、制御ツール200は図29に示したように定期的に統計情報を取得して、SSD2が寿命に到達したとき、あるいはSSD2が寿命に到達する直前に寿命到達時処理を行った。制御ツール200は取得した統計情報をもとにSSD2の寿命を予測してディスプレイ9を通してユーザに通知するようにしてもよく、以下これに関して説明する。
制御ツール200は、図29に示した処理手順に従って定期的に統計情報を取得する際に、取得したデータをたとえば図51に示したような形式で、統計情報の時系列データを主メモリ6に追記していく。統計情報時系列データは、たとえばSSD2のような不揮発性記憶装置に定期的にバックアップしてもよい。また、統計情報時系列データは最新のデータが追記されるごとに古いデータを消去していってもよい。
また、制御ツール200は主メモリ6の統計情報時系列データを、例えば、図52に示すような表示形式で、ディスプレイ9を介してユーザにグラフ表示してもよい。
本実施形態では、この統計情報時系列データをもとにSSD2の寿命予測を行う。制御ツール200は、図53に示すように、あるAttribute IDのAttribute Valueを変数Yとし、時刻を変数Xとし、現在時刻からある所定の時間Tだけ前の時点の時刻Aから、現在時刻である時刻Cまでの期間の、(X,Y)の全データを用いてフィッティング関数Y=f(X)を求める。すなわち、fを用いて、XからYの予測値=f(X))が得られることになる)。fの導き方は様々な方法が存在するが、たとえばパラメータaとパラメータbを用いてf(X)=aX+bとし、時刻Aから時刻Cまでの(X,Y)の全データに対して最小二乗法を用いてaとbを求めることでfを決定してもよい。
そして、f(X)の逆関数であるf−1(Y)を求める。f(X)=aX+bの場合はf−1(Y)=(Y・b)/aをもとめる。SSD2の予測寿命到達時刻はf−1(Y=Threshold)となる。なお、時刻Aから時刻Cまでの(X,Y)の全データに対して、フィッティング関数X=g(Y)を求めて、SSD2の予測寿命到達時刻をg(Y=Threshold)としてもよい。また、f(X)やg(Y)は、2次関数など1次関数以外の関数にフィッティングしてもよい。
本実施形態では、S.M.A.R.TのAttribute Value(=Y)とThresholdを用いて寿命を予測したが、生データであるRaw ValueをYとして用いてf(X)やg(Y)を求め、予想寿命到達時刻をf−1(Y=RMAX)またはg(Y=RMAX)、あるいはf−1(Y=RMIN)またはg(Y=RMIN)としてもよい。また、SMART情報以外の手段を用いて得られた統計情報により寿命予測してもよい。
制御ツール200は、このようにして得られた予測寿命到達時刻をディスプレイ9を通してユーザに通知する。通知方法としては、たとえば「予測寿命到達時刻:1999年09月09日」というふうにテキスト表示してもよいし、図54に示すように、「SSDの寿命が残り30日を切っています。早急にSSDのデータをバックアップし、新しいSSDに買い替えてください。」のような警告画面を表示してもよい。あるいは、SSDの残り寿命が所定日数をきると、制御ツール200のアイコンの色を変えたりするなどして、ディスプレイ上に表示されるアイコンの色を変えてもよい。
(第7の実施形態)
第1の実施形態においては、図38に示したように、通常時OS100Aおよび緊急時OS100BがSSD2のNANDメモリ16に格納されている場合に、SSD2のデータをバックアップ用記憶装置150にバックアップする機能について説明した。制御ツール200は寿命到達時処理(図29のステップS205)として、ブートローダ300を書き換え、(図34のステップS230)、バックアップ機能として、例えば前述したLBA単位バックアップを採用する場合、SSD2をその後ホスト装置3から切り離して、バックアップ用記憶装置150をホスト装置3に接続した状態で、コンピュータシステム1をパワーONした場合に通常時OS100Aが正常に起動されるようにするためには、バックアップ用記憶装置150にバックアップ処理によってコピーされたブートローダを、寿命到達時処理以前のSSD2のブートローダ300の状態に復元することが望ましい。本実施形態では、バックアップ用記憶装置150のブートローダをバックアップ動作時に書き換える方法について説明する。
図55に、バックアップ動作前後におけるコンピュータシステム1とバックアップ用記憶装置150の機能構成を示す。SSD2のNANDメモリ16の復元用ブートローダ領域16Vには、ブートローダ300を制御ツール200による書き換え前の状態に戻すためのブートローダ復元情報350が記憶されている。領域16Vは、寿命到達時処理時に制御ツール200によって割り当てられてもよいし、制御ツール200の起動時に割り当てられてもよいし、制御ツール200がSSD2にインストールされるときに割り当てられてもよい。割り当てられた領域16Vには、SSD2の管理情報45(図18参照)によりLBAが割り当てられている。
図56に、本実施形態における寿命到達時処理の動作手順を示す。寿命到達時処理においては、バックアップ用記憶装置150はホスト装置3に接続されていなくてもよい。制御ツール200は、寿命到達時処理の際に、すなわちブートローダ300の書き換え前に、ブートローダ300のバックアップ情報、すなわちブートローダ復元情報350を復元用ブートローダ領域16Vに書き込む(ステップS320)。領域16Vに書き込む情報としては、たとえば領域16Cに記憶されているブートローダ300のデータ(イメージ)をそのままコピーしてもよいし、ブートローダの書き換え差分情報を記録してもよい。
領域16Vに差分情報を記録する場合は、差分情報としてたとえば図57に示すような、書き換え前のデータと書き換わったLBAとの対応関係が記録されている書き換え差分ログを採用してもよい。書き換え差分ログを採用する場合、制御ツール200は、領域16Cに記憶されているブートローダ300のうち書き換えをおこなったLBAを書き換え差分ログの「書き換わったLBA」に書き込み、同LBAの書き換え前のデータを書き換え差分ログの「書き換え前のデータ」に書き込む。たとえば、LBAの最小単位である論理セクタが512バイトである場合は、書き換え差分ログの「書き換え前のデータ」の1要素は512バイトのデータであってもよいし、書き換え前のデータを圧縮したり、あるいは可逆変換した512バイト以外のデータであってもよい。書き換え差分ログを用いてブートローダ300を新ブートローダから旧ブートローダに復元する場合は、領域16Cに対し、書き換え差分ログの「書き換わったLBA」が示すLBAに対し、「書き換え前のデータ」を書き込むことで、旧ブートローダに復元することができる。
その後、制御ツール200は、ブートローダ300を書き換え、第1の実施形態で説明したのと同様に、次回以降コンピュータシステム1が起動されたときには、通常時OS100Aではなく緊急時OS100Bが主メモリ6に読み出されるようにする(ステップS321)。
後述するバックアップ動作時に、復元用ブートローダ領域16Vの検索を容易にするために、制御ツール200は、ブートローダ領域16Cに、復元用ブートローダ領域16Vの先頭LBAを書き込んでおくことが望ましい(ステップS322)。ブートローダ領域16Cに復元用ブートローダ領域16Vの先頭LBAを書き込んでおくことは必ずしも必要ではなく、領域16Vの先頭に特定データパターンを書き込んでおき、後述するバックアップ時にこの特定データパターンを検索することで領域16Vを特定してもよいし、領域16Vをあらかじめ定められた特定LBAに固定的に対応付けすることにしておいて、後述するバックアップ時に前記特定LBAにアクセスすることで領域16Vを特定してもよいし、その他方法で領域16Vを特定してもよい。
ステップS321以降、第1の実施形態と同様に、コンピュータシステム1の再起動を行ってもよいし、第5の実施形態と同様にSSD2のリフレッシュ制御コマンドを送信してもよい。また、復元用ブートローダ領域16VはSSD2以外の記憶装置に確保してもよい。
図58は、緊急時OS100Bによるバックアップ動作を示すものである。バックアップ時、バックアップ用記憶装置150がホスト装置3に接続されていない場合は、ユーザはバックアップ用記憶装置150をホスト装置3に接続する。その際、制御ツール200は、ユーザに「バックアップ装置を接続してください」というメッセージをディスプレイ9に表示してもよい。
NANDメモリ16の領域16Eから主メモリ6の領域6Aにロードされた緊急時OSは、第1の実施形態と同様にして、SSD2のデータをバックアップ用記憶装置150にコピーする(ステップS330)。たとえば、バックアップ方法として、LBA単位バックアップを採用してかつSSD2の全LBA領域をバックアップ用記憶装置150にコピーする場合、領域16Dに記憶されている通常時OS100Aは、バックアップ用記憶装置150の領域150Dにコピーされ、領域16Uに記憶されているその他ユーザデータは、領域150Uにコピーされる。ブートローダ領域16Cに記憶されているブートローダ300は、バックアップ用記憶装置150の領域100Cにコピーしてもよいし、コピーしなくてもよい。領域16Eに記憶されている緊急時OS100Bは、バックアップ用記憶装置150の領域150Eにコピーしてもよいし、コピーしなくてもよい。また、復元用ブートローダ領域16Vに記憶されているブートローダ復元情報350は、バックアップ用記憶装置150にコピーしなくてもよい。
緊急時OS100Bは、ブートローダ復元情報350とブートローダ300のデータをもとに、バックアップ用記憶装置150に記憶するブートローダ320を作成し、作成したブートローダ320をバックアップ用記憶装置150の領域150Cに書き込むことで、次回以降にコンピュータシステム1の起動時にブートローダ320がロードされた場合は、通常時OS100Aが主メモリ6の領域6Aにロードされるようにする(ステップS331)。
図56のステップS320でのブートローダのバックアップ処理において、領域16Cに記憶されているブートローダ300のデータ(イメージ)を、そのまま復元用ブートローダ領域16Vにコピーした場合は、図58のステップS331において、復元用ブートローダ領域16Vのブートローダ復元情報350をそのままバックアップ用記憶装置150の領域150Cにコピーしてもよい。
また、図56のステップS320でのブートローダのバックアップ処理において、復元用ブートローダ領域16Vにブートローダ領域16Cの書き換え差分情報が記録された場合は、すなわちブートローダ領域16Cが旧ブートローダデータから新ブートローダデータに書き換えられる時の新・旧ブートローダデータ書き換えの差分情報が復元用ブートローダ領域16Vに記録された場合は、緊急時OS100Bは、図58のステップS331において、ブートローダ領域16Cのデータ(新ブートローダデータ)と、復元用ブートローダ領域16Vに記憶されている差分データであるブートローダ復元情報350を主メモリ6に読み出し、ブートローダ復元情報350をもとに新ブートローダデータを旧ブートローダデータに復元し、復元した旧ブートローダデータをバックアップ用記憶装置150の領域150Cに書き込む。
上記のバックアップ処理を行った後、IF0からSSD2を取り外すことで寿命に到達したSSD2をホスト装置3から切り離し、かつIF1にバックアップ用記憶装置150を接続することでバックアップ用記憶装置150をホスト装置3に接続した状態で、コンピュータシステム1を起動すると、ホスト装置3はバックアップ用記憶装置150のブートローダ320を読み出し、ブートローダ320の情報によりホスト装置3は、バックアップ用記憶装置150の領域150Dを主メモリ6の領域6Aにロードすることで、通常時OSが起動される。バックアップ用記憶装置150がインタフェースIF0に対応している場合は、バックアップ用記憶装置150をSSD2と交換し、バックアップ用記憶装置150をインタフェースIF0と接続してもよい。バックアップ用記憶装置150がインタフェースIF0に対応してない場合は、バックアップ用記憶装置150をSSD2と交換し、バックアップ用記憶装置150をインタフェース変換装置を経由してインタフェースIF0と接続してもよい。
このようにして、SSD2が寿命に到達した場合であっても、コンピュータシステム1はSSD2に保存されたユーザデータや通常時OSをバックアップ用記憶装置に復元することができ、ユーザは、余分な設定や通常時OSの再インストールを行うことなく、SSD2をバックアップ用記憶装置150に置き換え、SSD2のかわりにバックアップ用記憶装置150をシステムドライブとして使用することができる。
(第8の実施形態)
本実施形態では、SSD2が異常状態(寿命到達状態)から通常状態(健康状態)に戻ったときに、SSD2を接続したホスト装置を起動した場合、緊急時OSではなく通常時OSが起動されるようにする。
統計情報として、例えば、現在温度X20、最高温度X21のように、その数値が大きいほど信頼性が悪くなることを示し、信頼性に悪影響のある数値まで増大してもその後再び正常な値にまで回復することのできる特性を有するパラメータを採用する場合、それらの統計情報に対しては、RMAXとして例えばRMAX=85℃を採用し、
統計情報の値>RMAX
または
統計情報の値≧RMAX
のような動作保証外の温度になる条件が成立した時、制御ツール200はブートローダ300を書き換えることで、次回以降コンピュータシステム1が起動されたときには、通常時OS100Aではなく緊急時OS100Bが主メモリ6に読み出されるようにする。
緊急時OS100Bは、起動後、統計情報の値を監視し、
統計情報の値≦RMAX−MAXマージン
または
統計情報の値<RMAX−MAXマージン
となって当該統計情報が再び正常値にもどったとき、ブートローダ300を書き換えることで、次回以降コンピュータシステム1が起動されたときには、緊急時OS100Bではなく通常時OS100Aが主メモリ6に読み出されるようにする、ブートローダ復元処理を実行する。
MAXマージンはゼロ以上の値であるが、ブートローダ300の書き換えが頻繁に発生することを防止するために、MAXマージンはゼロより大きい値とすることが望ましい。統計情報が現在温度や最高温度である場合、たとえばMAXマージン=5℃とする。統計情報の取得および条件判断に、SMART情報を用いる場合、Attribute ValueとThresholdを用いてもよいし、Raw ValueとRMAXを用いてもよい。また、通常時OS起動中に統計情報が異常状態から正常状態に戻った場合は、上記ブートローダ復元処理を制御ツール200が行うようにしてもよい。
統計情報として、現在温度X20、最低温度X22のように、その数値が小さいほど信頼性が悪くなることを示し、信頼性に悪影響のある数値まで減少してもその後再び正常な値にまで回復することのできる特性を有するパラメータを採用する場合、RMINとしてRMIN=−10℃を採用し、
統計情報の値<RMIN
または
統計情報の値≦RMIN
のようなたとえば動作保証外の温度になる条件が成立した時、制御ツール200はブートローダ300を書き換えることで、次回以降コンピュータシステム1が起動されたときには、通常時OS100Aではなく緊急時OS100Bが主メモリに読み出されるようにする。
緊急時OS100Bは、起動後、統計情報の値を監視し、
統計情報の値≧RMIN+MINマージン
または
統計情報の値>RMIN+MINマージン
となって当該統計情報が再び正常値にもどったとき、ブートローダ300を書き換えることで、次回以降コンピュータシステム1が起動されたときには、緊急時OS100Bではなく通常時OS100Aが主メモリ6に読み出されるようにする、ブートローダ復元処理を実行する。
MINマージンはゼロ以上の値であるが、ブートローダ300の書き換えが頻繁に発生することを防止するために、MINマージンはゼロより大きい値とすることが望ましい。当該統計情報が現在温度や最低温度である場合、たとえば、MINマージン=5℃とする。統計情報の取得および条件判断に、SMART情報を用いる場合、Attribute ValueとThresholdを用いてもよいし、Raw ValueとRMINを用いてもよい。
つぎに、寿命到達時処理における制御ツール200の動作の詳細を説明する。異常状態(寿命到達状態)から通常状態(健康状態)に戻ったときには、上記したブートローダ復元処理により、ブートローダ300は寿命到達時処理で書き換えられる以前のブートローダに復旧されることが望ましい。図59にブートローダ復元処理前後におけるコンピュータシステム1の機能構成を示す。SSD2のNANDメモリ16の復元用ブートローダ領域16Vには、ブートローダ300を制御ツール200による書き換え前の状態に戻すためのブートローダ復元情報350が記憶されている。領域16Vは、寿命到達時処理時に制御ツール200によって割り当てられてもよいし、制御ツール200の起動時に割り当てられてもよいし、制御ツール200がSSD2にインストールされるときに割り当てられてもよい。割り当てられた領域16Vには、SSD2の管理情報45(図18参照)によりLBAが割り当てられている。また、本実施形態の領域16Vは、図55に示した領域16Vと同じものとしてバックアップ時のブートローダ復元用として使用してもよいし、図55に示した領域16Vとは異なるものであってもよい。
寿命到達時処理の手順は、図56に示したものと同様である。すなわち、制御ツール200は、寿命到達時処理の際に、ブートローダ300のバックアップ情報、すなわちブートローダ復元情報350を復元用ブートローダ領域16Vに書き込む(ステップS320)。領域16Vに書き込む情報としては、たとえば領域16Cに記憶されているブートローダ300のデータ(イメージ)をそのままコピーしてもよいし、ブートローダの書き換え差分情報を記録してもよい。その後、制御ツール200は、ブートローダ300を書き換え、次回以降コンピュータシステム1が起動されたときには、通常時OS100Aではなく緊急時OS100Bが主メモリ6に読み出されるようにする(ステップS321)。
さらに、後述するバックアップ動作時に、復元用ブートローダ領域16Vの検索を容易にするために、制御ツール200は、ブートローダ領域16Cに、復元用ブートローダ領域16Vの先頭LBAを書き込んでおくことが望ましい(ステップS322)。ブートローダ領域16Cに復元用ブートローダ領域16Vの先頭LBAを書き込んでおくことは必ずしも必要ではなく、領域16Vの先頭に特定データパターンを書き込んでおき、後述するバックアップ時にこの特定データパターンを検索することで領域16Vを特定してもよいし、領域16Vをあらかじめ定められた特定LBAに固定的に対応付けすることにしておいて、後述するバックアップ時に前記特定LBAにアクセスすることで領域16Vを特定してもよいし、その他方法で領域16Vを特定してもよい。
ステップS321以降、第1の実施形態と同様に、コンピュータシステム1の再起動を行ってもよいし、第5の実施形態と同様にSSD2のリフレッシュ制御コマンドを送信してもよい。また、復元用ブートローダ領域16VはSSD2以外の記憶装置に確保してもよい。
図60は、緊急時OS100Bによるブートローダ復元処理を示すものである。寿命到達処理後(異常時処理後)、コンピュータシステム1が緊急時OSを用いて起動している時、緊急時OS100Bは、たとえば前述のSMART READ DATAなどを用いて統計情報を監視し、統計情報が正常値に戻ったかどうかを判定する(ステップS340)。上述した判断基準に基づき、統計情報が正常値に戻ったとき(ステップS340:Yes)、緊急時OS100Bは、復元用ブートローダ領域16Vに記憶されたブートローダ復元情報350とブートローダ領域16Cに記憶されたブートローダ300のデータをもとに、通常時OS100Aが主メモリ6の領域6Aにロードされるように処理するブートローダを作成し、作成したブートローダをブートローダ領域16Cに書き込む(ステップS341)。これにより、次回以降コンピュータシステム1の起動時にブートローダ300がロードされた場合は通常時OS100Aが主メモリ6の領域6Aにロードされる。
図56のステップS320でのブートローダのバックアップ処理において、領域16Cに記憶されているブートローダ300のデータ(イメージ)を、そのまま復元用ブートローダ領域16Vにコピーした場合は、図60のステップS341において、復元用ブートローダ領域16Vのブートローダ復元情報350をそのままバックアップ用記憶装置150の領域150Cにコピーしてもよい。
また、図56のステップS320でのブートローダのバックアップ処理において、復元用ブートローダ領域16Vにブートローダ領域16Cの書き換え差分情報が記録された場合は、すなわちブートローダ領域16Cが旧ブートローダデータから新ブートローダデータに書き換えられる時の新・旧ブートローダデータ書き換えの差分情報が復元用ブートローダ領域16Vに記録された場合は、緊急時OS100Bは、図60のステップS341において、ブートローダ領域16Cのデータ(新ブートローダデータ)と、復元用ブートローダ領域16Vに記憶されている差分データであるブートローダ復元情報350を主メモリ6に読み出し、ブートローダ復元情報350をもとに新ブートローダデータを旧ブートローダデータに復元し、復元した旧ブートローダデータをバックアップ用記憶装置150の領域150Cに書き込む。
このように、本実施形態では、図61に示すように、統計情報が正常状態から異常状態になったときには、異常時OSが起動されるよう動作する異常時到達処理を実行し、統計情報が異常状態から正常状態に戻ったときは、通常時OSが起動されるよう動作するブートローダ復元処理を実行する。
このようにして、SSD2が一時的に異常状態になった場合であっても、SSD2が正常状態(健康状態)に戻った後には、コンピュータシステム1は通常時OSを起動するようになり、ユーザは、余分な設定や通常時OSの再インストールを行うことなく、SSD2を寿命到達時処理前と同等にSSD2を扱うことができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。