俺#

新潟市でIT業を営むおっさんのブログ。

サーバ吹っ飛んだぞ。ソフトウェアRAID修復失敗。

丸1日足掻いたけど残念ながら復旧成らず。4TBを超える容量を誇ったあらゆるコレクションが消失した。なんかサッパリした(^^;

当該サーバは4台のHDDで構成されていた(過去形)。OSはVine Linux 6だ。

ディスク1:システムA(64GB) データA(1.8TB)
ディスク2:システムB(64GB) データB(1.8TB)
ディスク3:ワークA(62GB) スワップA(2GB) データC(1.8TB)
ディスク4:ワークB(62GB) スワップB(2GB) データD(1.8TB)

システムA〜B(OS置き場)はRAID1、データA〜D(データファイル置き場)はRAID5、ワークA〜B(作業ファイル置き場)とスワップA〜BはRAID0だ。一応、予備HDDとして「ディスク5」が用意してあったが出番はなかった。

最初に調子悪くなったのはディスク3だ(後述の調査によれば)。RAIDの障害通知はケータイにメールで届くようになっていた。「え〜HDD入れ替えメンドクサ〜」とか思いつつシャットダウン。ここまでは「予期された事態」だ。しかし、シャットダウン中に固まりHDDアクセスランプが点きっぱなしの状態に陥った。ここからは「予期せぬ事態」。

しばらく待って仕方なく電源断。単に再起動したらヤバいと直観し、光学ドライブ繋いで「GParted Live」で起動。GParted Liveは自動的にRAID構成が見える状態にしてくれるお利口さんだ。ユーザーの指示なしにディスクに書き込んだりもしないので、安全に状態確認ができる。

「うん?ディスクそのものが2台見えなくね?」

もしかしてHDDじゃなくてM/Bの故障か?SATAが2本死んでる?

切り分けの為、HDDを外して「4台入る外付けUSBケース」に格納。別のマシンで再度GPartedを起動し、USBでHDDを接続してみる。おお!HDDが4台見えた。壊れたのはM/Bかよ。データは大丈夫なんじゃね?と一旦は楽観視したが、その後の調査でこのトラブルがこの世の終わりを告げるものだった事が発覚する。

システムA→ファイルシステム破損
システムB→failでraidから切り離された
データB→superblockが破損
データC→failでraidから切り離された

RAID5を構成する4パーティションの内、データBとデータCの2パーティションがアウト。ご存知のようにRAID5は2台以上のHDDが壊れたらゲームオーバーだ。これって「2台まで壊れてもOKなRAID6だったら良かった」とかいう話じゃないね。M/BやSATAボードが壊れたら、同時に何台のHDDが道連れになるか判らん。

また、RAID1の片割れであるシステムAは中身のファイルシステムが破損したようで、マウントは出来るものの64GBしか容量がないというのに2TBを超えるサイズのファイルが存在する等でメチャクチャ。OS自体もサヨウナラだ。ジャーナリングに対応したファイルシステムも、こんな時は全く万能ではない。

ていうかね、絶対そうだろうと思って、不定期バックアップ用の外付けストレージを導入すべく「4台入る外付けUSBケース」なんてものを買ってあったのだ。ちと遅かったね。行いが悪いんだきっと(^^;

以下にサルベージ環境での「足掻き」を整理してまとめる。

サルベージ環境にてUSBでHDDを接続したところ、/dev/sdd〜/dev/sdgとして認識された。
「ディスク1」のパーティションをfdiskのpで覗いてみる。

バイス ブート 始点 終点 ブロック Id システム
/dev/sde1 * 63 134207009 67103473+ fd Linux raid 自動検出
/dev/sde2 134207010 3907029167 1886411079 fd Linux raid 自動検出

「ディスク2」のパーティションをfdiskのpで覗いてみる。

バイス ブート 始点 終点 ブロック Id システム
/dev/sdg1 * 63 134207009 67103473+ fd Linux raid 自動検出
/dev/sdg2 134207010 3907029167 1886411079 fd Linux raid 自動検出

「ディスク3」のパーティションをfdiskのpで覗いてみる。

バイス ブート 始点 終点 ブロック Id システム
/dev/sdf1 * 63 130014044 65006991 fd Linux raid 自動検出
/dev/sdf2 130014045 134207009 2096482+ fd Linux raid 自動検出
/dev/sdf3 134207010 3907029167 1886411079 fd Linux raid 自動検出

「ディスク4」のパーティションをfdiskのpで覗いてみる。

バイス ブート 始点 終点 ブロック Id システム
/dev/sdd1 * 63 130014044 65006991 fd Linux raid 自動検出
/dev/sdd2 130014045 134207009 2096482+ fd Linux raid 自動検出
/dev/sdd3 134207010 3907029167 1886411079 fd Linux raid 自動検出

パーティションそのものは壊れてないようだ。とりあえず「データA〜D」でraid5の組み立てを試みる。

[root@fuga dev]# mknod /dev/md0 b 9 0
[root@fuga dev]# mdadm --assemble /dev/md0 /dev/sdd3 /dev/sde2 /dev/sdf3 /dev/sdg2
mdadm: no RAID superblock on /dev/sdg2
mdadm: /dev/sdg2 has no superblock - assembly aborted

「データB」のsuperblock破損発覚。この時点でヤバい雰囲気。
「データA」のRAID情報をmdadmで覗いてみる。

[root@fuga dev]# mdadm --misc --examine /dev/sde2
/dev/sde2:
Magic : a92b4efc
Version : 0.90.00
UUID : 296374aa:0fafd206:419a75e2:a07eeb58
Creation Time : Sun Sep 25 15:15:51 2011
Raid Level : raid5
Used Dev Size : 1886411008 (1799.02 GiB 1931.68 GB)
Array Size : 5659233024 (5397.07 GiB 5795.05 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 3

Update Time : Thu Jun 4 13:15:49 2015
State : active
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Checksum : d8bc8027 - correct
Events : 300790

Layout : left-symmetric
Chunk Size : 64K

Number Major Minor RaidDevice State
this 0 8 2 0 active sync /dev/sda2

0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 0 0 2 faulty removed
3 3 8 35 3 active sync

RAIDバイス「2」が「faulty removed」された旨記録されていた。壊れたサーバで動いていた時に記録された情報であり、デバイス名はサルベージ環境と異なっている。どれがどれだか判らんな。「2」はどいつだ?
「データB」のRAID情報をmdadmで覗いてみる。

[root@fuga dev]# mdadm --misc --examine /dev/sdg2
mdadm: No md superblock detected on /dev/sdg2.

やはりsuperblockが破損している。もしこいつが「2」だとしたら、他の3パーティションが無事な可能性が出てくる。
「データC」のRAID情報をmdadmで覗いてみる。

[root@fuga dev]# mdadm --misc --examine /dev/sdf3
/dev/sdf3:
Magic : a92b4efc
Version : 0.90.00
UUID : 296374aa:0fafd206:419a75e2:a07eeb58
Creation Time : Sun Sep 25 15:15:51 2011
Raid Level : raid5
Used Dev Size : 1886411008 (1799.02 GiB 1931.68 GB)
Array Size : 5659233024 (5397.07 GiB 5795.05 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 3

Update Time : Mon May 4 17:04:31 2015
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Checksum : d88f409f - correct
Events : 42

Layout : left-symmetric
Chunk Size : 64K

Number Major Minor RaidDevice State
this 2 8 51 2 active sync /dev/sdd3

0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 8 51 2 active sync /dev/sdd3
3 3 8 35 3 active sync

ありゃりゃ。こいつが「2」かよ。ガックシ。これはだめかもね。
「データD」のRAID情報をmdadmで覗いてみる。

[root@fuga dev]# mdadm --misc --examine /dev/sdd3
/dev/sdd3:
Magic : a92b4efc
Version : 0.90.00
UUID : 296374aa:0fafd206:419a75e2:a07eeb58
Creation Time : Sun Sep 25 15:15:51 2011
Raid Level : raid5
Used Dev Size : 1886411008 (1799.02 GiB 1931.68 GB)
Array Size : 5659233024 (5397.07 GiB 5795.05 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 3

Update Time : Thu Jun 4 13:13:27 2015
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Checksum : d8c116b5 - correct
Events : 300789

Layout : left-symmetric
Chunk Size : 64K

Number Major Minor RaidDevice State
this 3 8 35 3 active sync

0 0 8 2 0 active sync /dev/sda2
1 1 8 18 1 active sync /dev/sdb2
2 2 0 0 2 faulty removed
3 3 8 35 3 active sync

うむ。特に新しい発見は無い。
とにかく「データB」は絶望っぽいので、それ以外の3パーティションでRAID5の組み立てを試みる

[root@fuga dev]# mdadm --assemble /dev/md0 /dev/sdd3 /dev/sde2 /dev/sdf3
mdadm: /dev/md0 assembled from 2 drives - not enough to start the array.

「2デバイスしかねーよ。足らないよ。」と言われてしまった。やはり「データC」がハブられたか。
一応「/proc/mdstat」を覗いてみる。

[root@fuga dev]# cat /proc/mdstat
Personalities : [raid1]
md0 : inactive sde2[0](S) sdd3[3](S) sdf3[2](S)
5659233024 blocks

うん「inactive」だよね。そうだよね。なんということでせう。

http://piro791.blog.so-net.ne.jp/2011-06-20

上記のように「ダメ元」で「--add」して成功した事例、「--create」で成功した事例はあるようなので、最後の足掻き。
ダメ元で「データC」をraidに追加してみる。

[root@fuga dev]# mdadm --manage /dev/md0 --add /dev/sdf3
mdadm: cannot get array info for /dev/md0

ダメ元で「データB」をraidに追加してみる。

[root@fuga dev]# mdadm --manage /dev/md0 --add /dev/sdg2
mdadm: cannot get array info for /dev/md0

最低限superblockが無事で、たとえハブられ状態でもraidに「参加」できないとダメなんだろう。
最後にパーティションそのままRAIDの「新規作成」を試みる。

[root@fuga dev]# mdadm --create /dev/md0 --level=5 --raid-devices=4 --verbose /dev/sdd3 /dev/sde2 /dev/sdf3 /dev/sdg2
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/sdd3 appears to contain an ext2fs file system
size=1095830272K mtime=Thu Apr 9 10:46:26 2015
mdadm: /dev/sdd3 appears to be part of a raid array:
level=raid5 devices=4 ctime=Sun Sep 25 15:15:51 2011
mdadm: /dev/sde2 appears to contain an ext2fs file system
size=1364265728K mtime=Thu Apr 9 10:46:26 2015
mdadm: /dev/sde2 appears to be part of a raid array:
level=raid5 devices=4 ctime=Sun Sep 25 15:15:51 2011
mdadm: /dev/sdf3 appears to be part of a raid array:
level=raid5 devices=4 ctime=Sun Sep 25 15:15:51 2011
mdadm: size set to 2096384K
mdadm: largest drive (/dev/sdd3) exceed size (2096384K) by more than 1%
Continue creating array?

これで失敗したらサルベージ不可確定。

結果は「負け」でした。

ダメだったけど文句は言わない。わはははは。

寝る。