fsckでファイルシステムの修復


アニメ『約束の七夜祭り』

主題歌も好きだし、バトルが適度に盛り込まれていて退屈せず、それでいて厳かな雰囲気が一貫してていいアニメでした。youtubeで見れるのは良いけれど、画面いっぱいに広がる星空や、煌びやかな祭りのシーン、すごくよかったので、できれば映画館で見たかったです。

引き続きfsckです。今回はファイルシステムの修復です。といっても、出力メッセージが変わる、ぐらいのことしかやりません。

ファイルを破壊する前に、バックアップしておきます。

takk@deb9:~/tmp$ cp a.bin backup.bin

1bitぐらいの破壊にしておこうと思います。
バイナリの指定位置のデータを、ddコマンドを使って/dev/zeroの出力で置き換えるので変更しやすい0x01のデータを探します。

takk@deb9:~/tmp$ od -tx1 -Ax a.bin | head
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
000400 58 64 00 00 00 90 01 00 00 14 00 00 2f 6d 01 00
000410 4d 64 00 00 01 00 00 00 00 00 00 00 00 00 00 00
000420 00 20 00 00 00 20 00 00 b8 07 00 00 54 9f 65 5b
000430 60 a0 65 5b 01 00 ff ff 53 ef 01 00 01 00 00 00
000440 2f 9e 65 5b 00 00 00 00 00 00 00 00 01 00 00 00
000450 00 00 00 00 0b 00 00 00 80 00 00 00 3c 00 00 00
000460 02 00 00 00 03 00 00 00 42 13 e1 53 bc 5b 4f a5
000470 84 07 17 c0 62 79 f0 b4 00 00 00 00 00 00 00 00
takk@deb9:~/tmp$ 

0x406番地のデータが、0x01なので、ここを0x00に置き換えることにします。

16進だと分かりにくいのでアドレスは10進で表示して、再確認。

takk@deb9:~/tmp$ od -tx1 -w1 -Ad a.bin | head
0000000 00
*
0001024 58
0001025 64
0001026 00
*
0001029 90
0001030 01
0001031 00
*
takk@deb9:~/tmp$ 

該当の0x01データは、1030の位置ですね。

ddコマンドで0x01を0x00に置換。

takk@deb9:~/tmp$ dd if=/dev/zero of=a.bin seek=1030 bs=1 count=1 conv=notrunc
1+0 レコード入力
1+0 レコード出力
1 byte copied, 0.000176493 s, 5.7 kB/s
takk@deb9:~/tmp$ 

再度ダンプして確認。

takk@deb9:~/tmp$ !od
od -tx1 -w1 -Ad a.bin | head
0000000 00
*
0001024 58
0001025 64
0001026 00
*
0001029 90
0001030 00
*
0001033 14
takk@deb9:~/tmp$ 

1030の0x01は、0x00に置き換わりました。

バックアップデータをcmp。

takk@deb9:~/tmp$ cmp a.bin backup.bin
a.bin backup.bin 異なります: バイト 1031、行 1
takk@deb9:~/tmp$ 

では、fsck使います。

takk@deb9:~/tmp$ sudo fsck -a /dev/loop0
fsck from util-linux 2.29.2
fsck.ext3: The ext2 superblock is corrupt while trying to open /dev/loop0
/dev/loop0: 
The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
 or
    e2fsck -b 32768 <device>

takk@deb9:~/tmp$ echo $?
8
takk@deb9:~/tmp$ 

ん~。コマンド実行結果(echo $?)が、 8=「操作エラー」となっています。
次は、オプションなしで実行します。

takk@deb9:~/tmp$ sudo fsck /dev/loop0
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
ext2fs_open2: The ext2 superblock is corrupt
fsck.ext3: Superblock invalid, trying backup blocks...
/dev/loop0 was not cleanly unmounted, check forced.
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/loop0: ***** FILE SYSTEM WAS MODIFIED *****
/dev/loop0: 11/25688 files (0.0% non-contiguous), 8913/102400 blocks
takk@deb9:~/tmp$ echo $?
1
takk@deb9:~/tmp$ 

コマンド実行結果(echo $?)は、1=「ファイルシステムのエラーが修正された」
となっていますので、修復成功したようです。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA