趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • SDカードから消えた写真を復活

    投稿日 2014年 5月 5日 コメントはありません

    うちの嫁のAndroid機で撮影してあったMicroSDカード上の写真がすべて消失するという事件が起きました。
    LINEでありえない人(この人がLINEなんぞやるわけない・・・実際にアリバイの証人まで居たりする)からメッセージが届いた後、しばらくして消失に気づいた、という状況です。どうも、かなりおかしい状況のような気がします。なんとなくバックドアとかルートキットの匂いがします。LINE自体が問題なのか、LINEを狙ったアプリをインストールしてしまっているのかはわかりませんが。

    <追伸>
    FATフォーマットなので、FATテーブルの書き込みに失敗しただけなのかもしれません。ただ、書き込み失敗でSDカード丸ごと初期化というのも不思議な気がしますが・・・。

    それはさておき、とにかく画像ファイルの救出を試みましたので、その記録です。

    1.イメージファイルの吸い出し

    なにはともあれ、現在の状態を保存します。この手の作業ではオリジナルには手を加えないのが鉄則です。なので、SystemRescueCDで起動したPCにて、

    % mkdir /media/HDD
    % mount -t ext4 /dev/sdx1 /media/HDD
    % dd if=/dev/sdy of=/media/HDD/SDCARD.IMG

    として、ディスクイメージを吸い出します。ここで、/dev/sdxはイメージファイル保存用のHDDのUSBハードディスク、/dev/sdyが救出対象となるSDカードです。吸い出したらSDカードは大切に保管し、さらに、

    % cp SDCARD.IMG Copy-Of-SDCARD.IMG

    として、イメージファイルのコピーを作成します。このコピーに対して色々トライしていきます。
    (実際には、さらにこのコピーをLinuxMint13マシンのローカルHDDにコピーしておきます)

    2.ファイルの観察

    % mkdir /media/FAT
    % mount -t vfat Copy-Of-SDCARD.IMG /media/FAT

    として、/media/FATにイメージファイルをマウントして観察します。どうやら、SDカード上のファイルが全消去されたか、論理フォーマットされてしまっているかのようにファイルが何もなくなっていました。SDカードはFATフォーマットなのでアクセス権が及ばないはず。SDカードへのアクセスを許可したアプリからは、おそらくどんなアプリからも全消去とか不正な参照・書き換えなどが可能なのではないかという気がします。

    3.ツールのインストール

    途中、試行錯誤と紆余曲折があったのですが、ここでは端折って、最終的な救出方法のみ記載します。ツールとしてはPhotoRecとTestDiskを使用し、環境としてはLinuxMint13 x64で行いました。

    まず、SynapticでTestDiskを検索してインストールします。さらに、PhotoRecをこちらからダウンロードしました。PhotoRecにもTestDiskが同梱されているようですが、先にTestDiskはインストールしてしまっています。(なので、実際どちらが動作したかわかりません)

    PhotoRecは展開するとスタティックリンクされた実行ファイルが出てくるので、このディレクトリを丸ごと ~/TEMPに移動し、イメージファイル(Copy-Of-SDCARD.IMG)も~/TEMPの下にコピーします。さらに、救出したファイルを保存するディレクトリを作成しておきます。

    4.ファイル救出実行

    カレントディレクトリを ~/TEMPに移動してから、

    $ ./testdisk-7.0-WIP/photorec_static Copy-Of-SDCARD.IMG

    として起動します。下の方に「rootじゃないといくつかのディスクが見えないよ」という表示が出ますが、イメージファイルに対する操作なので問題ありません。
    そのまま「Proceed」を選択したまま「Enter」を押します。

    次にどのパーティションを対象にするか聞いてきますが、そのままで問題ありません。「Search」を選択したまま「Enter」を押します。

    次にファイルシステムを聞いてきますが、FATがすでに選択されているのでそのままで問題ありません。「Other」を選択したまま「Enter」を押します。

    次に消去されたファイルのみをサーチするのかどうか聞いてきますが、今回はSDカード内のファイルをすべてサルベージしたいので、「Whole」を選択して「Enter」を押します。

    次にサルベージしたファイルの保存先を聞いてくるので、適当な箇所を選んで「c」を押します。

    するとサルベージが始まります。(適当なサイズ毎にサブディレクトリが切られるようです)

    しばらくすると終了します。今回は4500個のファイルが救出されました。

    5.ファイル名の修正

    出来上がったファイルはファイル名がグチャグチャになっています。幸い、EXIF情報は生きている(というか生きてないとJPEGファイルとして成り立ちませんが・・・)ようですので、EXIFに基づいて撮影日時に基づいたファイル名に修正します。
    ファイル名が修正できれば、写真のグループ分けも容易になるはずです。

    各サブディレクトリにて、

    $ jhead -n%Y%m%d-%H%M%S f*.jpg

    として、ファイル名を修正していきます。fで始まるファイル名は大きな写真のようですので、まず修正されたファイルを集めます。その後、各サブディレクトリにて改めて

    $ jhead -n%y%m%d-%H%M%S *.jpg

    として残りのファイルのファイル名を修正してファイルを回収します。

    完全にはファイル名が修正できないので、適当に手作業を加えながら、画像回収を完了させました。


    コメントをどうぞ(日本語のみ/Only in Japanese)

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)