ダンプしたイメージの、ある1つのパーティションにfsckをかける
どうも、ファイルシステム破損と思われるデバイスがある。
このイメージの特定のパーティションにfsckをかけたい。
まずは、dump_rom.binとして、ddでフルダンプする。
ダンプしたイメージの構造をfdiskで見る。
$ sudo fdisk -l dump_rom.bin Disk dump_rom.bin: 3832 MB, 3832545280 bytes 4 heads, 16 sectors/track, 116960 cylinders, total 7485440 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x45f4a095 Device Boot Start End Blocks Id System dump_rom.bin1 * 16 1855 920 83 Linux dump_rom.bin2 1856 18239 8192 83 Linux dump_rom.bin3 18240 34623 8192 83 Linux dump_rom.bin4 34624 7462911 3714144 5 Extended dump_rom.bin5 34640 280447 122904 83 Linux dump_rom.bin6 280464 485311 102424 83 Linux dump_rom.bin7 485328 649215 81944 83 Linux dump_rom.bin8 649232 7462911 3406840 83 Linux
壊れているのはbin8であると思われる。
オフセット計算。
649232x512=332406784
マウントして破損報告のあったファイルを見る。
$ sudo mount -o loop,offset=332406784 dump_rom.bin /media $ cat /proc/mounts /dev/loop0 /media ext4 ro,relatime,user_xattr,acl,barrier=1,data=ordered 0 0 $ sudo cat /media/data/data/jp.test.app/cache/682944627 cat: /media/data/data/jp.test.app/cache/682944627: Input/output error
ファイルが壊れているのを確認できた。
マウントしたままではfsckはかけられない。
しかし、fsckするには、デバイスが生で見えないといけないのだが、これはパーティションイメージである。
しょうがないのでbin8を一回losetupでloopにつなげ、fsckをかける。
$ sudo losetup --offset 332406784 /dev/loop0 $ sudo fsck.ext4 -y /dev/loop0 > fsck.log
大量のログが出た。
インデックスの大半が死んでいたので、fsとしては復旧しても元にはもどらないことがわかった。
loopにつないだのを解除しておく。
$ sudo losetup -a /dev/loop0: [0802]:27528856 (/home/kinneko/dump_rom.bin), offset 332406784 $ sudo losetup -d /dev/loop0
合掌。
eMMCなので、bin8のパートだけROM上書きしたら直るよ。