FreeBSD: サーバーダウン&リカバリー、その1

先週土曜日(2016/07/9)の午前、外出から戻ってサーバーにアクセスしようとするとネットワークエラー!
サーバーは机の横にあるのにつながらない。

LANケーブルの接触不良(?過去に時々発生)かと考えて、LANケーブルを抜き差しし直したものの回復せず。ping も応答無し。
やむなく直接サーバーのキーボードとモニターからアクセスしてみると画面は真っ暗で、キーボードの操作にも応答無し。どうもOSごとダウンした模様。原因不明で、滅多に発生しないものの、過去に一度発生したことがあるので、今回もそれだろうと電源をオフ&オン。通常ならここで、ビープ音がしてBIOSメッセージが表示されるところが、、、、、反応無し。ちょっと嫌な予感。

ちなみに、私のページのサーバーとは、「システム管理メモ」を動かしている、このサーバーのこと。TOMATO TX810EU というマザーボード。ケースを開けて電源を投入すると、ピンマトリックス付近の赤いランプが常時点灯しています。この赤LEDが何を示しているのか分からない!

PCから取り外した Tomato TX810EU ATボード

「うわぁ。」と思うものの、この時点ではあまり心配はしていませんでした。WordPressデータのバックアップはあるし、複数HDDが同時に壊れる確率は低いので、回復に時間は掛かるとしてもサイトが失われることはないだろうと、まずは障害パーツを特定するために、一つ一つパーツを取り外しては電源を投入し、BIOSメッセージが表示されるまで繰り返します。

まず、IDEコネクターを全て取り外し。この時点で症状に変化がないので、HDDが原因ではないことが判明し、ひと安心。データは全く失われていないはず。
NICを取り外した後、メモリを1枚ずつ取り外してチェック。しかし症状変わらず。起動時のBeep音も画面表示も無し。
残りは、Socket 370 Celeron 1.2GHz CPU と電源とマザーボードしかなく、いずれかが壊れたということ。一番簡単に交換できるのが電源ですが、電源を予備のものと交換してもBIOS 画面は出てこず。。。。マザーボードが故障している線が濃厚になってきました。基本的にCPUは壊れませんからねぇ。CPUを別のCeleron 600 に交換してみるもののBIOSメッセージは出てこず。ということでマザーボード故障確定!(涙)
使用中のマザーボードが壊れるのは初めてじゃないものの、ずいぶんと久しぶりの出来事。常時稼働パーツですから壊れることもあります。

HDDは壊れていなはずなので、予備機のMSI VIA PLE133 にHDDを移し替えれば復活する予定でした。
ところが、HDDを移し替えて FreeBSD を起動すると、プロセスまたはカーネルがコアダンプしてしまう!
原因は、TX810EUに使用していた Celeron 1.2GHz を、Celeron 766MHzで動作していた VIA PLE133ボードに移し替えたこと。これによりメモリクロックが100MHz CL2 から 133MHz CL3 に上昇し、動作タイミングが変わったことによるもののようです。恐らくメモリタイミング問題が発生したものと思います。とにかくまともに連続稼働しない!かといって、Celeron 766に戻すと、450MHzも処理能力が低下しますので可能なら1.2GHzで動作させたいと無駄な努力が数時間。Kernel Panic が発生する度に fsck が必要になるので、相当な時間を浪費した結果、あきらめて、一旦 766MHz に戻すことで手を打つことにしました。サーバーを復活させた後、時間がある時にBIOSでクロックを調整出来ないかためしてみることにします。
これで解決かと思ったら、次の問題が発生。無傷だと思っていたHDDにも傷が付いていました。

ルートディスクのデータを操作するコマンドを使うと次のようなメッセージがコンソールやログ中に延々と出力されます。

