RAID崩壊

DSCF3275s

裸族のインテリジェントビルNAS(CRIB35NAS)をシーゲートの3TB(ST3000DM001)×4台のRAID5構成で使っているのですが、ちょっと深刻なトラブル発生。このRIAD、1年ちょっと前から使っていて今回のトラブルとは別にこれまでにHDDが2回昇天してます。この短期間にその故障頻度はどうなのよって感じですが、そこはRIAD5。壊れたHDDを交換して再構築(25,6時間かかるけど)すればデータは残るんでさすがRIAD5、と思っていた矢先、RIADそのものが消えるという悲惨な事態に遭遇しました。(ちなみに壊れたHDDはRMAで新品交換して、これも「さすが」と思っていたけど、その交換HDDが再びクラッシュ。シーゲート…)

新しく共有フォルダを作ってデータを書き込んでいたところ、突然「転送先が存在しない」というエラーが発生。新しく作ったフォルダだけでなく以前からあったフォルダにもアクセスできなくなり、管理ツールでみると、HDDは認識しているのにRAIDが消えてました。これが噂のRAID崩壊ってやつかー、6TBくらい入れてたデータもパーかー、と諦めそうになった一方で、HDDは認識してるし、SMART情報も正常(CRIB35NASの表示なんて当てにならない気もするけど)なのでこれはソフトウェアの問題と踏んで、復旧がんばってみました。

こちらこちらを参考にしつつ、まずは復旧作業用のPCをヤフオク他で調達。セレロン450(300円)、ATX電源(1,000円)、SATA端子が6つ以上のM/B(3,500円)、新品PCケース(3,580円)で計8,000円ちょい。RAIDケース買うより断然安い。この他にデータ救出用にWD30EZRX×2台(2万円)。無駄にHDDが増えてゆく…。

手持ちの2GB MicroSDをUSBアダプタにセットして、ubuntuイメージ(日本語Remix)をunetbootinで書き込み。CRIB35NASから外したHDD4台と予めWindowsでフォーマットしておいた新HDD2台、ubuntuの入ったUSBメモリをつなぎ、BIOS設定をUSBブートに変更して復旧用PCを"Try ubuntu without installing"で起動。1,2分たつとubuntuのデスクトップが表示されます。ちなみにubuntuは日本語Remix(13.04)というのを使いましたが、メニュー表示などは全部英語でした。そういうもの?。

DSCF3276s
放熱考えて隙間を空けてみたけど、丸棒の不安定さが半端ない。

無事ubuntuが起動したらターミナル(デスクトップ左側ランチャーから1番上のアイコンを選び、"terminal"で検索)から作業開始。

[1] fdiskでHDDの接続状況を確認。/dev/sd?という文字列を探します。

ubuntu@ubuntu:~$ sudo fdisk -l
WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sda: 3000.6 GB, 3000592982016 bytes (←3TB HDD 1台目)
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes (←3TB HDD 2台目)
256 heads, 63 sectors/track, 363376 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
(以下略)

全部同じ3TBのHDDをつないだせいで区別が付きにくかったですが、HDDとしてsda~sdfの6台が見つかりました。

[2] partedでパーティーション情報を確認。

ubuntu@ubuntu:~$ sudo parted /dev/sda (←/dev/sdaを確認)
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print (←partedはコマンド入力が必要)
Model: ATA ST3000DM001-9YN1 (scsi) (←RAIDに使っていたHDD)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 8001kB 7983kB
2 8001kB 1048MB 1040MB xfs
3 1048MB 3001GB 3000GB (←容量から見てここがRAIDデータ領域)

(parted) quit (←partedコマンドを終了)

ubuntu@ubuntu:~$ sudo parted /dev/sdb (←続いて/dev/sdbを確認)
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: ATA WDC WD30EZRX-00D (scsi) (←データ救出用に繋いだHDD)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 134MB 134MB Microsoft reserved partition msftres
2 135MB 3001GB 3000GB ntfs Basic data partition (←NTFSであることからもデータ吸出し用HDDと分かる)

(parted) quit

同様にsdc~sdfを調べてsda,sdc,sdd,sdeが元RAID-HDD、sdb,sdfが退避用HDD、RAIDのデータはそれぞれのHDDの3番目のパーティーションにあることが分かりました。

[3] mdadm導入
この後はmdadmというコマンドを使うのですが、標準では導入されていないのでネット接続した上で以下のコマンドで導入します。mdadm導入中に追加ダウンロード可否を聞かれますが[Y]で継続、postfixの設定は"no configration"を選択しておしまい。

