[Karte] ファイルシステムチェックのエラー
概要
- 作成日 : 2011.06.28
- リファレンス機 joho09-itpass にて, 停電対策で PC と UPS の電源を切り, 後日起動した際, 症状に挙げたようなメッセージが出力されたため, 手動で fsck を行った
原因
- 外付け HDD の電源を落とし忘れたことではないかと思われる
復旧作業
症状と原因を踏まえての作業方針
エラーメッセージに従い, /var/log/fsck/checkfs を読む.
$ sudo cat /var/log/fsck/checkfs
以下は checkfs の内容例
Log of fsck -C -R -A -a Mon Jun 20 17:00:47 2011 fsck 1.41.3 (12-Oct-2008) /dev/sdc1 contains a file system with errors, check forced. /dev/sdc1: Inode 140420225 has illegal block(s). /dev/sdc1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p options) fsck died with exit status 4 Mon Jun 20 18:39:44 2011 -------------
上記のの "/dev/sdc1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p options) " より, ここでは手動で fsck を行う方法を述べる.
作業手順 1 : データのバックアップ
fsck を行う前に, HDD 内のデータのバックアップを行う.
(前もって計算機のユーザに連絡すること)
- バックアップの方法をいくつかある
- 他の情報実験機に scp, rsync を用いて転送する
- 別の HDD に dd コマンドでコピーする
作業手順 2 : fsck の実行
データのバックアップ後, 対象となる HDD をアンマウントしたのちに, fsck を実行する.
HDD のアンマウント (以下は /dev/sdc1 をアンマウントする場合)
# umount /dev/sdc1
umount を実行した際に "umount: /dev/sdc1: device is busy" と出力される場合は /dev/sdc1 にアクセスしているプロセスがないか確認する
# lsof | grep '/dev/sdc'
アンマウントは以下の方法でも可能
# emacs /etc/fstab # mount -a
- mount -a でアンマウントされない場合はシステムを再起動すると反映できることが多い
アンマウントされたかどうかの確認 (以下は出力例. /dev/sdc1 がなくなっている)
$ df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sdb1 432554224 204055388 206526336 50% / tmpfs 8237060 0 8237060 0% /lib/init/rw udev 10240 896 9344 9% /dev tmpfs 8237060 0 8237060 0% /dev/shm
- fsck の実行
ここでは nohup を用いて実行し, また fsck-sdc1.log というファイルへ出力を保存している.
# nohup fsck -fy /dev/sdc1 > fsck-sdc1.log 2>&1 &
ログファイル (fsck-sdc1.log) の内容の例
nohup: ignoring input fsck 1.41.3 (12-Oct-2008) e2fsck 1.41.3 (12-Oct-2008) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sdc1: 2250407/183140352 files (5.9% non-contiguous), 42536843/732534429 blocks
対象となる HDD がアンマウントされているのに,
fsck.ext3: デバイスもしくはリソースがビジー状態です while trying to open /dev/sdc1 Filesystem mounted or opened exclusively by another program?
などと出力され, fsck が実行できない場合
デバイス関連の認識を再起動した上で, 再度 fsck を実行する
# /etc/init.d/udev restart # nohup fsck -fy /dev/sdc1 > fsck-sdc1.log 2>&1 &
復旧報告
再起動と lost+found 内のファイルの処理
- 対象となる HDD をマウントした後に再起動し, 問題なく起動できることを確認
- HDD の整合性を保つために除去されたファイルが lost+found/ に入っている
- ファイル名は前に使っていた inode になっている
- 一つ一つファイルの内容を確認し, ファイル名や置き場所が特定できれば, 復旧できる可能性がある
今後の注意点
- リファレンス機の電源を落とす際には HDD の電源も切る
- 不良セクタが生じた HDD は, そのセクタの周囲も障害が広がり, HDD が使えなくなる可能性がある. HDD をフォーマットし直すと不良セクタがなくなることがあるが, 絶対とは言えないので注意が必要.
参考文献
- fsckの実行によるファイルシステム修正について
- rsync:
- Linuxファイルシステムのサイズ変更とデフラグ - SourceForge.JP Magazine : オープンソースの話題満載:
- "non-contiguous" について
- Linux初心者の基礎知識:
- lost+found ディレクトリについて
- [linux-users:85700] Re: FSCKで修復した後、lost+foundから全データを復活するには?:
- lost+found ディレクトリについて
- ファイルシステムの管理と保守 − @IT自分戦略研究所:
- lost+found ディレクトリ内に保存されたファイルの名前について
Keyword(s):
References:[トラブルカルテ]