[EPA]Software RAID 環境の構築と設定

本文書の内容は 2008/02/21 の時点では EPA サーバでは実施されていない. 2008 年度にサーバを再構築する際に導入される内容なので注意されたい.

始めに

本文書は EPA サーバ予備機(tako)において Software RAID 環境を構築した際の作業ログ, およびその解説である.

現在 EPA サーバ, および予備機で使用しているマザーボードは ASUS P5B であり, マザーボード上に, いわゆる FakeRAID コントローラ*1が存在している. この FakeRAID コントローラ(JMicron) のドライバ自体は Linux カーネルに存在するので EPA サーバで FakeRAID を使用することは可能である. しかしながら

  • ディスクを接続する口の一方が筐体の外側に面しており, 運用上の利便性に欠ける
  • パリティ演算等に CPU を使用するため Software RAID と性能的に大差無い
  • kernel の再構築が必要となり, 構築が面倒*2

という点から, Software RAID 環境を構築してみた.

環境構築作業には

という二通りの選択肢が存在する. 以下, それぞれの場合について必要な作業をまとめる.

OS の install 時に環境構築

sarge 以降の Debian Installer には, 「ディスクのパーティショニング」の際に 「ソフトウェア RAID の設定」というメニューが存在しており, このメニューから RAID デバイスの構築を行なことができる. 以下の作業は 「ディスクのパーティショニング」まで通常の install と同様に作業を進めた後に行なう.

ディスクのパーティショニング

今回は SATA 接続(容量 512GB) の二つのディスクで RAID デバイスを作成する. パーティションは以下の様に作成した. なお, 容量は install 終了後に cfdisk で確認した容量である (sda1, sdb1 は 128MB で良かったんだが, 128MB としても kb 単位で指定しても, 表の様になってしまった. byte 単位で指定したら望み通りだったのかな).

SCSI パーティション基本/論理容量(作成時の指定値)利用方法
sda1/sdb1基本131.61MB(128MB)RAID の物理ボリューム
sda2/sdb2基本3997.49MB(4 GB)RAID の物理ボリューム
sda3/sdb3基本495976.16(残り全部)RAID の物理ボリューム

一応, sda1, sdb1 には Boot フラグを立てておく(不要かもしれない).

ソフトウェア RAID の設定

パーティションを切り終えたら, メニュー最上部の「ソフトウェア RAID の設定」を選択する. 以下では, メニューと選んだ選択肢を記述する.

  • ソフトウェア RAID の設定
    • MD デバイスの作成(MD はマルチディスクの略)
  • マルチディスクデバイスのタイプ
    • RAID1 (RAID0, RAID1, RAID 5 から選べる)
  • RAID1 アレイのアクティブデバイスの数
    • 2 (default は 2 のハズ, このまま)
  • RAID1 アレイのスペアデバイスの数
    • 0 (default は 0 のハズ, このまま)
  • RAID1 アレイのアクティブデバイスの選択
    • /dev/sda1, /dev/sdb1 を順に選択する.

以上の操作を残りのデバイスについてもくりかえす. sda, sdb のパーティション構成の上に, md デバイスの項目が表れる. この後で, ファイルシステムの作成とマウントポイントの指定を行なう. 結果,

デバイスフラグ容量ファイルシステム
md0(sda1+sdb1)Boot131.61MBext3
md1(sda2+sdb2)3997.49MBswap
md2(sda3+sdb3)495976.16MBext3

となる(swap を RAID 化する必要があったのだろうか?).

アクティブデバイス, スペアデバイスは勘違いしやすいが, 両方アクティブに しておかないと同期されないようだ. 間違ってアクティブ 1, スペア 1 にした 場合には後から md デバイスをアクティブにする を参照されたい.

この後は通常の install 作業と同様にソフトウェアの追加等残りの install 作業を行なう. install 作業後は実際の運用へ進まれたい.

既存のシステムに環境構築

既に稼動しているシステムにおいて Software RAID 環境を構築する場合は,

  • 別のディスクにパーティションを作成
    • 既存のディスクと同一のパーティション構成, サイズにする.
  • md デバイスの作成
  • md デバイスをアクティブにする(同期を取る)

という作業が必要になる. パーティションの作成については割愛する. 以下では

  • 「既存のシステム = /dev/sda1, sda2, sda3」
  • 「RAID の為に追加したディスク = /dev/sdb1, sdb2, sdb3」

として記述している.

必要なソフトウェアの install

mdadm パッケージを install する.

$ sudo -s
# aptitude install mdadm

md デバイスの作成

md デバイスの作成は以下の通り.

$ sudo -s
# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
# mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb3

mdadm の設定は /etc/mdadm/mdadm.conf に記述されている. これを更新する.

$ sudo -s
# echo 'DEVICE /dev/sd[a-z]*' > /etc/mdadm/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