Jul 9 22:11:04 kernel: (ada2:ata1:0:0:0): READ_DMA. ACB: c8 00 9f 2c 4d 40 00 00 00 00 14 00
Jul 9 22:11:04 kernel: (ada2:ata1:0:0:0): CAM status: ATA Status Error
Jul 9 22:11:04 kernel: (ada2:ata1:0:0:0): ATA status: 51 (DRDY SERV ERR), error: 40 (UNC )
Jul 9 22:11:04 kernel: (ada2:ata1:0:0:0): RES: 51 40 a2 2c 4d 00 00 00 00 00 00
Jul 9 22:11:04 kernel: (ada2:ata1:0:0:0): Retrying command
Jul 9 22:11:08 kernel: (ada2:ata1:0:0:0): READ_DMA. ACB: c8 00 9f 2c 4d 40 00 00 00 00 14 00
Jul 9 22:11:08 kernel: (ada2:ata1:0:0:0): CAM status: ATA Status Error
Jul 9 22:11:08 kernel: (ada2:ata1:0:0:0): ATA status: 51 (DRDY SERV ERR), error: 40 (UNC )
Jul 9 22:11:08 kernel: (ada2:ata1:0:0:0): RES: 51 40 a2 2c 4d 00 00 00 00 00 00
Jul 9 22:11:08 kernel: (ada2:ata1:0:0:0): Retrying command
Jul 9 22:11:11 kernel: (ada2:ata1:0:0:0): READ_DMA. ACB: c8 00 9f 2c 4d 40 00 00 00 00 14 00
Jul 9 22:11:11 kernel: (ada2:ata1:0:0:0): CAM status: ATA Status Error
Jul 9 22:11:11 kernel: (ada2:ata1:0:0:0): ATA status: 51 (DRDY SERV ERR), error: 40 (UNC )
Jul 9 22:11:11 kernel: (ada2:ata1:0:0:0): RES: 51 40 a2 2c 4d 00 00 00 00 00 00
Jul 9 22:11:11 kernel: (ada2:ata1:0:0:0): Retrying command
Jul 9 22:11:15 kernel: (ada2:ata1:0:0:0): READ_DMA. ACB: c8 00 9f 2c 4d 40 00 00 00 00 14 00
Jul 9 22:11:15 kernel: (ada2:ata1:0:0:0): CAM status: ATA Status Error
Jul 9 22:11:15 kernel: (ada2:ata1:0:0:0): ATA status: 51 (DRDY SERV ERR), error: 40 (UNC )
Jul 9 22:11:15 kernel: (ada2:ata1:0:0:0): RES: 51 40 a2 2c 4d 00 00 00 00 00 00
Jul 9 22:11:15 kernel: (ada2:ata1:0:0:0): Retrying command
Jul 9 22:11:18 kernel: (ada2:ata1:0:0:0): READ_DMA. ACB: c8 00 9f 2c 4d 40 00 00 00 00 14 00
Jul 9 22:11:18 kernel: (ada2:ata1:0:0:0): CAM status: ATA Status Error
Jul 9 22:11:18 kernel: (ada2:ata1:0:0:0): ATA status: 51 (DRDY SERV ERR), error: 40 (UNC )
Jul 9 22:11:18 kernel: (ada2:ata1:0:0:0): RES: 51 40 a2 2c 4d 00 00 00 00 00 00
Jul 9 22:11:18 kernel: (ada2:ata1:0:0:0): Error 5, Retries exhausted
Jul 9 22:11:18 kernel: g_vfs_done():ada2s1a[READ(offset=1540931584, length=10240)]error = 5
Jul 9 22:11:22 kernel: (ada2:ata1:0:0:0): READ_DMA. ACB: c8 00 bf 2c 4d 40 00 00 00 00 08 00
Jul 9 22:11:22 kernel: (ada2:ata1:0:0:0): CAM status: ATA Status Error

このディスクから起動することは出来るので、ディスクが致命的なダメージを受けているわけではないようですが、このまま使い続けるのは危険。サーバーダウンついでに、別のHDDにOSを移すのがよさそうです。

普通だったら、別のHDDを準備して、まずはオリジナルのHDDを dump コマンドでバックアップ。続いてFreeBSD インストールCDからブートして、restore コマンドでデータを戻せば簡単にOSを入れ替えられるのですが、今回はディスクにエラーがあるし、無理矢理 dump するとリトライが続いて、バックアップに時間が掛かりすぎるので、手動で /etc, /var あたりを手作業でメンテナンスせざるを得ません。

別の、インストール済み FreeBSD 9.3 ルートHDDを準備して、2ndary IDEに接続し、手作業でチマチマデータを移行しました。これには時間が掛かりました。/usr と /home はダメージがない別ディスクなのでそのまま利用可能なものの、スワップサイズを拡張したかったので cpio でファイルを別ディスクに転送。ファイル単位コピーなので、ひょっとすると重要ファイルのコピーを忘れている箇所があるかも。そうこうして、とりあえずシステムが復活しました。土曜日の午後から作業を開始して、復活したのが日曜日の深夜。週末丸つぶれ。

メモリは、i810チップセットの制約による 512MB から 1GB に倍増したものの、CPUクロックが 1.2GHz から 766MHz へ激減、L2キャッシュサイズが256KBから128KBへ半減。体感的にはパフォーマンス激減です。
今後、850MHzの Socket 370 CPUに交換できないか試してみることと、BIOSパラメータの調整することにより、Celeron 1.2GHz との組み合わせで正常に動作してくれないものか試してみたいと思っているところです。

続きは、メモ、「その2」で。

コメントを残す