2009年10月7日水曜日

atacontrolでRAID1を作り直す→失敗してデータ消失?

先日PCを新調しました。
Intel Core i7-860 + GIGABYTE GA-P55-UD3R という新しめのハードに、FreeBSD/amd64 8.0-RC1 という挑戦的な仕様です。(dmesgは後日。)

で、実験がてら、ICH10Rの機能でRAID1を組み、一端FreeBSDをインストール。その後、ケーブルを抜いてみてRAID1をDEGRADEさせ、そこから復旧させようと思ったのですが……

ar0: WARNING - mirror protection lost. RAID1 array in DEGRADED mode
ar0: 953867MB status: DEGRADED
ar0: disk0 READY (master) using ad16 at ata8-master
ar0: disk1 DOWN no device found for this subdisk

起動時にこんな感じにメッセージが出ると、RAID1がおかしくなっている証拠。

# atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
0 ad16 ONLINE
1 ---- MISSING (←実際の障害の内容でここは書き換わると思います。)
# atacontrol list (ダメになったディスクがどのataチャンネルにあったか見る。)
ATA channel 9:
Master: no device present (抜いたディスクは本来ここにあった。)
Slave: no device present
# atacontrol detach ata9 (この例ではata9になる。) 
電源を切ってディスク交換。ホットスワップでもいいのかな?
# atacontrol attach ata9 (必要ないかも?)
Master: ad18 SATA revision 2.x
Slave: no device present
# atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
0 ad16 ONLINE
1 ---- MISSING (ないことになっている)
# atacontrol addspare ar0 ad18
# atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
subdisks:
0 ad16 ONLINE
1 ad18 SPARE  (スペア扱いになる)
# atacontrol rebuild ar0 (指示出しだけなので一瞬で終わる。)
# atacontrol status ar0
ar0: ATA RAID1 status: REBUILDING 0% completed
subdisks:
0 ad16 ONLINE
1 ad18 SPARE

この処理をマルチユーザモードでやっており、リビルド作業をインターネット経由で行っていました。リビルドコマンドを投入した後、viでちょっとしたスクリプトを書いていたところ、ファイルをセーブしたところでフリーズ。

コンソール画面を見ると、

......
g_vfs_done():ar0s1a[WRITE(offset=1348632576, length=16384)]error = 5
g_vfs_done():ar0s1a[WRITE(offset=1348698112, length=16384)]error = 5
g_vfs_done():ar0s1a[WRITE(offset=1541259264, length=16384)]error = 5
g_vfs_done():ar0s1a[WRITE(offset=2311831552, length=16384)]error = 5
g_vfs_done():ar0s1a[WRITE(offset=2697117696, length=16384)]error = 5
g_vfs_done():ar0s1a[WRITE(offset=3082403840, length=16384)]error = 5
panic: initiate_write_inodeblock_ufs2: already started
g_vfs_done():cpuid = 0
ar0s1d[WRITE(offset=65536, length=2048)]Uptime: error = 5
47m24s
Cannot dump. Device not defined or unavailable.
Automatic reboot in 15 seconds - press a key on the console to about

落ちてました。リビルドはシングルユーザモードでやったほうがいいということでしょうか。

で、もう一度RAID1を構成しなおしOSを入れ、今度はシングルユーザモードで試してみました。

# zfs umount -a   (zfsのほうからマウント解除)
# umount -a     (ufsのほうをマウント解除)
# atacontrol detach ata9
# atacontrol attach ata9 (意図的にDEGRADEさせる)
# atacontrol addspare ar0 ad18
# atacontrol rebuild ar0
(とここまでは手順通り)
# echo "ttt" >> /test.txt
# echo "ttt" >> /test.txt   つい魔が差してやってしまった。
# echo "ttt" >> /test.txt
# sync
# atacontrol status ar0
ar0; ATA RAID1 status: REBUILDING 1% completed
subdisks:
0 ad16 ONLINE
1 ad18 SPARE
# (放置後数分経過)
ad16: FAILURE - READ_DMA status=51 error=40 LBA=93492352
ar0: FAILURE - RAID1 array broken
ad18: WARNING - WRITE_DMA taskqueue timeout - completing request directly
atacontrol: read: Input/Output error
WARNING - WRITE_DMA48 freeing taskqueue zombie request
リビルドに失敗してBROKEN扱いです……

なお、困ったことに、こうなってから再起動した後で、BIOSのRAID調整メニューから見たときドライブが Offline Member になっていると、RAID1は破損。リビルドは絶望的なようです。再マウントしてデータを取り出せるかどうかは分かりません。あまりに危険な状況なので、もし試される場合はお手元の余りHDDでお試し下さい。

次こそは悪戯せずにrebuildに挑戦…と思いましたが、台風が近いので帰ることにします。

0 件のコメント: