今どきのソフトウェアRAID1 (Fedora 20)



(2014.11)

家族のノートPCのHDDがクラッシュして、再構築にずいぶん手間が掛かった。データのほとんどは自宅サーバのほうにあったので何とか事なきをえたが、やっぱりデータ喪失は大変。

ディスクドライブを冗長化する方法を調べてみた。

ネット上に解説ページは多いが、古い情報も多い。最新の構成に合うものを取捨選択しなければならない。

もともと1台のHDDで正常に動作している Fedora 20 Linux システムに、同じ大きさのHDD を1台だけ (2台ではなく) 加えて、全体をRAID1化する。

RAIDレベル

RAIDレベルは、数字が大きいほうがいいわけではない。

RAID 0 ストライピングによる性能向上. 冗長ではない. むしろ耐障害性は悪化。Intel Rapid Storage Technology (RST) が使っている。
RAID 1 ミラーリング. ディスクドライブ2台(以上)に同内容を書き込む. 冗長.
RAID 4 (RAID 5で代替された。)
RAID 5 パリティを分散して記録. 冗長。1台までの故障に対応。
RAID 6 パリティを二つ生成し、分散記録。冗長。2台までの故障に対応。ディスクドライブの必要台数はRAID 5より多い。
RAID 10 or RAID 1+0 RAID 1アレイを複数使って RAID 0する. 冗長. 必要ディスクドライブ台数多い。

小規模だと RAID 1になるだろう。ビジネスだと RAID 6 or 10?

RAIDレベルの話: 1+0と6はどっちが安全か? - たごもりすメモ

LinuxのRAIDモジュール

(2015.9更新)

Linux でソフトウェアRAID1を構築しようと思うと、次の3つの方法がある。(1), (2) は Step by Stepで構築する手順も書いてみた。

ちなみに、"RAID on LVM" というのを挙げている解説ページもあるが, 冗長になっておらず、意味がない。(LVM情報が破損したときに、どこにミラーされているの?)

(1) Multiple-Device (MD) カーネルドライバ
MDカーネルドライバを使ってRAIDアレイを作り、その上でLVM を作る。もっとも, LVMは作らなくても構わない。

LVM on RAIDと呼ばれ、昔からある方法。

/bootも冗長化できるのがメリット。

(2) LVM RAID volume (RAID logical volume)
LVM の機能で、ミラー化された RAID logical volume (LV) を作る。

LVM は RAID 1/4/5/6/10をサポートしている。

RHEL 6までは Mirrored Logical Volumeという名前だった. RHEL 7 (Fedora 18~19) から RAID Logical Volumeに代わっている。 2.3. LVM Logical Volumes

柔軟性が高く、物理ディスクの大きさを揃える必要がないのがメリット。/bootを載せられないので、そこは md と組み合わせる。

現在は、RAID logical volume は内部で MDカーネルドライバを使っている, ようだ。

(3) Btrfs
Btrfsは、ほかの Linux ファイルシステムと異なり、RAID 機能を統合している。

2015年2月にリリースされた Linuxカーネル 3.19 で RAID 5/6も統合されたようだ。しかし、動くようになっているかどうか不明。

MDカーネルドライバ (LVM on RAID)

伝統的な方法。複数の物理ディスクに, 必要な同じ容量のパーティションを用意し、これらのパーティションをペアにして、/dev/mdN を作る。

あとは、そのボリュームに LVM を載せればOK.

Step by Step で RAID 1化する解説を用意しました:

LVM RAID logical volume

LVM RAID volumeのほうが、非常に柔軟性がある。同じ大きさのドライブを用意しなくても、とにかく Logical Volume (LV) が複数のドライブに配分されれば大丈夫。

ただし現在のところはまだ、/boot には適用できない (GRUB2から起動できない). /boot についてはMD RAID (かつ非LVM) で作ってやる必要がある。

Step by Step で RAID 1化する解説を用意しました:

Red Hat Enterprise Linux 7 で LVM RAID volumeを使う解説が 4.4. Logical Volume Administration にある.

次のようにして, my_lv LVをミラー構成で作成する。

# lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg

このページにある次の例は, my_vg VGに含まれるすべてのLVの、物理ディスク (ディスクドライブ) への配置状況を表示する。

# lvs -a -o name,copy_percent,devices my_vg
  LV            Copy%  Devices                      
  my_lv                 6.25 my_lv_rimage_0(0),my_lv_rimage_1(0)
  [my_lv_rimage_0]        /dev/sde1(0)                 
  [my_lv_rimage_1]        /dev/sdf1(1)                 
  [my_lv_rmeta_0]         /dev/sde1(256)               
  [my_lv_rmeta_1]         /dev/sdf1(0)

my_lv LVは、/dev/sde1 と /dev/sdf1 にミラーして配置されていることが分かる。

LVをどの物理ディスクに配置するかは, 明示的に指定しない限り, LVMにお任せ、になるようだ。

lvconvert --replaceコマンドで, 別の物理ディスクに置くようにさせることもできる。

落とし穴

ミラクル・リナックス:ブートディスクをソフトウェア RAID1 (ミラーリング) に構成する際の注意

ブートドライブをRAID1にする場合は、それぞれのドライブのMBRにGRUBをインストールしなければならない。そりゃそうだ。

ネット上のページだと, /bootはRAID化できないとしているものも多いが、現在ではMD RAIDでRAID化可能。

パーティションの切り方

シングルHDD構成で、Fedora 20 の初期設定だと, /bootは独立したパーティションだが、swapがLVMの上に載っている。swapをRAID化する必要はない。

LVM on RAIDでいく場合は、swapをLVMの外に出さなければならない。

また、/ (root) と/home, /var が同じ LVになっているので、これもついでに分けてもいいかもしれない。

少なくとも, ファイルサーバでは, / と /home は分けよう。Fedora 17のころは、分かれていた。