Linux 備忘録 : Ext3 のジャーナルファイルの再作成の方法

本日は、休日出勤。残念ながら、昨日は疲労で高熱をだしたりで、週末の料理レシピはお休みです。

お仕事で使っている Oracle サーバのディスクにおいて、Ext3 のジャーナルファイルが怪しくなってきたので再作成する事にしました。ジャーナルの再構築って、過去に幾度か失敗した経験があるので怖いのですが今回は無事に成功しました。備忘録として手順をまとめてみました。

- スポンサーリンク -

1. まず始めに Ext3 上でファイルシステムの破損状況を調査する
umount /dev/hda1
e2fsck -fn /dev/hda1
正常時
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/hda1: 150/4308992 files (10.7% non-contiguous), 3486771/8614848 blocks
Parallelizing fsck version 1.20-WIP (17-Jan-2001)

異常時
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'pmon_14940.trc' in /oradata/bdump (212993) has deleted/unused inode
213170. Clear? no

Entry 'arc0_14960.trc' in /oradata/bdump (212993) has deleted/unused inode
213171. Clear? no

Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: -5386571 -5386572 -5386574
Fix? no

Free blocks count wrong for group #164 (14151, counted=14148).
Fix? no

Free blocks count wrong (4880041, counted=4880038).
Fix? no

Inode bitmap differences: -213170 -213171
Fix? no

Free inodes count wrong for group #13 (16195, counted=16193).
Fix? no

Free inodes count wrong (4301413, counted=4301411).
Fix? no

/dev/hda1: 7579/4308992 files (24.7% non-contiguous), 3730799/8610840 blocks
Parallelizing fsck version 1.20-WIP (17-Jan-2001)

2. 破損箇所を特定する
find / -inum inode番号
inode でファイルを検索して、削除しても問題がない inode かを確認する。問題があるファイルの場合もあるけど、今回はそこまで踏み込まないものとします。かなりの破損状況が確認された場合は、「nemuiDoc: あるext3復旧レポート」が参考になります。

3. Ext3 を いったん Ext2 に戻す
tune2fs -O^has_journal /dev/hda1

4. ファイルシステムの修復を行う
fsck -y /dev/hda1
fsck -fn 時に出力された破損 inode に相当するファイル(find で調査した値)は
lost+found ディレクトリに移動されます。

5. クリーンな状態になったところで、Ext2 を Ext3 に戻す
tune2fs -j /dev/hda1

以上で、クリーンな状態のジャーナルファイルが再作成されます。こんなので効果があるかどうか分かりませんが・・・。そもそもファイルシステムが破損した場合は、ファイルシステムデバッガ debugfs を使って調査するみたいです。

勉強不足で未経験ですが、下記の方法でもジャーナルファイルを無効化し、Ext2 に戻すことができるようです。

debugfs -w /dev/hda1
debugfs 1.32 (09-Nov-2002)
debugfs: features -needs_recovery -has_journal
Filesystem features: dir_index filetype sparse_super
debugfs: quit

- スポンサーリンク -