% 表題: www トラブルシューティング % % 履歴: 2006/11/10 山下 達也 2004/04/28 トラブルカルテを元に作成 % 2006/11/13 山下 達也 本ドキュメントは, 2006/11/10 に発生した, www サーバ /home 領域のハードディスク故障に関する作業メモである. ■ 症状 11/10 18:00, /dev/sdc1 (/home 領域) に於いて I/O error を発見. error は少なくとも 10/21 から出ていたが, www サーバとしての機能には ほとんど影響は出ていなかったため, 発見が遅くなった. ■ 原因 /dev/sdc1 (/home 領域) の HD の故障. ■ 作業方針 □ 11/10 … 応急処置 ; 作業内容 1 〜 6 + 現状の把握 + 破損領域拡大の防止 - network 線を抜く - rsync を手動実行 - sdc1 , sdd1 を umount - /home の rsync を止める + shutdown せずに user の login を防ぐ - network 線を抜いたままにしておく □ 11/13 … 本格的な作業 ; 作業内容 7 〜 15 + sdd1 (旧 /home.bk) を /home に mount + 新しいディスク(sdc1) に, sdd1 の内容を rsync + その後, sdc1 を /home.bk に mount ■ 作業内容 1. /dev/sdc1 (/home 領域) で I/O error を発見 (10日 18:00) $ dmesg | less SCSI error : <0 0 2 0> return code = 0x8000002 Deferred sdc: sense = 71 4 ASC=19 ASCQ= 0 Raw sense data:0x71 0x00 0x04 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x19 0x00 0x02 0x00 0x00 0x00 end_request: I/O error, dev sdc, sector 228589759 Buffer I/O error on device sdc1, logical block 28573712 lost page write due to I/O error on sdc1 2. kern.log でいつから I/O error が出ているのか確認. # zgrep I/O /var/log/syslog.*gz /var/log/syslog.19.gz:Oct 21 14:32:02 orange kernel: end_request: I/O error, dev sdc, sector 228589759 /var/log/syslog.19.gz:Oct 21 14:32:02 orange kernel: Buffer I/O error on device sdc1, logical block 28573712 /var/log/syslog.19.gz:Oct 21 14:32:02 orange kernel: lost page write due to I/O error on sdc1 10/21 に I/O error の記録. 以降 11/10 迄 I/O error は無し. I/O error は /dev/sdc1 (/home 領域) にて発生している模様. 3. rsync を手動実行 サイズを確認   # df   # /etc/cron.daily/rsync # df 4. /home の rsync を止める # emacs /etc/cron.daily/rsync /home のバックアップの行をコメントアウト 5. 破損領域拡大防止のため, /sdc1 (/home) , /sdd1 (/home.bk)を umount # umount /home /home.bk ネットワーク線を外したままで放置. -> shutdown をせずにユーザのログインを防ぐため. /home.bk の umount -> /home を外したことによる影響で /home.bk のデータが 消去されるのを防ぐため. sudo -s を /home /home.bk 以外で行なわないと    device is busy と言われて umount できない. 念のためサイズの確認 # df -h 6. /etc/fstab の編集 # emacs /etc/fstab /dev/sdc1 /dev/sdd1 のコメントアウト. 7. /dev/sdc1 /dev/sdd1 のコメントアウトの確認(念の為). 8. 外付 SCSI の電源を落し, 予備ディスクを接続. - halt - 外付 SCSI の電源を落とす   - 予備ディスクを接続する - 新ディスクの ID は 2 (sdc) に設定 + ジャンパの取り付け方 とりつけるのは J6 コネクタ ・・・・・・・・・・ ・・・・・・・・・・ ~~~~~~~~ ^^ ・ : ピン ~~ : もともとカバーで覆われている ^^ : ジャンパをとりつけるピン - sdd(旧 /home)を取り外しておく(保険). 9. 外付 SCSI の電源を入れてから reboot する.   - 外付 SCSI の電源を入れる   - boot - 起動メッセージでディスクが認識されているか確認. $ dmesg | less ... sdc : unknown partion table ... 10. root でログイン. まずパーティションを作成.  # cfdisk /dev/sdc  - パーティションは全領域を sdc1 に. - part type は primary を選択   # mke2fs -jc /dev/sdc1 -c : デバイスにファイルシステムを作成する前に、 fast read-only テストを用いて、不良ブロックを検査する. -j : ext3 を持ったファイルシステムを作成. - /etc/fstab の書き換え. home : /dev/sdc1 -> /dev/sdd1 home.bk: /dev/sdd1 -> /dev/sdc1   - sdc (home.bk) のファイルシステムを ext2 から ext3 に変更 - usrquota が /dev/sdd1 にかかっていることを確認. 11.マウント - halt - 外付け SCSI の電源を落として sdd1(旧 /home.bk)を取り付ける - 外付け SCSI の電源をつける - boot # df - sdd1 が /home ,sdc1 が /home.bk となっているかを確認   - サイズも確認 12. /home -> /home.bk に rsync # emacs /etc/cron.dairy/rsync - /home から /home.bk への rsync のコメントアウトをはずす   - rsync の --delete オプションをはずしておく   # df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda1 9614116 2916964 6208780 32% / tmpfs 256564 0 256564 0% /dev/shm /dev/sdb1 9614116 2939644 6186100 33% /bk /dev/sda2 8056524 215796 7431476 3% /work /dev/sdb2 8056524 217796 7429476 3% /work.bk /dev/sdd1 141122196 82636468 51317128 62% /home /dev/sdc1 141122196 32828 133920768 1% /home.bk # /etc/cron.dairy/rsync - 今回は約 2 時間かかった.後世の方々,心してかかられよ. # df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda1 9614116 2944572 6181172 33% / tmpfs 256564 0 256564 0% /dev/shm /dev/sdb1 9614116 2966340 6159404 33% /bk /dev/sda2 8056524 215796 7431476 3% /work /dev/sdb2 8056524 217796 7429476 3% /work.bk /dev/sdd1 141122196 82636480 51317116 62% /home /dev/sdc1 141122196 82669212 51284384 62% /home.bk # emacs /etc/cron.dairy/rsync - rsync の delete オプションを付け直す 13. 最終確認 $ dmesg | less 14. ネットワーク線につなぐ 15. テプラを貼る - /home と /home.bk のテプラ交換 - 故障した HD に「壊れもの」とラベル