initrd を更新しておく.

# mkinitrd -r /dev/md2 -o /boot/initrd.img-`uname -r`

ファイルシステムの構築

$ sudo -s
# mkfs.ext3 -f /dev/md0
# mkfs.ext3 -f /dev/md2
# mkswap /dev/md1

既存のシステムをコピーするためにシングルユーザモードへ移行する. この際, 現在稼動しているプロセスは終了するので注意されたい.

$ sudo -s
# telinit 1

ファイルをコピーする

# mount /dev/md0 /mnt
# cd /boot
# cp -ax ./ /mnt
# umount /mnt
# mount /dev/md2 /mnt
# cd /
# cp -ax ./ /mnt
# umount /mnt

/etc/fstab 内の /dev/sda? を /dev/md? に変更する.

$ vi /etc/fstab
... 編集

その後, 再起動し grub の画面で 「e」を押しコマンドモードへ移行し, root=/dev/sda2 を root=/dev/md2 に変更して起動してみる.

md デバイスをアクティブにする.

上記 md デバイスの追加の最後で root=/dev/md2 として起動できた後に, /dev/sda? を RAID に参加させる.

$ sudo -s
# mdadm /dev/md0 -a /dev/sda1
# mdadm /dev/md1 -a /dev/sda2
# mdadm /dev/md2 -a /dev/sda3

/etc/mdadm/mdadm.conf の更新

$ sudo -s
# echo 'DEVICE /dev/sda[a-z]*' > /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

同期の監視. 結構時間がかかると思われるが気長に待つ.

$ watch cat /proc/mdstat

全ての同期が終わったら, 再び mdadm.conf および initrd の更新を行なう.

$ sudo -s
# echo 'DEVICE /dev/sda[a-z]*' > /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# mkinitrd -r /dev/md2 -o /boot/initrd.img-`uname -r`

以上で Software RAID 環境の構築は終了である. この後は実際の運用に進まれたい.

実際の運用

grub のエントリの更新

/dev/sda, /dev/sdb どちらかにディスク不良が発生した時の為に, どちらからでも起動できるようにしておく.

# grub
...以下 grub のコマンドプロンプト内での作業...
# device (hd0) /dev/sda
# root (hd0,0)
# install /grub/stage1 (hd0) /grub/stage2 p /grub/menu.lst
# device (hd0) /dev/sdb
# root (hd0, 0)
# install /grub/stage1 (hd0) /grub/stage2 p /grub/menu.lst

この後で, BIOS において /dev/sda か /dev/sdb のどちらかを disable にし て起動を試してみると良い.

md デバイスの監視

RAID デバイスの監視は mdadm デーモンによって行なわれている. ディスクの 同期が取れない場合には /etc/mdadm/mdadm.conf 内の MAILADDR に設定された メールアドレスにメールが飛ぶ.

EPA サーバの場合は

MAILADDR epaadmin[at]epa.scitec.kobe-u.ac.jp 

と指定しておくと良いだろう.

また cron による定期的な監視は /etc/cron.d/mdadm によって行なわれている. 中身は

6 1 * * 0 root [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ] && /usr/share/mdadm/checkarray --cron --all --quiet

となっており, 毎月第1日曜日 の 01:06 に実行される様になっている. このファイル内の内容を参考に適宜 /etc/cron.daily や /etc/cron.weekly 等 に監視スクリプトを作成しておくと良いだろう.

実際にディスク障害があった場合には, エラーのあったパーティションが md デバイスから切り離される. 切り離されたパーティションを検査し, md デバイ スに追加するなり, 新たなディスクのパーティションを md デバイスに追加す るなりすれば良いだろう.

例えば md2 デバイスから /dev/sda3 を除き /dev/sdc3 を追加する場合には

$ sudo -s
# mdadm /dev/md2 --add /dev/sdc3 --remove /dev/sda2

となる.

後から md デバイスをアクティブにする

RAID1, RAID5 の場合のアクティブ, スペアは

  • アクティブは現在 md デバイスに参加しているパーティション,
  • スペアはアクティブなパーティションに障害が発生した場合にアクティブになる

となっている. そのため install の段階でアクティブ 1, スペア 1 にした場合には 実際には RAID1 として運用されていない.

この場合には

$ sudo -s
# mdadm --grow /dev/md0 -n2
# mdadm --grow /dev/md1 -n2
# mdadm --grow /dev/md2 -n2

などとすれば良い. 実際に同期されているかは, /proc/mdstat を見てみると良いだろう.

参考文献


*1CPU を用いてパリティ演算を行なう, 使用には OS にドライバを組込む必要がある RAID コントローラ
*2良い勉強なのでやったら良い, という意見もあるかも.

Last modified:2008/02/22 04:52:26
Keyword(s):
References: