ちょっと踏み込んでRAIDを調べてみた ~ RAID 0 編 ~


みなさんこんにちは、田村です。

今回は基本情報技術者試験の勉強をしていたときに出てきたRAIDについてちょっとだけ踏み込んで勉強したので、まとめました。とはいえ、RAIDにはレベルがいくつかあり、1つの記事で各レベルについて踏み込んだ内容を書くと1冊書けてしまうので、今回はRAID 0 に焦点を絞ってみます。

RAIDとは

HDDには低速であることや故障しやすいという弱点があります。RAIDは、複数台のHDDを組み合わせて使うことで、処理を並列にして速くしたり、故障にも耐えることができるようにする技術です。

RAIDで実現できること

RAIDで実現できることを簡単にまとめると以下の三つになります。

  1. 1台のHDDが故障しても運用を継続できる
  2. 1台のHDDが故障してもデータの損失がない
  3. RAIDで使用するHDDの台数に応じて処理を高速にすることができる。

1.や2.はサービスを運用するには重要な要素ですよね。しかし、今回紹介するRAID 0 では1.と2.は実現できない部分で、3.を実現できるものです。どのように高速化するのかを見ていきます。

RAID 0 とは

RAID 0 は別名ストライピングと呼ばれています。まず、簡単にRAID 0 ではどんなことをしているかを説明すると、1つのデータを書き込む際に複数のHDDに渡って書き込みます。RAID 0 は本来記録すべきデータのみを扱うという前提があるため、データの喪失を防ぐためのパリティという誤り検知用のビットやバックアップした冗長なデータなどは扱いません。例えば、プロキシキャッシュなどの一時データは故障によって失われても問題ないため、RAID 0 を使うことで最も有効にディスク領域を使用することができます。また、HDDの弱点である低速の問題も解決してくれます。

RAID 0 の特徴は以下のように5つ挙げられます。3.はHDD単体の故障率が上がると誤解しそうなので補足しますが、HDD一台あたりの故障率が変化するわけではなく、RAIDに用いるHDDの台数に比例して故障のリスクが増えるため、RAID全体の故障率が上がるということです。

  1. どのRAIDレベルよりも高速に処理することができる
  2. ディスクの台数を増やせば増やすほど高速になる
  3. ディスクの台数を増やせば増やすほど故障率が上がる
  4. RAIDに使っている複数のHDDを大容量な1つのHDDとして扱える
  5. データはディスクの故障から保護されない

RAIDはビット/バイト単位かブロック単位で複数のHDDに分散して読み書きをします。バイト単位で複数のHDDに書き込むことをバイトインタリーブ、ブロック単位で複数のHDDに書き込むことをブロックインタリーブといいます。RAIDのレベルによって主にどちらが採用されるかは変わってきますが、RAID 0 の場合はブロックインタリーブが実装されることがほとんどです。ブロックインタリーブが実際にどのような仕組みになっているのか想像しにくいので、説明します。

まず、セクタというHDDの物理的なデータの最小単位に対して、ブロックとは仮想的な最小単位のことです。ブロックを用いることで複数のセクタを1つにすることができ、最小単位として扱うことができるようになります。ブロックインタリーブのブロックサイズをHDDのブロック数で表したものをストライピングファクタといいます。HDDのブロックサイズが512Bでストライピングファクタが32の場合、512B×32で16KB単位で複数のHDDに分散して保存されます。この保存する単位をストライピング単位といいます。85KBのデータを保存したときの図が以下です。DISK 0 から順番に16KBずつ保存していくと、最後に5KB余ってしまいます。もちろん、余った5KBも保存しなければデータが破損してしまうため、順番どおりにDISK 1 に保存します。16KBずつ扱っているため、5KBは有効なデータが保存されますが、では、残りの11KBはどうなるのかというとPADというダミーデータが保存されます。このPADによって埋められた領域をスラックといいます。

なるべく最適なストライピング単位を設定したいですが、HDDの性能やインターフェース規格、使用するHDDの台数など多方面から検討する必要があるため、非常に難しいです。例えば、限度はありますが、性能を上げる方法の一つとしてストライピング単位を大きくすれば保存が速くなります。16KBずつ保存するより、32KBずつ保存したほうが速くなるのは容易に想像できますよね?では、ストライピング単位をできるだけ大きくすればいいかというと、32KB単位のときに5KBの端数が出た場合は27KBがPADで埋められてしまうので、無駄な領域が増えてしまいます。実際のストライピング単位はOSとの整合性やRAIDレベル、そして実装の容易さを考え4KB,8KB,16KB,32KB,64KBの中から選ばれます。ちなみに、RAID 0 の場合は16KB,32KB,64KBのいずれかが選択されることが多いようです。

さいごに

今回の記事をまとめます。

  • RAIDとは複数のHDDを組み合わせることで、HDDの弱点をフォローできる技術
  • RAID 0 は複数のHDDを1つのHDDとして扱い、データを並列処理することで処理速度を向上させることができる
  • ストライピングの単位が大きければある程度までは高速になるが、その分無駄なデータも増える

RAID 0 はビジネスにおいて冗長性や信頼性に欠けるため、RAID 0 単体で用いられることは少ないようです。

今後、他のRAIDレベルについても踏み込んで調べてみます。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です