RAID崩壊(;_;)
RAID 5を構成しているUSBメモリの1つが故障したのだけど
Raspberry PiのUSBメモリで構築したRAID 5から、先日こんなメールが届きました。
This is an automatically generated mail message from mdadm
running on RaspberryPi
A DegradedArray event had been detected on md device /dev/md0.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[5] sda1[4] sdb1[3](F) sdc1[6]
185054208 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/3] [UU_U]
unused devices: <none>
|
4台のUSBメモリで構築したRAID 5のうち、1台のUSBメモリが壊れてしまい、縮退(degrade)状態になったようです。ログインして詳細情報を見てみたところ、
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[5] sda1[4] sdb1[3](F) sdc1[6]
185054208 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/3] [UU_U]
unused devices:
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jul 30 11:24:03 2016
Raid Level : raid5
Array Size : 185054208 (176.48 GiB 189.50 GB)
Used Dev Size : 61684736 (58.83 GiB 63.17 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Jun 25 15:45:20 2018
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 128K
Name : RaspberryPi:0 (local to host RaspberryPi)
UUID : c26559b7:abb329b4:1960d0d5:7b9c8287
Events : 62916
Number Major Minor RaidDevice State
5 8 49 0 active sync /dev/sdd1
6 8 33 1 active sync /dev/sdc1
4 0 0 4 removed
4 8 1 3 active sync /dev/sda1
3 8 17 - faulty
|
という具合に/dev/sdb1 が外されていました。1台が壊れただけなら、それを交換すれば復旧できるはずだ。うん、壊れたのは"/dev/sdb" なのだね。と言うことは「2番目」のUSBメモリか・・・と安直に思ってしまって、
交換しようとUSBハブから「2番目」のUSBメモリを抜いたワタシが愚かでした。抜いた瞬間にRAIDは崩壊しました(;_;)。
理由は、/dev/sd* というデバイス名は、OSがデバイスを認識した順に割り振るのでブートの度に変わってしまい、"/dev/sdb" が2番目のUSBメモリとは限らないからです。そのため、udevでデバイス名を固定すべく、udevのルールファイルを作っていたのでした。これにより、
# ls -l /dev/usb*
lrwxrwxrwx 1 root root 3 8月 28 17:17 /dev/usbma -> sdd
lrwxrwxrwx 1 root root 4 8月 28 17:17 /dev/usbma1 -> sdd1
lrwxrwxrwx 1 root root 3 8月 28 17:17 /dev/usbmb -> sdc
lrwxrwxrwx 1 root root 4 8月 28 17:17 /dev/usbmb1 -> sdc1
lrwxrwxrwx 1 root root 3 8月 28 17:17 /dev/usbmc -> sdb
lrwxrwxrwx 1 root root 4 8月 28 17:17 /dev/usbmc1 -> sdb1
lrwxrwxrwx 1 root root 3 8月 28 17:17 /dev/usbmd -> sda
lrwxrwxrwx 1 root root 4 8月 28 17:17 /dev/usbmd1 -> sda1
|
こんな風に/dev/usbm* からシンボリックリンクが張られるようにしていたのでした。つまり"/dev/sdb" は、"/dev/usbmc" (a, b, c, d のc)にあたるわけで、壊れたのは3番目のUSBメモリだったわけ(メールされて来た内容や詳細情報を良く見れば、壊れたのは3番目だって判るのにね)。これをすっかり忘れて、生きているUSBメモリを抜いたものだから、縮退状態だったRAIDは崩壊。慌てて抜いたUSBメモリを戻しても後の祭りorz。。。
壊れた3番目のUSBメモリをMacに挿してみたところ、フォーマットもできない状態であることが判りました。完全に逝っているのですが、このTranscend製64GB USBメモリは永久保証(*1)なので、TranscendのテクニカルサポートにRMAによる交換を依頼しました。
2016年8月にRAIDを構築して24時間運転を続けてきましたが、2年弱でUSBメモリが1台故障という結果は、どう評価したら良いでしょう。静音、省電力、高信頼サーバーにしたいと思っていたのですが、2年もたないようでは高信頼とは言えないかも?でもUSBメモリが4台なので故障率は4倍になると考えれば、平均して7〜8年の寿命があり、今回のように交換するUSBメモリを間違えなければ、USBメモリを交換していく事で8年以上の連続運転を期待できると考えられなくもないかな。
[今回の教訓]
RAIDの故障したデバイス(USBメモリ)を特定する際、安直に/dev/sd* で判断してはいけない。必ずudevのデバイス名から特定すること。
(*1) Transcendは今年4月に保証期間を5年間に変更しました。従来、永久保証であった製品も5年間保証になるそうです。
|