RAID の実現方法には以下の2種類が存在します。
本記事では、よく利用する RAID0・RAID1・RAID5・RAID6 を紹介します。
Linux カーネルの機能 | |||
---|---|---|---|
RAID レベルの種類
なお、分割する一定のデータサイズのことを、ストライプサイズと言います。
読み書きが分散されるため、シーケンシャルアクセスが高速化します。
一方で、ランダムアクセスではアクセスサイズが小さいため、読み書きの分散が効きづらく、高速化しにくいです。(ストライプサイズ以下のデータを読み書きする場合は、1つのストレージしか使わないため)
また、1台でもストレージが壊れるとデータが破損する特徴を持ちます。
同じデータを複数のストレージに置くため、ストレージ容量の利用効率が悪いという欠点を持ちます。
1台のストレージが故障した場合でも、パリティを使って元のデータを復元できます。
パリティの計算方法
パリティは他のストレージにあるデータの XOR※ を取ります。
(※XOR は同じ数字なら0、違う数字なら1となる論理演算)
例えば、以下のデータを持つデータAとデータBからパリティを求めてみます。
データ A 10001010
データ B 01001100
---------------------------
パリティ 11000110
パリティを使ったデータの復元
データ B を持つストレージが故障した場合を例に考えます。
データ A とパリティ 1 は残っているので、これらの XOR を取るとデータ B が復元できます。
データ A 10001010
パリティ 11000110
---------------------------
データ B 01001100
パリティのデメリット (RAID5 のデメリット)
RAID5 は、データの書き込みに時間がかかります。
これは書き込み前に、「パリティの計算に使用するデータの読み出し」と「パリティの計算」をする必要があるからです。
ただし、最近は大容量のキャッシュと専用の XOR 演算機を搭載することでデメリットが解消されています。
対角線パリティの詳細については、以下の記事をご覧ください。
まとめ
RAID の種類ごとの特徴のまとめは、以下のとおりです。
RAID0 | RAID1 | RAID10 | RAID5 | RAID6 | |
---|---|---|---|---|---|
ストレージ数 | 2台以上 | 2台 | 4台以上 | 3台以上 | 4台以上 |
容量の利用効率 ※1 | 100% | 50% | 50% | (n-1)/n = 2/3 = 75% | (n-2)/n = 2/4 = 50% |
故障率 ※2 | (1-0.99^2) = 3.94% | (0.01^2) = 0.01% | (0.01^2)*2 = 0.02% | 3C2 * 0.01^2 = 0.06% | 4C3*0.01^3 = 0.0004% |
書き込み速度 ※3 | ◯ | ◯ | ◯ | △ | △ |
※2 故障率 1% の場合 (https://zenn.dev/firedial/articles/5acd947326e5b8
※3 https://www.fujitsu.com/jp/products/computing/storage/eternus/glossary/raid/index.html
RAID の設定方法
今回は2つのブロックストレージ [xvdb] と [xvdc] を使用して、RAID0 を組んでみます。
RAID の作成
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 8G 0 disk xvdc 202:32 0 8G 0 disk
- --level は RAID レベルを指定 (今回は RAID0 を組むので 0)
- --raid-devices は <デバイス数> <RAID に使うデバイス1> <RAID に使うデバイス2>....を指定
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 8G 0 disk └─md0 9:0 0 16G 0 raid0 xvdc 202:32 0 8G 0 disk └─md0 9:0 0 16G 0 raid0
xvdb 8G と xvdc 8G からなる md0 16G の raid0 が作成できていることを確認できます。
作成した raid0 の詳細は sudo mdadm --detail /dev/md0 コマンドで確認できます。
RAID にファイルシステムを作成
NAME FSTYPE LABEL UUID MOUNTPOINT xvda └─xvda1 xfs / UUID1 / xvdb linux_raid_member 0 UUID2 └─md0 xfs UUID3 xvdc linux_raid_member 0 UUID2 └─md0 xfs UUID3
RAID0 (md0) に対して、xfs ファイルシステムが作成できたことが確認できます。
RAID をマウント
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 8G 0 disk └─md0 9:0 0 16G 0 raid0 /mnt/raid xvdc 202:32 0 8G 0 disk └─md0 9:0 0 16G 0 raid0 /mnt/raid
md0 のマウントポイントが /mnt/raid であることが確認できます。
RAID の動作確認
test.txt
通常のファイルシステムと同様にファイルを格納できていることがわかります。
関連情報
Linux カーネルの機能 | |||
---|---|---|---|