目次
Linux Software RAID
HDDの障害によるデータの損失に備えるために、RAIDは有効な手段である。一度RAIDを使い始めると、実際にトラブルに見舞われたことはほとんどないが、もう非RAID構成ではどうも不安で仕方がない。
RAIDには、ハードウェアで構成するものとソフトウェアで構成するものがある。最近では、マザーボードにRAID機能が搭載されていることも多いが、Linuxではどうも使い勝手が悪いところがある。また、RAIDが搭載されていないマザーボードでも運用しなければならないことがあることや、Linuxでの運用の柔軟性などから、基本的にはLinuxのカーネルが提供するソフトウェアRAIDを使っている。以下では、Gentooでの設定方法を記録しておく。
ここではRAID 1でミラーリングされたディスク上にGentooをインストールする方法を記述する。この手順が理解できれば、他のパターンでも簡単に設定できるだろう。
参考資料など
起動
Install CDで起動する。
RAID用カーネルモジュールのロード
RAID1 = ミラーリングで構成するので、RAID1モジュールをロードする。
> modprobe raid1
ロードしなくてもコマンドの発行で自動的にロードするはずだが念のためロードしておく。
パーティションの作成
パーティションごとにRAIDを構成する。
ここでは、「/boot」「/」「swap」の3種類を作成する。
> gdisk /dev/sda
- 2TB超のHDDを想定してGPTパーティションテーブルを作成する。
- GPTパーティションテーブルを作成するにはpartedが用いられるがgdisk(sys-apps/gptfdisk)の方が便利。
- UEFIでは必要ない(らしい:未検証)が、BIOS-GPTでgrug2を利用する場合、core.imgを置く特別なパーティション(パーティションタイプ:ef02(bios_brub))が必要となる。これは先頭から2Tib以内に置く必要がある。容量は1Mib程度でよいらしい。
- パーティションタイプをLinux RAIDにする。
- GPTはディスクの先頭とは別にディスクの末尾にバックアップを持つ。パーティションテーブルを初期化(破壊)するためには、ddで先頭とともに末尾も埋めなければならない。
デバイスファイル作成
RAIDデバイス数に応じて作成する。
# mknod /dev/md1 b 9 1 # mknod /dev/md2 b 9 2 # mknod /dev/md3 b 9 3
RAIDの構成
mdadmコマンドでRAIDデバイスを構成
grub0.97でRAID1を利用する場合には、「/boot」および「/」パーティションについては古いメタデータ形式にする必要がある。
基本的には–metadata=0.90で全て作成する。
grub2が標準で利用可能になったので、–metadata=1.2など新しい形式でも利用可能。その場合、–nameオプションで名前を指定することもできる。指定しなければ、その時のホスト名を基準に作成されるようだ。
> mdadm --create --verbose --metadata=0.90 /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 > mdadm --create --verbose --metadata=0.90 /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2 > mdadm --create --verbose --metadata=0.90 /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3 #grub2以降の場合 > mdadm --create --verbose /dev/md3 --name=NAME --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3
- –level
- RAIDのモード。lever=1はミラーリング
- –raid-devices
- RAIDを構成するデバイス数。後で変更できる。
- デバイスを実HDD数よりも多くした場合、存在しないデバイスをmissingとして指定する。
2TB以降のディスクを利用する場合の注意点
- metadata=0.90でのみカーネルのmdデバイス自動構成が利用できる。metadata=1.x以降はudevを通して構成される。
- metadata=0.90は2TBまでしか扱えない。
- 2TB以上のディスクの場合は、パーティションテーブルをGPT、metadata=1.xを利用する。
- grub1では、metadata=1.xを扱えないのでそのままでは起動できない。
- grub2を利用することを検討する。
- grub1を使う場合にはinitrdが必要であり、少なくともinitrdが置かれているパーティション(=/boot)はmetadata=0.90でなければならない。
- rootfsもgrubが扱えない形式(metadata=1.x)であればマウントできず起動できない。
- initrdを利用すればrootfsがmetadata=1.xでもマウントできる。grub2でもmetadata1.xではカーネルのデバイスの自動決定がうまく動かないようなので、initrdで/etc/mdadm.confを読み込んでRAIDをスタートさせてからマウントしないといけないようだ
initfamfsの作成
> genkernel --mdadm --mdadm-config=/etc/mdadm.conf initramfs
Gentooではgenkernelコマンドを利用して作成できる。RAIDを利用するためには、mdadmオプションを指定してinitramfsを作成しなければならない。またRAIDの構成情報も指定してやる(標準の場所なら指定しなくても問題ない)。
grubのパラメータの変更
title Gentoo Linux 3.x.y-gentoo kernel /vmlinuz-3.x.y-gentoo root=/dev/ram0 real_root=/dev/md2 domdadm initrd /initramfs-genkernel-x86_64-3.x.y-gentoo
- root=/dev/ram0に変更して一時的にオンメモリファイルシステムをマウントする。
- real_root カーネルがロードされた後にrootfsとなるデバイス。元のrootデバイスを指定する。
- domdadm initrdのbusyboxがmdadmを実行するためのスイッチ(Gentoo特有の設定)。
- initrd initramfsのファイルを指定する。
- カーネルでもinitrd(initramfs)が利用できるように設定しておく。
以上でinitrdを利用してRAIDを構成できるようになる。
RAIDデバイスの準備
mdadmでRAIDデバイスを作成するとデバイスの構成が始まる。検証しなくても問題なく動作するが、初回はチェックしておくのがよいだろう。RAIDデバイスのステータスは
- /proc/mdstat
で確認できる。watchコマンドなどでデバイス構成の進捗を確認するとよい。
> watch --interval=1 cat /proc/mdstat
デバイス構成中でも操作は可能だが、できれば完了するまで待つのがよいかもしれない。
RAID構成情報の記述
metadata=0.9を利用する場合には、(確かmetadataにデバイス名が記録されているので)構成ファイルを記述しなくても自動的に元の構成が再現される。metadata=1.*の場合は、カーネルのRAID自動構成は機能するが、デバイス名が/dev/md127など意図しないものとなる。
metadata=1.*ではudevのruleでmdadmコマンドが呼ばれて/etc/mdadm.confに沿ってRAIDデバイスが構成される。rootfsの場合には、initrdで仮のファイルシステムでカーネルをロードして、その中のbusyboxでmdadmを実行してRAIDを構成する。rootfsでなければ、カーネルの自動構成は機能する。
> mdadm --detail --scan >> /etc/mdadm.conf
OSのインストールなど
以上の手順で/dev/md*ができるので、このデバイスにファイルシステムを作成して通常通り利用する。