hajichan.net technical version
トップページ >> サーバ管理(Solaris) >> fsckによるファイルシステム修復

サーバ管理

fsckによるファイルシステム修復

OSがパニックなどで異常終了してしまった場合、次回起動時にfsckを実行するように促されます。要は、「ファイルシステムの整合性が取れてないので、このまま使用するとデータが損失して危険だよ。fsckで一度ファイルシステムの整合性を取って下さいよ」と言うことです。管理者となって最初にこのメッセージに遭遇したときは焦りましたが、言われた通り実行していけば大抵は正常に復旧できます。

fsckの実行

本当は、オプションを指定しないで、「修復しますか?」という問いに確認しながらyで答えるのがいいのですが、障害中にそんな悠長なことは言ってられません。yオプションを一緒に指定して自動的にyesと答えるようにしちゃいましょう。

起動中にfsckを掛けるように言われたら、rootのパスワードを入力し、シングルユーザモードに移行。そしてfsckを実行します。

# fsck -y /dev/md/rdsk/d5
** /dev/md/rdsk/d5
** Last Mounted on /opt
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
UNREF DIR  I=1087936  OWNER=sa MODE=40755
SIZE=512 MTIME=Feb 19 15:57 2001

RECONNECT? y 

DIR I=1087936 CONNECTED. PARENT WAS I=985408

** Phase 4 - Check Reference Counts
UNREF FILE I=843020  OWNER=root MODE=100644
SIZE=0 MTIME=Feb 23 19:16 2001

CLEAR? y

UNREF FILE I=843066  OWNER=root MODE=100644
SIZE=0 MTIME=Feb 23 19:16 2001

CLEAR? y

UNREF FILE I=843068  OWNER=root MODE=100644
SIZE=0 MTIME=Feb 23 19:16 2001

CLEAR? y

LINK COUNT DIR I=1087936  OWNER=sa MODE=40755
SIZE=512 MTIME=Feb 19 15:57 2001  COUNT 0 SHOULD BE 2

ADJUST? y

** Phase 5 - Check Cyl groups
FREE BLK COUNT(S) WRONG IN SUPERBLK

SALVAGE? y
2224 files, 591640 used, 5941359 free
(4095 frags, 742158 blocks,  0.0% fragmentation)

***** FILE SYSTEM WAS MODIFIED *****

fsckによるファイル整合が無事終了したので、システムを一度停止して、再度起動する。

# sync
# sync
# sync
# halt

ok boot

スーパーブロックの復旧方法

僕は遭遇したことがないのですが、スーパーブロックが運悪く逝ってしまう場合が有ります。その場合は、代替スーパーブロックで復旧する必要があります。多分この手順でいいと思いますが、保証は出来ません。

fsckを実行した際、BAD SUPER BLOCKとかいうメッセージが出力される。

# fsck /dev/rdsk/c0t2d0s0

newfsで代替スーパーブロックを確認する。Nオプションは、ファイルシステムを再構成しないので大丈夫です。ここで出力された代替スーパーブロックをメモっておきます。

# newfs -Nv /dev/rdsk/c0t2d0s0
---
mkfs -F ufs -o N
/dev/rdsk/c0t2d0s0 2101200 255 16 8192 1024 32 6 90 4096 t 0 0 8 16 n
/dev/rdsk/c0t2d0s0:  2101200 sectors in 515 cylinders of 16 tracks,
255 sectors
1026.0MB in 23 cyl groups (23 c/g, 45.82MB/g, 11264 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 94128, 188224, 282320, 376416, 470512, 564608, 658704, 752800,
846896, 1223280, 1317376, 1411472, 1501472, 1595568, 1689664,
1783760, 1877856, 1971952, 2066048,

先ほど確認した代替スーパーブロックの1つを指定してfsck。

# fsck -F ufs -o b=32 /dev/rdsk/c0t2d0s0

コラム

fsckによるファイルシステム復旧にはそれなりの時間が掛かります。Solaris7から標準装備されているufsロギング機能を利用すれば、fsckを実行する機会も減ってくることでしょう。ufsロギング機能の解説はこちらに有ります。

/etc/vfstabにてオプションにloggingを付加すれば設定は終わりです。

# vi /etc/vfstab
---
/dev/dsk/c0t2d0s3 /dev/rdsk/c0t2d0s3 /var ufs 1 no logging

# /etc/telinit 6
ページのトップへ戻る