(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-20
(45)【発行日】2024-10-01
(54)【発明の名称】冗長化記憶装置および方法
(51)【国際特許分類】
G06F 11/10 20060101AFI20240924BHJP
G06F 3/06 20060101ALI20240924BHJP
G11B 20/18 20060101ALI20240924BHJP
【FI】
G06F11/10 676
G06F3/06 305C
G06F3/06 540
G11B20/18 572F
G11B20/18 572B
G11B20/18 532A
G11B20/18 512C
(21)【出願番号】P 2021047491
(22)【出願日】2021-03-22
【審査請求日】2023-11-09
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】598076591
【氏名又は名称】東芝インフラシステムズ株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】井川 大介
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2000-148409(JP,A)
【文献】米国特許出願公開第2006/0129873(US,A1)
【文献】特開2006-107311(JP,A)
【文献】特開平6-59823(JP,A)
【文献】特開昭64-60899(JP,A)
【文献】特開平5-144287(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/08-11/10
G06F 3/06
G11B 20/18
(57)【特許請求の範囲】
【請求項1】
記憶部の任意のセクタから選択して読み出した実データを行列配置したときの、行方向の第1の実データ群乃至第nの実データ群それぞれから生成した第1乃至第nの各パリティ値と、前記生成した前記第1乃至第nの各パリティ値から生成した第n+1パリティ値と、さらに、前記行列配置において列方向の第1の実データ群乃至第mの実データ群それぞれから生成した第1乃至第mの各パリティ値と、前記生成した前記第1乃至第mの各パリティ値から生成した第m+1パリティ値とを前記記憶部に記憶する記憶制御手段を有し、
前記記憶制御手段は、
前記第1乃至第nの各パリティ値を前記記憶部から読み出して生成した前記第n+1パリティ値と、前記記憶部から読み出した前記第n+1パリティ値とを照合する第1の照合処理と、
前記第1乃至第mの各パリティ値を前記記憶部から読み出して生成した前記第m+1のパリティ値と、前記記憶部から読み出した前記第m+1パリティ値とを照合する第2の照合処理と、
前記行方向における前記第1の実データ群乃至第nの実データ群のうちの、検査対象とする実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを照合する第3の照合処理と、
前記列方向における前記第1の実データ群乃至第mの実データ群のうちの、前記検査対象の前記実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを照合する第4の照合処理とを行う照合処理手段と、
前記記憶部の任意のセクタから選択して前記検査対象とした前記実データのうち前記第1乃至第4の照合処理で値が合致しない実データを信頼性が低いものとして処理する処理手段と、
を有することを特徴とする冗長化記憶装置。
【請求項2】
前記記憶制御手段は、
ホストから受信した第1実データと、前記記憶部から読み出した、前記行列配置において第1実データと同じ行になる第1実データ以外の各実データとから、前記ホストから受信した第1実データを含む行方向の実データ群のパリティ値を計算し、前記ホストから受信した第1実データと、前記記憶部から読み出した、前記行列配置において第1実データと同じ列になる第1実データ以外の各実データとから、前記ホストから受信した第1実データを含む列方向の実データ群のパリティ値を計算する計算処理と、
前記計算処理により計算した前記第1実データを含む行の実データ群のパリティ値と、前記記憶部から読み出した、前記第1実データとは行が異なる各行の前記実データ群の各パリティ値とから、前記第n+1パリティ値を計算し、前記計算処理により計算した前記第1実データを含む列の実データ群のパリティ値と、前記記憶部から読み出した、前記第1実データとは列が異なる各列の前記実データ群の各パリティ値とから、前記第m+1パリティ値を計算する計算処理と、を行う計算処理手段と、
前記ホストから受信した第1実データを前記記憶部に書き込む際、前記計算処理手段が計算した、前記第1実データの行の実データ群のパリティ値、前記第1実データの列の実データ群のパリティ値と、前記第n+1パリティ値と、前記第m+1パリティ値とを、前記記憶部に書き込む書込手段と、
を有することを特徴とする請求項1に記載の冗長化記憶装置。
【請求項3】
前記記憶制御手段は、
前記記憶部の前記信頼性が低い前記実データを前記記憶部の信頼性が高い実データにより再生して前記記憶部に書き戻す、
ことを特徴とする請求項1に記載の冗長化記憶装置。
【請求項4】
記憶部の任意のセクタから選択して読み出した複数の実データのk次元配列において、一次元方向の第1の実データ群乃至第nの実データ群それぞれから生成した第1乃至第nの各パリティ値を、k次元の各方向において生成して記憶部に記憶し、k次元の各方向において第1の実データ群乃至第nの実データ群それぞれから生成した第1乃至第nの各パリティ値から生成した第n+1パリティ値を前記記憶部に記憶する記憶制御手段を有し、
前記記憶制御手段は、
前記第1乃至第nの各パリティ値を前記記憶部から読み出して生成した前記第n+1パリティ値と、前記記憶部から読み出した前記第n+1パリティ値とを照合する照合処理と、
前記k次元の方向における前記第1の実データ群乃至第nの実データ群のうちの、検査対象とする実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを照合する照合処理と、
前記記憶部の任意のセクタから選択して前記検査対象とした前記実データのうち前記各照合処理で値が合致しない実データを信頼性が低いものとして処理する処理手段と、
を有することを特徴とする冗長化記憶装置。
【請求項5】
記憶部に記憶した実データの信頼性を検査する方法であって、
前記記憶部の任意のセクタから選択して読み出した実データを行列配置したときの、行方向の第1の実データ群乃至第nの実データ群それぞれから生成した第1乃至第nの各パリティ値と、前記生成した前記第1乃至第nの各パリティ値から生成した第n+1パリティ値と、さらに、前記行列配置において列方向の第1の実データ群乃至第mの実データ群それぞれから生成した第1乃至第mの各パリティ値と、前記生成した前記第1乃至第mの各パリティ値から生成した第m+1パリティ値とを前記記憶部に記憶し、
前記第1乃至第nの各パリティ値を前記記憶部から読み出して生成した前記第n+1パリティ値と、前記記憶部から読み出した前記第n+1パリティ値とを第1照合し、
前記第1乃至第mの各パリティ値を前記記憶部から読み出して生成した前記第m+1パリティ値と、前記記憶部から読み出した前記第m+1パリティ値とを第2照合し、
前記行方向における前記第1の実データ群乃至第nの実データ群のうちの、検査対象とする実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを第3照合し、
前記列方向における前記第1の実データ群乃至第mの実データ群のうちの、前記検査対象の前記実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを第4照合し、
前記記憶部の任意のセクタから選択して前記検査対象とした前記実データのうち前記第1乃至第4の照合で値が合致しない実データを信頼性が低いものとして処理する、
方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、冗長化記憶装置および方法に関する。
【背景技術】
【0002】
複数の記憶装置を連動させるRAID(Redundant Arrays of Inexpensive Disks)という仕組みがある。RAIDは、複数の記憶装置にデータを分散して記憶するため、仮に一つの記憶装置が故障した場合、データの復元や故障中の記憶装置の交換が可能である。
【0003】
RAIDで構成された複数の記憶装置において、データの誤り検出を行う技術が開示されている。例えば特許文献1において、ディスクアレイ装置において書き込み障害が発生した磁気記憶ディスク装置を特定する方法が記載されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明が解決しようとする課題は、複数の記憶装置にデータを記憶するRAIDの仕組みにおいて任意のセクタのデータ誤りを検出することが可能な冗長化記憶装置および方法を提供することにある。
【課題を解決するための手段】
【0006】
一つの実施形態の冗長化記憶装置によれば、記憶部の任意のセクタから選択して読み出した実データを行列配置したときの、行方向の第1の実データ群乃至第nの実データ群それぞれから生成した第1乃至第nの各パリティ値と、前記生成した前記第1乃至第nの各パリティ値から生成した第n+1パリティ値と、さらに、前記行列配置において列方向の第1の実データ群乃至第mの実データ群それぞれから生成した第1乃至第mの各パリティ値と、前記生成した前記第1乃至第mの各パリティ値から生成した第m+1パリティ値とを前記記憶部に記憶する記憶制御手段を有し、前記記憶制御手段は、前記第1乃至第nの各パリティ値を前記記憶部から読み出して生成した前記第n+1パリティ値と、前記記憶部から読み出した前記第n+1パリティ値とを照合する第1の照合処理と、前記第1乃至第mの各パリティ値を前記記憶部から読み出して生成した前記第m+1のパリティ値と、前記記憶部から読み出した前記第m+1パリティ値とを照合する第2の照合処理と、前記行方向における前記第1の実データ群乃至第nの実データ群のうちの、検査対象とする実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを照合する第3の照合処理と、前記列方向における前記第1の実データ群乃至第mの実データ群のうちの、前記検査対象の前記実データを含む実データ群を前記記憶部から読み出して生成したパリティ値と、前記記憶部から読み出した該実データ群のパリティ値とを照合する第4の照合処理とを行う照合処理手段と、前記記憶部の任意のセクタから選択して前記検査対象とした前記実データのうち前記第1乃至第4の照合処理で値が合致しない実データを信頼性が低いものとして処理する処理手段と、を有することを特徴とする。
【図面の簡単な説明】
【0007】
【
図1】
図1は、実施の形態にかかる冗長化記憶装置の構成の一例を示す図である。
【
図2】
図2は、記憶装置に記憶されているデータの検査方式について説明する図である。
【
図3】
図3は、
図2に示す実データと検査データの記憶装置への配置の一例を示す図である。
【
図4】
図4は、RAID装置が記憶装置へ実データを書き込む際の書き込みフローの一例を示す図である。
【
図5】
図5は、Data0の読み出しフローの一例を示す図である。
【
図6】
図6は、検証1の検証フローの一例を示す図である。
【
図7】
図7は、検証2の検証フローの一例を示す図である。
【
図8】
図8は、手続き1の再生フローの一例を示す図である。
【
図9】
図9は、手続き2の再生フローの一例を示す図である。
【発明を実施するための形態】
【0008】
以下、添付の図面を参照しながら、本発明の限定的でない例示の実施形態について説明する。
【0009】
図1は、実施の形態にかかる冗長化記憶装置の構成の一例を示す図である。
図1に、冗長化記憶装置の一例としてRAID装置1の構成を示している。
【0010】
RAID装置1は、ホスト計算機20と通信し、ホスト計算機20からの命令に応じて記憶装置18へのデータの書き込みや、記憶装置18からのデータの読み出しを行う。
【0011】
一例のRAID装置1は、ホスト通信部11と、制御プロセッサ12と、RAID計算エンジン13と、ハッシュ計算エンジン14と、不揮発性メモリ15と、キャッシュメモリ16と、記憶装置インタフェース17と、記憶装置18とを有する。
図1中の矢印はデータの受け渡しを示している。ここで、制御プロセッサ12と、RAID計算エンジン13と、不揮発性メモリ15と、キャッシュメモリ16、記憶装置インタフェース17などが、「記憶制御手段」や、「照合処理手段」、「計算手段」や、「処理手段」や、「書込手段」などに相当する。記憶装置18などが「記憶部」に相当する。
【0012】
ホスト通信部11は、ホスト計算機20と所定の通信規格で通信し、ホスト計算機20からの命令を受信し、ホスト計算機20からの命令に基づく実行結果をホスト計算機20へ送信する。ホスト通信部11とホスト計算機20との通信路は、例えばPCI express、IEEE(Institute of Electrical and Electronics Engineers)1285、USB(Universal Serial Bus)、iSCSI(Internet Small Computer System Interface)などを採用可能である。
【0013】
制御プロセッサ12は、RAID装置1の各部を統括的に制御し、例えばホスト通信部11で受信した実データを記憶装置18に記憶する。一般的に耐障害性の高いRAIDレベル(RAID6)においては、制御プロセッサ12は、実データと2つのパリティ値とを記憶装置18に分散して記憶する。本実施の形態において、制御プロセッサ12は、不揮発性メモリ15から所定のプログラムを読み出して実行するなどして上記2つのパリティ値とさらに耐障害性を高めるパリティ値を追加して検査処理を行い、任意のセクタのデータ誤りを検出する。具体的な検査の仕方については後述する。
【0014】
不揮発性メモリ15は、制御プログラム(所定のプログラムを含む)や固定データなどを記憶する。ここで所定のプログラムとは、データの記憶部への書き込みや、記憶部からのデータの読み出しや、パリティ値の計算や、データの再生処理や、書き戻しなどの各種処理を行うためのプログラムである。
【0015】
RAID計算エンジン13は、一例としてXOR(排他的論理和)エンジンである。RAID計算エンジン13は、制御プロセッサ12からの命令により、XOR方式でパリティ値を生成したり、データを復元したりする。ハッシュ計算エンジン14は、ハッシュ計算を行う。
【0016】
キャッシュメモリ16は、記憶装置インタフェース17との間でダイレクトメモリアクセス(DMA)によるデータ転送を行い、記憶装置18のシステム情報や、記憶装置18に格納されているデータや、セクタの実データの検査で使用する計算結果等を一時的に記憶する。システム情報には、例えば記憶装置18である複数の記憶装置18-1~18-8を識別する識別番号や各記憶装置18-1~18-8のディスク(磁気ディスク等)のセクタを管理する管理情報(管理テーブル)などが含まれる。ディスクの使用状況やセクタの故障等に応じてデータの格納先が適宜他のセクタに再分配され、都度、管理テーブルが更新されている。
【0017】
記憶装置インタフェース17は、管理情報に基づき、各記憶装置18-1~18-8を制御し、各記憶装置18-1~18-8へのデータの書き込みや、各記憶装置18-1~18-8からのデータの読み出しを行う。ここでデータは、実データやパリティ値である。また、実データは、セクタ単位のデータである。
【0018】
記憶装置18は、複数の記憶装置であり、この例では、記憶装置18-1~18-8が搭載されている。なお、記憶装置の数はこれら8台に限定されるものではない。
【0019】
RAID装置1は、データの確からしさを保障するため記憶装置18に記憶されているデータの誤りや、セクタの故障等の検査を行う。この検査のために、本実施の形態にかかるRAID装置1は、任意の実データに対して各実データの検査単位(検査対象として選択した単位)ごとに第1乃至第n(n≧2の整数)の実データ群のそれぞれに基づく第1乃至第nの各パリティ値と、同じ検査単位の実データの別の組み合わせで第1乃至第m(m≧2の整数)の実データ群のそれぞれに基づく第1乃至第mの各パリティ値とを生成して記憶装置18に記憶する。
【0020】
例えば、記憶装置18の任意のセクタから選択して読み出した実データを行列配置したときの、行方向の第1の実データ群乃至第nの実データ群それぞれから生成した第1乃至第nの各パリティ値と、その行列配置において列方向の第1の実データ群乃至第mの実データ群それぞれから生成した第1乃至第mの各パリティ値とを記憶装置18に記憶する。
【0021】
また、本実施の形態にかかるRAID装置1は、さらに第1~第nまでの各パリティ値に基づいて第n+1のパリティ値を生成して記憶装置18に記憶する。また、第1~第mまでの各パリティ値に基づいて第m+1のパリティ値を生成して記憶装置18に記憶する。
【0022】
第1~第n+1、第1~第m+1のパリティ値に加え、さらに第1~第k+1のパリティ値を増やす場合には、検査単位ごとに異なる実データの組み合わせで生成する。ここでkは実データを配列した場合における実データの並びの方向を指す次元に相当する。例えば後述する2次平面の行列配置にした場合の構成では行方向と列方向でk=2の2次元となる。実データの並びの方向は、この2次平面の行列配置にした場合に限らず、2次元以上の多次元としてもよい。
図2に一例を挙げてさらに詳しく説明する。
【0023】
図2は、記憶装置18に記憶されているデータの検査方式について説明する図である。
図2には、検査単位を分かり易くするために、検査単位として含めるデータを論理的な配置に並べて示している。これらのうち実データは記憶装置18の任意のセクタから選択して読み出した実データを行列配置にした論理的な配置を示している。
図2には、一例として9セクタ分の実データ(Data0~Data8)を検査単位とする論理構成を示している。また、パリティ値としてパリティ値(ParityVx、ParityV0、ParityV1、ParityV2、ParityHx、ParityH0、ParityH3、ParityH6)を示している。パリティ値は、誤り訂正符号の一例であり、本実施の形態ではRAID計算エンジン13によりXOR方式で生成する。
【0024】
図2に論理構成で示すデータ(実データおよび検査データ)は、実際の記憶装置18内の物理的な配置とは異なる。実際の記憶装置18内では異なるディスクに分散するなどして記憶(格納)する。
図2に示す論理的な配置関係は管理情報(管理テーブル等)によって管理されている。この論理構成はRAID6を想定した場合の一例であるため、各データは4台以上の記憶装置18に分散し、それぞれ1セクタ単位にディスクに記憶する。
【0025】
図2に示す一例では、データが縦に並ぶ3つの列(第1の縦の列101、第2の縦の列102、第3の縦の列103)が、左から順に第1の実データ群、第2の実データ群、第3の実データ群に相当する。よって第1の縦の列101にあるData0、Data3、およびData6の3つのデータに基づいて生成したパリティ値(ParityV0)を、第1の縦の列101を検査するセクタ(検査対応セクタ)に記憶する。さらに第2の縦の列102にあるData1、Data4、およびData7に基づいて生成したパリティ値(ParityV1)を、第2の縦の列102を検査するための検査対応セクタに記憶する。また、残りの第3の縦の列103であるData2、Data5、およびData8に基づいて生成したパリティ値(ParityV2)を、第3の縦の列103を検査するための検査対応セクタに記憶する。
【0026】
そして、
図2において横方向に並ぶパリティ値(ParityV0、ParityV1、およびParityV2)に基づいて生成したパリティ値(ParityVx)を、横並びのパリティ値を検査するための検査対応セクタに記憶する。
【0027】
ここまで
図2に示す9つのデータ配列に対し、1組目として縦の列に対するパリティ値の生成について説明した。パリティ値を増やすために2組目を生成する場合は、データが横方向に並ぶ3つの列(第1の横の列201、第2の横の列202、第3の横の列203)に対し同様の方式でパリティ値を生成する。上から順に第1の実データ群、第2の実データ群、第3の実データ群に相当する。第1の横の列201であるData0、Data1、およびData2のデータに基づいて生成したパリティ値(ParityH0)を、第1の横の列201を検査するための検査対応セクタに記憶する。さらに第2の横の列202であるData3、Data4、およびData5のデータに基づいて生成したパリティ値(ParityH3)を、第2の横の列202を検査するための検査対応セクタに記憶する。また、第3の横の列203であるData6、Data7、およびData8のデータに基づいて生成したパリティ値(ParityH6)を、第3の横の列203を検査するための検査対応セクタに記憶する。そして、
図2において横方向のパリティ値(ParityH0、ParityH3、およびParityH6)に基づいて生成したパリティ値(ParityHx)を、縦の並びのパリティ値を検査するための検査対応セクタに記憶する。
【0028】
なお、この例では9つのデータ(9セクタ分)を1単位としたが、1単位のデータ数を9つに限定するものではない。1単位のデータ数は整数n(n≧2の整数)×整数m(m=n、または、m≠n且つm≧2の整数)とし、数は適宜決めてよい。
【0029】
図3は、
図2に示す実データとパリティ値の記憶装置18への配置の一例を示す図である。
図3には、一例として5つの記憶装置(Disk0、Disk1、Disk2、Disk3、およびDisk4)へ分散して記憶させた場合の配置を示している。例えばDisk0は記憶装置18-1、Disk1は記憶装置18-2、Disk2は記憶装置18-3、Disk3は記憶装置18-4、Disk4は記憶装置18-5である。この例では、Disk0のセクタに対し、Data0、Data4、ParityV1、およびParityVxを記憶する。Disk1のセクタに対し、Data1、ParityV2、およびData8を記憶する。Disk2のセクタに対し、ParityHx、ParityH3、Data7、およびParityH6を記憶する。Disk3のセクタに対し、ParityH0、Data6、およびData2を記憶する。Disk4のセクタに対し、Data3、ParityV0、およびData5を記憶する。
【0030】
なお、Disk0~Disk4へ分散して配置する方法はこれに限らない。Disk0~Disk4への配置は適宜変更してよい。また、Disk0~Disk4へ分散して配置した例を示したが、Diskの数を5つに限定するものではない。Diskの数は適宜変更してもよい。
【0031】
(検査処理)
(書き込みフロー)
次にDataをディスクに書き込むフローを説明する。ここではData0を書き込む場合を例に第1実データとしてのDataの書き込みフローについて説明するが、他のデータも同様とする。以下でもData0の検査単位を
図2に示す論理構成を単位として説明する。なお、Data0の値に影響しない他のデータ(Data1~Data8や、これらのパリティ値など)は、RAID装置1が既にディスクに書き込みを行っているものとする。
【0032】
図4は、RAID装置1が記憶装置18へ実データを書き込む際の書き込みフローの一例を示す図である。一例として、
図2に示す論理構成を参照しながら、DiskにData0を書き込むフローを説明する。なお、記憶装置18は、記憶装置18-1~18-5のうちのいずれかのDiskを適宜選択してデータを分散して書き込み、書き込みを行ったデータを管理テーブルを参照して対象のセクタから読み出しを行うものとする。
【0033】
まず、RAID装置1は、Data0をホスト計算機20から受信する(S1)。続いて、RAID装置1は、Data0の検査単位に含まれる、Data1およびData2(
図2の論理構成でData0の横方向に並ぶデータ)と、Data3およびData6(
図2の論理構成でData0の縦方向に並ぶデータ)を記憶装置18からそれぞれ読み出す(S2)。
【0034】
RAID装置1は、Data0と、読み出したData1およびData2とに基づき、ParityH0を計算する(S3)。計算は、以下も同様とするが、RAID計算エンジン13がパリティ値を生成するXORの計算を行う。
【0035】
また、RAID装置1は、Data0と、読み出したData3およびData6とに基づき、ParityV0を計算する(S4)。
【0036】
続いてRAID装置1は、既に記憶されているParityV1とParityV2を記憶装置18から読み出す(S5)。同様に、既に記憶されているParityH3とParityH6を記憶装置18から読み出す(S6)。RAID装置1は、計算したParityH0と読み出したParityH3とParityH6とに基づきParityHxを計算する(S7)。また、RAID装置1は、計算したParityV0と読み出したParityV1とParityV2とに基づきParityVxを計算する(S8)。
【0037】
そして、RAID装置1は、Data0と、計算した各値(パリティ値)とを
図2に示す論理構成の配置として管理情報等で管理し、それぞれを記憶装置18に分散して書き込む(S9)。この際、パリティ値は、検査対応セクタとして管理テーブルに設定したセクタに書き込む。
【0038】
以上のようにRAID装置1は、実データを書き込む際に縦の並びと横の並びにおいてそれぞれParityV0とParityH0を生成し、さらに縦の並びと横の並びの各パリティ値を検査するParityVxとParityHxを生成し、それらもDiskへのData0の書き込みと共に指定先のセクタへ記憶する。
【0039】
(読み出しフロー)
次にDataをディスクから読み出すときのフローを説明する。ここでもData0を読み出す場合を例に説明する。
【0040】
図5は、Data0の読み出しフローの一例を示す図である。RAID装置1は、例えばホスト計算機20からData0の読み出しが指示されると、Data0の検査単位に含まれるすべてのデータ(実データおよびパリティ値)を記憶装置18から読み出す(S11)。つまり、
図2に示す実データ(Data0~Data8)とパリティ値(ParityV0、ParityV1、ParityV2、ParityH0、ParityH3、ParityH6、ParityVx、およびParityHx)を読み出す。なお、読み出しの際に記憶装置18からI/Oエラーがあった場合は、セクタが故障している可能性があるため、そのセクタを管理テーブルに記憶する。
【0041】
続いてRAID装置1は、パリティ値による検証を行いData0の信頼性(確からしさ)を調べる(S12)。検証は、検査単位に含まれる各種パリティ値を使用して後述する検証1と検証2とを行う。
【0042】
検証1と検証2により、RAID装置1は、Data0の信頼性が落ちていないと判定した場合、Data0をホスト計算機20に返す(S13)。一方、Data0の信頼性またはパリティ値の信頼性が落ちていると判定した場合、信頼性が落ちているものとしての処理の一例として、所定の再生手続きでData0またはパリティ値を再生する(S14)。ここで再生とは、データを信頼性の高いデータから再度生成し直すことを意味する。
【0043】
(検証手続き)
検証1および検証2では、データの信頼性を割り振って、信頼性が低いデータを検出する。まず検証1について説明する。
【0044】
図6は、検証1の検証フローの一例を示す図である。RAID装置1は、記憶装置18からデータを読みした際に受けたI/Oエラーの報告を確認し(S21)、その報告に基づき各データの信頼性を割り振る(S22)。
【0045】
例えば、ParityV0、ParityV1、ParityV2、およびParityVxのいずれかに対して記憶装置18のI/Oエラーの報告があった場合、ParityV0は信頼性が落ちるため、信頼性が低いものに割り振る。また、ParityH0、ParityH3、ParityH6、およびParityHxのいずれかに対して記憶装置18のI/Oエラーの報告があった場合、ParityH0は信頼性が落ちるため、信頼性が低いものに割り振る。また、Data0、Data3、Data6、ParityV0の読み出しにおいてI/Oエラーの報告があった場合、ParityV0とData0は信頼性が落ちるため、信頼性が低いものに割り振る。また、Data0、Data1、Data2、ParityH0の読みだしにおいてI/Oエラーの報告があった場合、ParityH0とData0は信頼性が落ちるため、信頼性が低いものに割り振る。
【0046】
続いて検証2について説明する。RAID装置1は、検証2では、記憶装置18に記憶したパリティ値を使ってデータの信頼性を調べる。一例としてData0の信頼性を調べる検証2の検証フローを示す。なお、この例ではData0(
図2参照)が「検証対象データ」に相当し、Data0を含む第1の縦の列101(
図2参照)が「第k(k=1,2,3)の複数の実データ」に相当する。この例でk=1である。また、Data0を含む第1の横の列201(
図2参照)が「第j(j=1,2,3)の複数の実データ」に相当する。この例でj=1である。
【0047】
図7は、検証2の検証フローの一例を示す図である。RAID装置1は、まず、ParityH0、ParityH3、およびParityH6からParityHxを計算し(S31)、そのParityHxと、記憶装置18から読み出したParityHxとの合致を判定する(S32)。
【0048】
RAID装置1は、合致しないと判定した場合(S32:No)、ParityH0は信頼性が落ちるため信頼性が低いものに割り振る(S33)。
【0049】
また、RAID装置1は、ParityV0、ParityV1、およびParityV2からParityVxを計算し(S34)、その計算したParityVxと、記憶装置18から読み出したParityVxとの合致を判定する(S35)。
【0050】
RAID装置1は、合致しないと判定した場合(S35:No)、ParityV0は信頼関が落ちるため信頼性が低いものに割り振る(S36)。
【0051】
一方、RAID装置1は、ParityHxが合致すると判定した場合(S32:Yes)、ParityH0の信頼性は落ちていないことになる。そこで、RAID装置1は、Data0、Data1、Data2からParityH0を計算し(S37)、計算結果が、記憶装置18から読み出したParityH0の値と合致するかを判定する(S38)。
【0052】
RAID装置1は、合致しないと判定した場合(S38:No)、Data0は信頼性が落ちるため信頼性が低いものに割り振る(S39)。
【0053】
また、RAID装置1は、ParityVxが合致すると判定した場合(S35:Yes)、ParityV0の信頼性は落ちていないことになる。そこで、RAID装置1は、Data0、Data3、Data6からParityV0を計算し(S40)、計算結果が、記憶装置18から読み出したParityV0の値と合致するかを判定する(S41)。
【0054】
RAID装置1は、合致しないと判定した場合(S41:No)、Data0は信頼性が落ちるため信頼性が低いものに割り振る(S42)。
【0055】
一方、RAID装置1は、ParityV0が合致すると判定した場合(S41:Yes)、Data0は信頼性が高いものに割り振る(S43)。
【0056】
RAID装置1は、以上のような検証1および検証2により、信頼性がどれも落ちていない場合に、読み出したData0をホスト計算機20に返す。これに対し、信頼性が落ちている場合には次の再生手続きに入る。
【0057】
(再生手続き)
続いてRAID装置1の再生手続きについて説明する。ここでは一例として手続き1と手続き2の二つの再生手続きについて説明する。手続き1は、Data0の信頼性がない場合に行うData0の再生手続きである。RAID装置1は、次の手続き1でData0を再生して記憶装置18に書き戻す処理を行う。
【0058】
図8は、手続き1の再生フローの一例を示す図である。RAID装置1は、まず、ParityV0の信頼性がある場合は、Data3、Data6、およびParityV0から、Data0を再計算する(S51)。また、RAID装置1は、ParityH0の信頼性がある場合は、Data1、Data2、およびParityH0から、Data0を再計算する(S52)。また、RAID装置1は、再計算されたData0が合致するかを判定し(S53)、合致すれば(S53:Yes)、Data0を記憶装置に書き戻すと共に、「保留付き」でData0をホストに返す(S54)。Data0が合致しない場合は(S53:No)、「データが壊れている」としてホストに通知する(S55)。
【0059】
続いて手続き2について説明する。手続き2は、Data0の信頼性は落ちていない場合において、パリティ値の信頼性が落ちている場合に行うパリティ値の再生手続きである。RAID装置1は、次の手続き2でパリティ値を再生して記憶装置18に書き戻す処理を行う。
【0060】
図9は、手続き2の再生フローの一例を示す図である。RAID装置1は、まず、ParityV0を再計算する(S61)。また、RAID装置1は、ParityVxを、記憶装置18のParityV1、ParityV2、および再計算したParityV0から計算する(S62)。続いてRAID装置1は、計算結果のParityV0と記憶装置18から読み出したParityV0とが合致するかを判定し(S63)、合致しない場合(S63:No)、計算結果のParityV0を記憶装置18に書き戻す(S64)。
【0061】
また、RAID装置1は、ParityH0を再計算する(S65)。RAID装置1は、ParityHxを、記憶装置18のParityH3、ParityH6、および再計算したParityH0から計算する(S66)。RAID装置1は、計算結果のParityH0と記憶装置18から読み出したParityH0とが合致するかを判定し(S67)、合致しない場合(S67:No)、計算結果のParityH0を記憶装置18に書き戻す(S68)。
【0062】
なお、ここでは一例として検査単位を
図2に示すように2次元(x方向-y方向)で考えた例を示したが、検査単位を2次元の配列に限定するものではない。3次元や、4次元など、k次元(k=2,3,4・・・)配列としてもよい。つまり、RAID装置1は、第1のパリティ値~第iのパリティ値を複数組(n組)生成し、各組ごとに第1のパリティ値~第iのパリティ値から第i+1のパリティ値を生成する。各組は、検査単位内の異なる実データの組み合わせ且つiを2以上の任意の整数とする条件で生成する。なお、各組のiの値は一致しなくてもよい。そして、RAID装置1は、それぞれのパリティ値を、複数の記憶手段に書き込む。例えば3次元であれば、検査単位の論理的な構成は、
図2のx-y平面に対して直交するz方向にも設定する。つまり
図2に示す2次元の論理構成をz方向にも複数(任意に設定した数)設け、z方向の複数の2次元の論理構成を含む検査単位とする。3次元の場合、Data0のパリティ値は、x方向およびy方向と同様にz方向に設ける。実データの検査は、x方向、y方向、およびz方向において、上述したx方向の検査と同様にそれぞれの方向のパリティ値を使用して行う。
【0063】
また、上述した検査方法はRAIDp+α(例えばRAID6+1、RAID6+2)や、RAID6(対角線パリティ)や、CRC(Cyclic Redundancy Check)を用いる検査方法など、適宜組み合わせて使用してもよい。このようにすることにより、よりデータの信頼性を高めることが可能になる。
【0064】
以上のように、一つの実データの書き込みおよび読み出しの際に、その実データの検査単位のデータの一部またはすべてを記憶装置から読み出し、実データおよびパリティ値の検査を行う。このため、任意のセクタのデータ誤りを精度よく検出することが可能になる。また、データが正しく書けていないときに記憶装置からエラーが報告されない場合があるが、このような場合でも異常を検出することが可能である。
【0065】
実施の形態において、冗長化記憶装置のいくつかの構成を示したが、これらの実施の形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施の形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0066】
1 RAID装置
11 ホスト通信部
12 制御プロセッサ
13 RAID計算エンジン
14 ハッシュ計算エンジン
15 不揮発性メモリ
16 キャッシュメモリ
17 記憶装置インタフェース
18 記憶装置