F-12Cの内蔵フラッシュメモリをバックアップ

F-12CのV13をDooMLoRD_v4_ROOT-zergRush-busybox-su.zipでroot化したので、内蔵フラッシュメモリのバックアップを取ってみた。同じくF-12CのV21をDooMLoRD_v4_ROOT-zergRush-busybox-su.zip+自前のrunme-F12C.batでroot化したので同様にバックアップを取ってみた。少なくともフラッシュメモリパーティション構成や容量などは同じ模様。
まずはcat /proc/mtdでフラッシュメモリの各パーティションのデバイス名、容量、名前を確認。

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00a00000 00040000 "boot"
mtd1: 15c00000 00040000 "system"
mtd2: 06400000 00040000 "cache"
mtd3: 00100000 00040000 "misc"
mtd4: 01e00000 00040000 "persist"
mtd5: 00a00000 00040000 "recovery"
mtd6: 1b9c0000 00040000 "userdata"
# 

次にcat /proc/partitionsでフラッシュメモリの各パーティションの名前と容量を確認。1blockが1024バイトと仮定するとmtdblock0〜6が、先ほどのmtd0〜mtd6のsizeと一致することから同じ領域を差すものだと思われる。
尚、mmcblk0、mmcblk0p1は違う容量のmicroSDを入れる度に1blockを1024バイトと仮定した容量がほぼ一致するので、これはmicroSDのデバイス名だと思われる。

# cat /proc/partitions
major minor  #blocks  name

  31        0      10240 mtdblock0
  31        1     356352 mtdblock1
  31        2     102400 mtdblock2
  31        3       1024 mtdblock3
  31        4      30720 mtdblock4
  31        5      10240 mtdblock5
  31        6     452352 mtdblock6
 179        0   31166976 mmcblk0
 179        1   31162880 mmcblk0p1
#

最後にmountでmtdblock1が/systemにマウントされているのでmtd1と一致していると思われる。他のmtdblock2、mtdblock4、mtdblock6についても同様。

# mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mtdblock1 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock6 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock4 /persist yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,u
id=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset
=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:1 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relat
ime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,ioch
arset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
#

ddコマンドで/dev/block/mtdblock0〜6をバックアップしようとしてもI/Oエラーが出る。/dev/mtd0〜6はブロックデバイスじゃなくキャラクタデバイスだからかリードエラーになる。ブロックサイズを512等に変えても同様。

# dd if=/dev/block/mtdblock0 of=/sdcard/mtdblock0.img bs=1024
/dev/block/mtdblock0: read error: I/O error
0+0 records in
0+0 records out
0 bytes transferred in 0.002 secs (0 bytes/sec)
# dd if=/dev/mtd/mtd0 of=/sdcard/mtd0.img
/dev/mtd/mtd0: read error: Invalid argument
0+0 records in
0+0 records out
0 bytes transferred in 0.001 secs (0 bytes/sec)
#

キャラクタデバイスの/dev/mtd/mtd0〜6はcatコマンドで開いて、リダイレクトでファイルに落とすことでバックアップが出来る。

# cat /dev/mtd/mtd0 > /sdcard/boot.img
# cat /dev/mtd/mtd1 > /sdcard/system.img
# cat /dev/mtd/mtd2 > /sdcard/cache.img
# cat /dev/mtd/mtd3 > /sdcard/misc.img
# cat /dev/mtd/mtd4 > /sdcard/persist.img
# cat /dev/mtd/mtd5 > /sdcard/recovery.img
# cat /dev/mtd/mtd6 > /sdcard/userdata.img

念の為にファイル名を変えて何度かバックアップを取ってみたが、どれもハッシュ値は同じで、ファイルサイズもcat /proc/mtdで表示されたものと一致した。
以下がファイル名とファイルサイズとハッシュ値。ただし、少なくとも環境によって異なるuserdata.imgのハッシュ値には意味が無いと思うし、system.imgもroot化の影響でオリジナルでは無いからハッシュ値には意味が無いと思われる。

NAME: boot.img
SIZE: 10485760
CRC32: 8BE39E4B
MD5: 1190C0496CC313D63A2617BDDC72268F
SHA-1: 9AAE2EEA15EBB1AF2FEDCA8DB9CBC0DFFBB4A4CD

NAME: system.img
SIZE: 364904448
CRC32: F8DF9845
MD5: 2ECACFA97ADDA497E5C8EC2A50262196
SHA-1: 537CFEAACE30A5904160872728F5E29984469FD4

NAME: cache.img
SIZE: 104857600
CRC32: 7304D755
MD5: B48B9AF0E7BB8D42BD92E751CE87F7EA
SHA-1: 490FAF2CA8EC302F33C1BDE76F97379A121C171E

NAME: misc.img
SIZE: 1048576
CRC32: 901253DF
MD5: F9D850BB5A48511B31639E94CC975444
SHA-1: 1EA1B5A28FE728220D304F495CFD487E11B54A3A

NAME: persist.img
SIZE: 31457280
CRC32: FA9C35F6
MD5: 5FAC846DF90A61968C6624E525253027
SHA-1: 490A64685179976F88B9626069A98FAFC717AC99

NAME: recovery.img
SIZE: 10485760
CRC32: F0A19555
MD5: ED6E695113ED911E51D1E0719E1883B0
SHA-1: 8B847DAF93C7D904291C53C96291CCBAE7E5D034

NAME: userdata.img
SIZE: 463208448
CRC32: 99BF0419
MD5: 2C18A12DCF42B4AE1277C64C392C6D4E
SHA-1: 2FE7C78B918210AF4C4899415B58227287C2F401

以下はV21の場合の値。ファイルサイズは全てV13の場合と一致。misc.imgについてはV13の場合とハッシュ値も同一だった。

NAME: boot.img
SIZE: 10485760
CRC32: CC28870D
MD5: 05FB11F3C6E0FFA10086C128B845D044
SHA-1: 76F078BB4AF82BF3176BD9B03ECB449C97C5A1D3

NAME: system.img
SIZE: 364904448
CRC32: 12B405BB
MD5: 67C0D12EC15481923DBBDFAC5151AEA6
SHA-1: F6995EE86BA7A5029F886B51B3F8FE29AFED9FA7

NAME: cache.img
SIZE: 104857600
CRC32: 55955F12
MD5: CC5859B959313BD55782DAE11FA4D7C5
SHA-1: 24BFA46283DB70295351782A0A88CFAF33D2EF30

NAME: misc.img
SIZE: 1048576
CRC32: 901253DF
MD5: F9D850BB5A48511B31639E94CC975444
SHA-1: 1EA1B5A28FE728220D304F495CFD487E11B54A3A

NAME: persist.img
SIZE: 31457280
CRC32: 83B6DB67
MD5: 7FB996D7B857F619F2F06777A0BEE299
SHA-1: 7AA482515B64EFF7880F9AC9F39440D1F48B03E9

NAME: recovery.img
SIZE: 10485760
CRC32: 2A8B619E
MD5: 9FD1533CA652361140B81699F4CF9C27
SHA-1: 0C3B8AD1C14549262FF7CECDF75E09A8820CFB17

NAME: userdata.img
SIZE: 463208448
CRC32: 313F939C
MD5: A6AF389DEB013D9F97B2137C1D3DAFA1
SHA-1: E98D8512863EBBCE879B95445E968E70E3685D81