- ベストアンサー
RAID 5のパリティ生成のタイミングはいつ?
- RAID 5で構成されたアレイにデータを書き込む際、パリティはどのタイミングで生成されるのか?
- データを書き込む前にパリティを計算し、HDD 3に書き込む
- パリティ生成のタイミングについては間違った情報が広まっている可能性もある
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「新規でデータを書き込む」ということが, コントローラでわかるかどうかがまず問題ではないでしょうか. やればできるでしょうが, 現実的には「RAID アレイを作るときに全データを初期化し, それ以降は『更新』とみなす」方が単純でしょう. あと, RAID5 で「メモリ上にデータを読み出す必要がある」のは, あくまで「ブロックの変更にあわせてパリティを計算し直す必要がある」からです. そのような処理をしない RAID0 や RAID1 では単にディスクに書き込むだけです. そもそも, アレイにしていない単独のディスクで「ディスクに書き込むためには一度読み出さなきゃならない」とは思いませんよね. 逆にいえば「パリティを計算し直す」ためには既存のデータが必要なので, RAID2 以上なら原則的に「読み出し→パリティ計算→書き込み」という手順になります. なお, データをディスクに書き込むときに「どのディスクからデータを読み出すのか」については任意性があります. つまり ・書き込む必要のないディスクからデータを読み出し, それらからパリティを計算して (データとパリティを) 書き込む ・書き込むべきディスクとパリティを記録しているディスクからデータを読み出し, それらからパリティを計算して (データとパリティを) 書き込む のどちらでも処理することが可能です. 3本のディスクで RAID5 を組むなら前者が常に有利ですが, もっとディスクを増やすと後者の方が有利になる場合があります (そんなにディスクを増やしていいのかという大きな問題はある).
その他の回答 (3)
- e3tatsu
- ベストアンサー率51% (78/151)
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コントローラがデータ+パリティをディスクに書き出す。
お礼
ありがとうございました。HDDの書き込みの仕組みを理解できました。 書き込みが、ブロック単位なので、変更が1セクタの場合でも、ブロック全体を一度、メモリにロードしないといけないのですね。 ということは、"ディスクからの読み出し" が必要になるのは、RAID 5 に限らない。ブロック単位でデータの読み書きを行う、RAID 0 や 1 も一度、メモリ上にデータを読み出す必要がある。 ただし、RAID 5 の場合はパリティを計算する必要があるので、データを変更したHDD 1のブロック だけでなく、HDD 2のブロックも読み出さないといけない。これが、オーバヘッドになる。 と理解しました。 大変お手数ですが、間違っていたらご指摘いただければと思います。
- e3tatsu
- ベストアンサー率51% (78/151)
HDD単体(セクタ)とRAID5(ブロック)とOS(クラスタ)のそれぞれでデータの最小読み書き単位にギャップがあります。 ここで例えばクラスタよりもブロックのほうが大きかった場合のデータ書き込み時の動作を想像してみてください。 なぜ"ディスクからの読み出し"が必要なのかわかるはずです。
お礼
回答ありがとうございました。クラスタよりもブロックのほうが大きい場合を考えて見たのですが、私の頭では、わかりませんでした。 お手数ですが、もう少しヒントを (できればズバリ答えを) 頂けないでしょうか。 よろしくお願いします。
- Tacosan
- ベストアンサー率23% (3656/15482)
この質問の状況では「ディスクからの読み出し」は意味がわからないでしょう. 「HDD1 に 1010 を書き込む (HDD2 のデータは変えない)」という場面を想定してみてください. パリティをどう計算すればいいと思いますか?
お礼
回答ありがとうございました。データを書き換える場合は読み込みをしないとパリティを計算できないですね。 新規でデータを書き込む場合も、やはり一度書き込んだ後、読み込み直して、パリティを計算するのでしょうか ? それとも、新規で書き込む場合には、RAIDコントローラ側で、そのことを認識し、書き込む時にパリティを計算できるのでしょうか。 何度も、申し訳ありませんが、教えていただけないでしょうか。 インターネットで検索しても見つかりませんでした。
お礼
なるほど理解できました。丁寧な解説ありがとうございました。