MF8350CdnというCanonの複合機でUSBメモリにスキャンすると, 「SCAN0005.pdfに保存しました」といったメッセージが出るのに, PCで確認するとなにも保存されていないという事態になった.
結局のところ, 原因がわかった.
以下の方法で, たぶん, 再現できる.
- パーティションを切らずにUSBメモリ全体をフォーマット
# mkfs.vfat /dev/sdg
- パーティションテーブルを作って, パーティションを切る
fdisk /dev/sdg
で, 以下のようなパーティションテーブルを作る.
# fdisk -l /dev/sdg
Disk /dev/sdg: 65 MB, 65536000 bytes, 128000 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 label type: dos
Disk identifier: 0x13e15d3c
Device Boot Start End Blocks Id System
/dev/sdg1 2048 127999 62976 b W95 FAT32
- パーティション1をフォーマット
# mkfs.vfat /dev/sdg1
- MF8350Cdnでスキャンする.
上記のような操作をすると,
sdg1 ではなく, sdg にファイルシステムがあると勘違いして, スキャンデータをsdgに書き込むらしい.
パーティションテーブルを読まずに, FATのテーブルのマジック「EB xx 90」を探しているだけなのだろう.
以下の方法で, 正しく, sdg1 にスキャンデータを書き込むようになった.
- USBメモリの前の方にゼロを書き込む
# dd if=/dev/zero of=/dev/sdg bs=32768 count=512
- パーティションテーブルを切る
# fdisk /dev/sdg
- フォーマットする
# mkfs.vfat /dev/sdg1
なお, photorec を使うと, sdg に書き込まれていたファイルを取り出すことができた.
# dd if=/dev/sdg >/tmp/b.img
$ photorec /tmp/b.img
- PhotoRec の中で, 以下のように
Whole disk
を指定する.
Disk /tmp/b.img - 65 MB / 62 MiB (RO)
Partition Start End Size in sectors
> Unknown 0 0 1 1015 2 26 128000 [Whole disk]
P FAT16 0 0 1 1015 2 26 128000 [NO NAME]
このプリンタ以外に, オシロスコープでも同様の現象が起こっていた気がするので, 多くの組み込みシステムで同様の処理が行われているのだろう.
0 件のコメント:
コメントを投稿