RAID1について勉強中。/proc/mdstatに状態があるらしい。自分のマシンもRAID1でくんでいるのでみてみる。
Personalities : [raid1] [raid6] [raid5] [raid4] md0 : active raid1 sda1[0] sdb1[2](F) 104320 blocks [2/1] [U_] md3 : active raid1 sda5[0] sdb5[2](F) 473845056 blocks [2/1] [U_] md2 : active raid1 sda3[0] sdb3[2](F) 4192896 blocks [2/1] [U_] md1 : active raid1 sda2[0] sdb2[2](F) 10241344 blocks [2/1] [U_] unused devices:
[2/1]というのはRAIDを構成すべきパーティションが2こあって、うち1こが実際に稼働している数になっているという意味らしい。ふむふむ、っておい!まずいではないですか。 dmesgってみると
raid1: Disk failure on sdb5, disabling device. raid1: Operation continuing on 1 devices.
とかいっているし、そのあとI/O errorっていうのがsdbさん多発です!まあ3年使ったしおなくなりになっても不思議ではないかも? 4月にでも変えよう!
上のようになってしまったとき場合のHDDの交換のしかたのメモ。 前回メモ取り忘れたので。 まず/proc/mdstatを確認。
Personalities : [raid1] [raid6] [raid5] [raid4] md0 : active raid1 sda1[0] sdb1[1] 104320 blocks [2/2] [UU] md3 : active raid1 sdb5[1] 473845056 blocks [2/1] [_U] md2 : active raid1 sda3[0] sdb3[1] 4192896 blocks [2/2] [UU] md1 : active raid1 sda2[0] sdb2[1] 10241344 blocks [2/2] [UU] unused devices: <none>
dmesgしてみると
sd 0:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed
とか言われているのでもう駄目なんですかね?まあ前はsdbさんが死んだので、sdaさんももう悲鳴を上げてもおかしくない。変えます。 まずは外つけHDDのアンマウント。
umount /r405n
そののち、外つけHDDの電源OFF。 sdaを新しいのに交換しても起動しない。。。 grubとかかな? grub.confをみてみると
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/md1 # initrd /initrd-version.img #boot=/dev/md0 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.26.8-57.fc8) root (hd0,0) kernel /vmlinuz-2.6.26.8-57.fc8 ro root=/dev/md1 rhgb quiet initrd /initrd-2.6.26.8-57.fc8.img title Fedora (2.6.25.14-69.fc8) root (hd0,0) kernel /vmlinuz-2.6.25.14-69.fc8 ro root=/dev/md1 rhgb quiet initrd /initrd-2.6.25.14-69.fc8.img
となっていて壊れかけのドライブから起動するようになっている? なので以下を試してみる。
[root@kurage ~]# /sbin/grub grub> root (hd0,0) grub> setup (hd0) grub> root (hd1,0) grub> setup (hd1) grub> quit
としてみる。これはどちらのドライブからでも起動できるようにしたつもり。 これで
[kondo@kurage ~]$ less /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md0 : active raid1 sda1[1] 104320 blocks [2/1] [_U] md3 : active raid1 sda5[1] 473845056 blocks [2/1] [_U] md2 : active raid1 sda3[1] 4192896 blocks [2/1] [_U] md1 : active raid1 sda2[1] 10241344 blocks [2/1] [_U] unused devices: <none>
という風にsdaが生きているという様になった。RAID復旧に移行。
[root@kurage kondo]# /sbin/fdisk -l /dev/sda
Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 デバイス Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 fd Linux raid 自動検出 /dev/sda2 14 1288 10241437+ fd Linux raid 自動検出 /dev/sda3 1289 1810 4192965 fd Linux raid 自動検出 /dev/sda4 1811 60801 473845207+ 5 拡張領域 /dev/sda5 1811 60801 473845176 fd Linux raid 自動検出
次にfdiskでパーティションを切っていく。
[root@kurage kondo]# /sbin/fdisk /dev/sdb デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも 含んでいません Building a new DOS disklabel with disk identifier 0x81199074. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. このディスクのシリンダ数は 60801 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) 警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって 正常になります
何か言われているけど気にしなくて良いかな?次にパーティションを切っていく。
コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-60801, default 1): 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-60801, default 60801): 13
この作業を繰り替えしてsdaと同じになるようにシリンダを指定していく。 次にパーティションのIDをsoftware RAID用に変更。
コマンド (m でヘルプ): t 領域番号 (1-5): 1 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました
次にブート可能フラグをつける。
コマンド (m でヘルプ): a 領域番号 (1-5): 1
最終的には以下のようになるはず。
コマンド (m でヘルプ): p Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes Disk identifier: 0x81199074 デバイス Boot Start End Blocks Id System /dev/sdb1 * 1 13 104391 fd Linux raid 自動検出 /dev/sdb2 14 1288 10241437+ fd Linux raid 自動検出 /dev/sdb3 1289 1810 4192965 fd Linux raid 自動検出 /dev/sdb4 1811 60801 473845207+ 5 拡張領域 /dev/sdb5 1811 60801 473845176 fd Linux raid 自動検出
よければテーブルを書き込む。
コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。 [root@kurage kondo]#
あとはこいつらをraidに参加させる。
[root@kurage kondo]# /sbin/mdadm /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1 [root@kurage kondo]# /sbin/mdadm /dev/md1 --add /dev/sdb2 mdadm: added /dev/sdb2 [root@kurage kondo]# /sbin/mdadm /dev/md2 --add /dev/sdb3 mdadm: added /dev/sdb3 [root@kurage kondo]# /sbin/mdadm /dev/md3 --add /dev/sdb5 mdadm: added /dev/sdb5
これで同期が始まる。mdstatを見てみると、
[root@kurage kondo]# cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md0 : active raid1 sdb1[0] sda1[1] 104320 blocks [2/2] [UU] md3 : active raid1 sdb5[2] sda5[1] 473845056 blocks [2/1] [_U] resync=DELAYED md2 : active raid1 sdb3[2] sda3[1] 4192896 blocks [2/1] [_U] resync=DELAYED md1 : active raid1 sdb2[2] sda2[1] 10241344 blocks [2/1] [_U] [==================>..] recovery = 92.5% (9477568/10241344) finish=0.1min speed=93574K/sec unused devices: <none>
途中の場合はこんな感じ。watchコマンドを使うと経過具合がわかる。 復旧後はgrubブートローダーをインストールしておく。
[root@kurage analys]# /sbin/grub grub> root (hd1,0) grub> setup (hd1) grub> root (hd0,0) grub> setup (hd0)
次に以下をチェック。
ちゃんとHDD1こにしても起動したから良かったのだけれど md1,md3がなぜかsdbのみになっていた。 ちょっと怖いがもう一度sdaをmdadmする。 同期後にrebootしたらOKだった。 HDD1こ外して起動したのが良くなかったのかも?