ubuntu@ubuntu:~$ sudo apt-get update (←mdadm導入に先んじてデータベース更新)
ubuntu@ubuntu:~$ sudo apt-get install mdadm
[4] RAID情報確認
mdadmが導入できたので試しにHDDのRAID情報を確認してみます。

ubuntu@ubuntu:~$ sudo mdadm --examine /dev/sdc3 (←/dev/sdc3を確認してみる)
/dev/sdc3:
Magic : a92b4efc
Version : 1.0
Feature Map : 0x0
Array UUID : 18dd4fdd:e4386fd9:e2d4fa71:85ed56d9 (←RAIDのID)
Name : 1
Creation Time : Thu Sep 6 11:38:57 2012
Raid Level : raid5
Raid Devices : 4

Avail Dev Size : 5858485984 (2793.54 GiB 2999.54 GB)
Array Size : 8787728832 (8380.63 GiB 8998.63 GB)
Used Dev Size : 5858485888 (2793.54 GiB 2999.54 GB)
Super Offset : 5858486240 sectors
State : active
Device UUID : bd3866b1:5af4ed7d:e873bbed:ba6acfaa

Update Time : Sun Oct 13 13:40:56 2013
Checksum : 2d56a9d1 - correct
Events : 266483

Layout : left-symmetric
Chunk Size : 64K

Device Role : Active device 1
Array State : AAAA ('A' == active, '.' == missing)

このドライブは4ドライブ正常と認識していましたが、他も試したところ..A.とかA.A.とか不整合極まりない状況。

[5] いよいよRAIDを再構成します。

ubuntu@ubuntu:~$ sudo mk_nod /dev/md10 b 9 10 (←RIADボリュームをマウントするためのファイルを作成)
ubuntu@ubuntu:~$ sudo mdadm -A /dev/md10 /dev/sd[acde]3
mdadm: /dev/md10 assembled from 1 drive - not enough to start the array.

(mdadmでエラーが出てしまったので状態確認(エラーがなければ[6]に行っていいハズ))
ubuntu@ubuntu:~$ sudo cat /proc/mdstat
Personalities :
md10 : inactive sdd3[2](S) sde3[4](S) sdc3[1](S) sda3[5](S)
11716971
8 blocks super 1.0

(inactive(無効)扱いになってしまっているのでいったん停止)
ubuntu@ubuntu:~$ sudo mdadm --stop /dev/md10
mdadm: stopped /dev/md10

([3]で調べたUUIDを使って強制的にRAIDを再構成)
ubuntu@ubuntu:~$ sudo mdadm -A /dev/md10 -u 18dd4fdd:e4386fd9:e2d4fa71:85ed56d9 --run --force
mdadm: forcing event count in /dev/sde3(3) from 266538 upto 266548
mdadm: forcing event count in /dev/sda3(0) from 266535 upto 266548
mdadm: Marking array /dev/md10 as 'clean'
mdadm: /dev/md10 has been started with 3 drives (out of 4).

(実際の作業ではUUIDを使いましたが、以下のコマンドでも良いかもしれません
sudo mdadm -A /dev/md10 /dev/sd[acde]3 --run --force)

(状況確認)
ubuntu@ubuntu:~$ sudo cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] md10 : active raid5 sda3[5] sde3[4] sdd3[2] 8787728832 blocks super 1.0 level 5, 64k chunk, algorithm 2 [4/3] [U_UU] (どうも1ドライブ逝っているようです。)

[6] いよいよ修復です。

ubuntu@ubuntu:~$ sudo xfs_repair -v /dev/md10
Phase 1 - find and verify superblock...
- block cache size set to 46848 entries
Phase 2 - using internal log
- zero log...
zero_log: head block 76448 tail block 76320
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_repair. If you are unable to mount the filesystem, then use
the -L option
to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.

(残念ながらエラー発生。-Lオプションを使えというので再トライ)
ubuntu@ubuntu:~$ sudo xfs_repair -L -v /dev/md10
Phase 1 - find and verify superblock...
- block cache size set to 46848 entries
Phase 2 - using internal log
- zero log...
zero_log: head block 76448 tail block 76320
ALERT: The filesystem has valuable metadata changes in a log which is being
destroyed because the -L option was used.
- scan filesystem freespace and inode maps...
block (2,32451673-32451673) multiply claimed by bno space tree, state - 1
sb_ifree 365, counted 275
sb_fdblocks 863313087, counted 863192191
- found root inode chunk
Phase 3 - for each AG...
(以下略。Phase 7までありました。)

xfs_repairが終わった後、デスクトップのRAIDボリュームを選択すると中が見えるようになっていました。データ救出用のHDDへデータを転送して無事作業終了。今回はほぼ全データ救出することができました。さて、このHDDをまたCRIB35NASで運用すべきかどうか…。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です