電子書籍の厳選無料作品が豊富!

RAID 5 で構成さされたアレイにデータを書き込む際、パリティはどのタイミングで生成されるのでしょうか。

以下を例に、教えてください。

【例】
(1)HDD 3台構成
(2)1ブロック 4 bit とする
(3)1010 1011 を書き込む。

【パリティ生成のタイミング】
I. 1010 を HDD 1に、1011 をHDD 2 に一度書き込む。その後、1010 1011 を読み込み,パリティ(0001) を計算し、HDD 3 に書き込む

II. 1010 1011 をHDD1、2 に書き込む前に(RAID コントローラでブロックを振り分ける時に),パリティ(0001)を計算し, HDD 3 に書き込む。

III.I, II ともに間違っている。


ずっと,IIだと思っていたのですが、ウィキペディアの以下の記述を読み、混乱しています。わかるかたがいたら教えてください。




"一方で書き込む場合にはパリティを作成しなおすために、ディスクからの読み出しとパリティ演算が必要となる。"

(参考)
http://ja.wikipedia.org/wiki/RAID

A 回答 (4件)

「新規でデータを書き込む」ということが, コントローラでわかるかどうかがまず問題ではないでしょうか. やればできるでしょうが, 現実的には「RAID アレイを作るときに全データを初期化し, それ以降は『更新』とみなす」方が単純でしょう.



あと, RAID5 で「メモリ上にデータを読み出す必要がある」のは, あくまで「ブロックの変更にあわせてパリティを計算し直す必要がある」からです. そのような処理をしない RAID0 や RAID1 では単にディスクに書き込むだけです. そもそも, アレイにしていない単独のディスクで「ディスクに書き込むためには一度読み出さなきゃならない」とは思いませんよね. 逆にいえば「パリティを計算し直す」ためには既存のデータが必要なので, RAID2 以上なら原則的に「読み出し→パリティ計算→書き込み」という手順になります.

なお, データをディスクに書き込むときに「どのディスクからデータを読み出すのか」については任意性があります. つまり
・書き込む必要のないディスクからデータを読み出し, それらからパリティを計算して (データとパリティを) 書き込む
・書き込むべきディスクとパリティを記録しているディスクからデータを読み出し, それらからパリティを計算して (データとパリティを) 書き込む
のどちらでも処理することが可能です. 3本のディスクで RAID5 を組むなら前者が常に有利ですが, もっとディスクを増やすと後者の方が有利になる場合があります (そんなにディスクを増やしていいのかという大きな問題はある).
    • good
    • 0
この回答へのお礼

なるほど理解できました。丁寧な解説ありがとうございました。

お礼日時:2012/11/08 21:22

ANo.2で回答した者です。



例題:
セクタ=4KB,クラスタ=4KB,ブロック=16KB,ディスク容量は16KB(=4セクタ)と仮定。
今4つのセクタにはそれぞれ何らかのデータが入っています。
1つ目のセクタだけ新しいデータを上書きしたいです。
でもブロック単位でしかデータを読み書きできません。
さて、どうしたら良いでしょうか?

Answer.
 1.第1セクタから第4セクタ(=1ブロック)のデータをディスクからメモリにロードする
   ようRAIDコントローラに依頼。
 2.RAIDコントローラがデータをディスクから読み取ってメモリにロード。
 3.ロードした(メモリ上の)データのうち第1セクタに該当するはじめの4KBだけを
   新しいデータに差し替え
 4.メモリ上にロードした(差し替え後の)第1セクタから第4セクタのデータ(=1ブロック)
   をディスクに書き出すようRAIDコントローラに依頼。
 5.RAIDコントローラは依頼されたデータをもとにパリティを計算。
 6.RAIDコントローラがデータ+パリティをディスクに書き出す。
    • good
    • 0
この回答へのお礼

ありがとうございました。HDDの書き込みの仕組みを理解できました。

書き込みが、ブロック単位なので、変更が1セクタの場合でも、ブロック全体を一度、メモリにロードしないといけないのですね。

ということは、"ディスクからの読み出し" が必要になるのは、RAID 5 に限らない。ブロック単位でデータの読み書きを行う、RAID 0 や 1 も一度、メモリ上にデータを読み出す必要がある。

ただし、RAID 5 の場合はパリティを計算する必要があるので、データを変更したHDD 1のブロック だけでなく、HDD 2のブロックも読み出さないといけない。これが、オーバヘッドになる。

と理解しました。


大変お手数ですが、間違っていたらご指摘いただければと思います。

お礼日時:2012/11/07 20:40

HDD単体(セクタ)とRAID5(ブロック)とOS(クラスタ)のそれぞれでデータの最小読み書き単位にギャップがあります。


ここで例えばクラスタよりもブロックのほうが大きかった場合のデータ書き込み時の動作を想像してみてください。
なぜ"ディスクからの読み出し"が必要なのかわかるはずです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。クラスタよりもブロックのほうが大きい場合を考えて見たのですが、私の頭では、わかりませんでした。

お手数ですが、もう少しヒントを (できればズバリ答えを) 頂けないでしょうか。


よろしくお願いします。

お礼日時:2012/11/07 18:53

この質問の状況では「ディスクからの読み出し」は意味がわからないでしょう.



「HDD1 に 1010 を書き込む (HDD2 のデータは変えない)」という場面を想定してみてください. パリティをどう計算すればいいと思いますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。データを書き換える場合は読み込みをしないとパリティを計算できないですね。

新規でデータを書き込む場合も、やはり一度書き込んだ後、読み込み直して、パリティを計算するのでしょうか ? それとも、新規で書き込む場合には、RAIDコントローラ側で、そのことを認識し、書き込む時にパリティを計算できるのでしょうか。

何度も、申し訳ありませんが、教えていただけないでしょうか。 インターネットで検索しても見つかりませんでした。

お礼日時:2012/11/07 18:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!