2015-01-19

MF8350Cdn でスキャンしてもファイルがみつからない

MF8350CdnというCanonの複合機でUSBメモリにスキャンすると, 「SCAN0005.pdfに保存しました」といったメッセージが出るのに, PCで確認するとなにも保存されていないという事態になった. 結局のところ, 原因がわかった.

以下の方法で, たぶん, 再現できる.

  1. パーティションを切らずにUSBメモリ全体をフォーマット
    # mkfs.vfat /dev/sdg
  2. パーティションテーブルを作って, パーティションを切る 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
    
    
  3. パーティション1をフォーマット
    # mkfs.vfat /dev/sdg1
  4. MF8350Cdnでスキャンする.
上記のような操作をすると, sdg1 ではなく, sdg にファイルシステムがあると勘違いして, スキャンデータをsdgに書き込むらしい. パーティションテーブルを読まずに, FATのテーブルのマジック「EB xx 90」を探しているだけなのだろう.

以下の方法で, 正しく, sdg1 にスキャンデータを書き込むようになった.

  1. USBメモリの前の方にゼロを書き込む
    # dd if=/dev/zero of=/dev/sdg bs=32768 count=512
  2. パーティションテーブルを切る
    # fdisk /dev/sdg
  3. フォーマットする
    # mkfs.vfat /dev/sdg1

なお, photorec を使うと, sdg に書き込まれていたファイルを取り出すことができた.

  1. # dd if=/dev/sdg >/tmp/b.img
  2. $ photorec /tmp/b.img
  3. 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 件のコメント:

コメントを投稿