ソフトウェアRAID。CentOS5のソフトウェアRAID備忘録というか記録というか…
インストール時にソフトウェアRAID状態でインストール
mdとはMultiple Deviceとのこと
ステータス
cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0] 104320 blocks [2/2] [UU] md1 : active raid1 sdb2[1] sda2[0] 4192896 blocks [2/2] [UU] md2 : active raid1 sdb3[1] sda3[0] 972462528 blocks [2/2] [UU] [====>................] resync = 24.3% (236707904/972462528) finish=122.1min speed=100413K/sec unused devices: <none>だそうだ。 md2のデバイスは現在resync(再同期中)ってなステータス 放置プレイする場合は
watch cat /proc/mdstatってな感じ
resync中に再起動すると、再同期処理は全て無効になって最初から同期処理が始まったさ…マジですか
そして、再同期処理ですが、ハードウェアRAIDに比べると比較にならんほど遅い…
正常時の情報を取得しておく事が実は重要。修復時に利用するシーンがくるのだ。
fdisk -l /dev/sda
cat /proc/mdstat
grubを両方のHDDにインストールするのだ。これ忘れると2つ目以降のHDDから起動してこなくなるよ。
grub grub> root (hd0,0) grub> setup (hd0) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done. grub> root (hd1,0) grub> setup (hd1) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded. succeeded Running "install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/grub.conf"... succeeded Done. grub> quit
/etc/rc.d/init.d/mdmonitorというデーモンがある。ソフトウェアRAIDモニタリングデーモンだ。
/etc/mdadm.confを読み取って稼働する。このファイル内にMAILADDRかPROGRAMかその両方の変数が定義されている必要がある。
デフォルトはroot宛になってる。
/etc/mdadm.confの作成方法
mdadm -D --scan
なんと簡単な!
MAILADDR | mdadmが–monitorモードで稼働している場合に通知する先。1つのアドレスしか書けない |
---|---|
MAILFROM | AlertメールのFromアドレス。デフォルトはroot |
DEVICE | ほとんどの場合、partitionsの指定で問題ない |
MDが壊れた時のメールサンプル
今回sdbのHDDを取外して起動してみたのだ。
Subject:DegradedArray event on /dev/md[2]:[hostname] This is an automatically generated mail message from mdadm running on [hostname] A DegradedArray event had been detected on md device /dev/md[2]. Faithfully yours, etc. P.S. The /proc/mdstat file currently contains the following: Personalities : [raid1] md0 : active raid1 sda1[1] 104320 blocks [2/1] [_U] md1 : active raid1 sda2[1] 4192896 blocks [2/1] [_U] md2 : active raid1 sda3[1] 972462528 blocks [2/1] [_U] unused devices: <none>
HDDが壊れた場合の修復手順
mdadm --manage [RAIDデバイス名] --remove [取外パーティション名] 例 mdadm --manage /dev/md0 --remove /dev/sdb1
デバイス名は/proc/partitionsやdmesg内に記述されてるはず fdisk /dev/XXX シリンダ数指定で正常時のfdisk情報と同じように設定 作成したシステムIDは通常83(Linux)なので、元のfdisk情報と同じようにfd(LinuxRaid自動検出)に変更 一つ目のパーティションは起動用のはずなのでブート可能フラグを立てる
mdadm --manage [RAIDデバイス名] --add [追加パーティション名]
HDDが2本ある状態でどうすれば効率的な管理ができるのか検証してみた。
インストールの際、/sda1と/sdb1をLinux RAIDで作成してRAID1を組み/dev/md0としてデバイスを作成。これを/bootにマウントする。/dev/sdaの残り領域をLVMとして作成して、このLVM内にSWAPと/(root)パーティションを置いた。
デバイス ID システム名 /dev/sda1 fd Linux RAID 自動検出 /dev/sda2 8e LVM /dev/sdb1 fd Linux RAID 自動検出
起動後、/dev/sdb側にgrubブートローダーを突っ込む
grub grub> root (hd1,0) Filesystem type is ext2fs, partition type 0xfd ←ここでパーティションIDを確認しておく grub> setup (hd1) grub> quit
まず、fdiskで/dev/sdbにLVMパーティションを作成する
fdisk /dev/sdb
PV(Physical Volume)を作成する
pvcreate /dev/sdb2
VG(Volume Group)へ作成したPVを追加する
vgextend VolGroup00 /dev/sdb2
LV(Logical Volume)をミラーモードに変更する
lvconvert -m 1 --mirrorlog core /dev/VolGroup00/LogVol01 VolGroup00/LogVol01: Converted: 9.1% VolGroup00/LogVol01: Converted: 20.5% [snip] VolGroup00/LogVol01: Converted: 100.0%
これで、LVがミラーモードとして稼働しだす。実行結果には少し時間がかかる。
確認してみる
lvs -a -o +devices LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices LogVol00 VolGroup00 mwi-ao 1.00G 100.00 LogVol00_mimage_0(0),LogVol00_mimage_1(0) [LogVol00_mimage_0] VolGroup00 iwi-ao 1.00G /dev/sda2(220) [LogVol00_mimage_1] VolGroup00 iwi-ao 1.00G /dev/sdb2(0) LogVol01 VolGroup00 mwi-ao 6.88G 100.00LogVol01_mimage_0(0),LogVol01_mimage_1(0) [LogVol01_mimage_0] VolGroup00 iwi-ao 6.88G /dev/sda2(0) [LogVol01_mimage_1] VolGroup00 iwi-ao 6.88G /dev/sdb2(32)それぞれのLVMボリュームが/dev/sdaと/dev/sdbに割り振られているのです。