3月の北海道旅行中、数百枚ほど収めた一眼レフカメラの SD カードの写真データが、釧路のホテルにて突如消失しました。正確に言えばフラッシュメモリから完全に消失したわけではないのですが、ファイルシステムからデータが読み込めない状態になってしまいました。なんとか復元できたので、その経緯を書き残しておきます。

スクリーンショット 2023-05-07 15.45.20

環境

  • PC : MacBook Air 2020 (OS: macOS 12)
  • SD card : HIDISC SDHC 32GB (HDSDH32GCL10UIJP3)
  • カメラ:Canon EOS Kiss X3

経緯

順を追って説明すると、

  1. データのコピー中に PC と SD カードとを接続していた SD カードリーダーが、ものの弾みで抜けてしまった。
  2. Mac から一度 SD カードを抜いて再度差し込んだが、SD カードのデバイス自体を Mac が認識しなくなった(ディスクユーティリティにも表示されず)。
  3. 壊れた SD カードを一眼レフカメラに差し込んだ。写真は全部消えていた。
  4. もう一度 Mac に差し込んだ。おそらく一眼レフカメラによって写真保存用のディレクトリが作成されたのか、一応デバイスとしては認識するようになっていたが、やはり写真データはすべて消えていた。

といった形で、一度デバイス自体認識しなくなった→カメラに差し込んだ→デバイス自体は認識するようになったが、写真は消えていた、といった状況です。

今思えば、3. で一眼レフカメラに SD カードを差し込んでしまったのはマズかったかもしれません。今回は運良く復元できましたが、仮にここで写真データがあるセクタが上書きされてしまうと復元すらできなくなる可能性が考えられます。

今回使うリカバリソフト

「SDカード 写真 復元」とかで検索すると、Ea○eUS やら Wond○rshare やらの宣伝用記事がヒットしますが、これらは高いうえに無料版では復元できるサイズなどに制限があるため除外。

今回はオープンソースな無料のリカバリソフトである「PhotoRec」を採用しました。公式ウィキに掲載されている特徴をまとめるとこんな感じです。

  • 複数の OS に対応(Windows, MS-DOS, macOS, Linux)
  • コマンドラインで操作
  • ファイルシステムを無視(つまり、ファイルシステム自体が故障したり、フォーマットしてしまった場合でもバイナリデータさえ残っていれば復元可能)
  • Read-only アクセスで復元(デバイスが上書きされない)
  • オープンソース(GPLV v2+)

ファイルシステムを無視してバイナリデータを抽出するため、(ファイルシステムが管理している)ファイル名までは復元されません。復元した順にファイル名が自動で付与されます。そのぶん、ファイルシステムからはデータが消えているように見えていようが、データさえセクタ上に残っていれば復元できます。

手順

コマンドラインツールであるため、黒い画面が怖いという人にはとっつきにくいかもしれませんが、操作自体は簡単です。

今回は Mac での操作方法を載せていますが、入手方法以外は Windows や Linux でも同様のはずです。

1. PhotoRec の入手

PhotoRec は testdisk の付属ツールです。Mac の場合、 brew install testdisk でインストールできます。

この記事を執筆した時点では最新版は 7.1 が最新版ですが、ベータ版として 7.2 も出ています。こちらは公式ウィキのダウンロードページ から入手できます。

2. 復元先ディレクトリの用意

復元したファイルを置いておくためのディレクトリを用意します。今回は ~/photorec を復元先として用意しました。

% cd ~
% mkdir photorec

3. PhotoRec の実行

いよいよ PhotoRec でデータを復元していきます。

まずは 2. で作成した復元先に移動し、

% cd ~/photorec

sudo 権限で PhotoRec を起動します(sudo でないと PhotoRec がパーティションを取得できません)。

% sudo photorec

管理者パスワードが聞かれるので入力すると、このような画面が出現します。

スクリーンショット 2023-05-07 15.56.43

この /dev/disk4 やら /dev/rdisk1 やらが現在 Mac にあるデバイスです。今回復元したい SD カードは 32 GB ですから、サイズから /dev/disk4 であることが推測できますが、念の為ディスクユーティリティを確認すると

スクリーンショット 2023-05-07 15.57.12

disk4 で問題なさそうです。

[Proceed] が選択された状態で return キー(Enter キー)を押して次へ。

スクリーンショット 2023-05-07 16.00.23

次に、SD カードのフォーマット形式が聞かれます。ディスクユーティリティを見ると、

スクリーンショット 2023-05-07 16.00.21

今回の SD カードは FAT32 形式でフォーマットされていますので、Other を選択します。

スクリーンショット 2023-05-07 15.57.40

今度はどのパーティションを復元するかを聞いてきます。今回は1つしかないので、このまま [Search] が選択された状態で return キーを押します。

スクリーンショット 2023-05-07 15.58.48

今度は、どの領域を復元するかを聞いてきます。[Free] は(ファイルシステムから見て)何も配置されていない領域、[Whole] は全領域です。今回は [Free] を選択しました。

スクリーンショット 2023-05-07 16.00.34

最後に、どの場所にファイルを復元するかが聞かれます。今回は復元用のディレクトリで PhotoRec を実行しているので、「.」が選択された状態で C キーを押します。

スクリーンショット 2023-03-06 23.46.25

すると復元が始まります。webp、mov といったファイルが次々に復元されていく様を確認できます。

(記事執筆の都合上、途中でバージョンとか復元先のディレクトリが変わってますが気にしないでください)

復元完了

スクリーンショット 2023-03-07 6.00.15

Recovery completed. と表示されると復元完了です。寝ている間に復元してもらったので正確な所要時間はわかりませんが、数時間はかかると思っておいたほうが良いです。

スクリーンショット 2023-05-07 17.51.22

スクリーンショット 2023-05-07 17.51.30

復元先のディレクトリには、このようにいくつかのサブディレクトリに分かれて写真が保存されています。ファイル名はやはり PhotoRec が自動的に与えた名前になっており、時系列も少しバラバラになってしまいます。

ちなみにこれはカメラのメーカー特有の問題かもしれませんが、カメラで撮った写真が 160x120 サイズの小さい画像として復元されているものがあります。

t60406912

おそらくこれはサムネイル用に保存された画像で、データが消失していない限りは探せば元のサイズの写真が見つかるはずです。

f60406912

おわりに

ファイルシステムからアクセスできなくなっていた写真データを PhotoRec によって復元することができました。ファイルシステムに依らない復元のため名前は復元されない、時系列もバラバラといった欠点はありますが、故障後に下手にデータを上書きしたりしていない限りは高確率で復元してくれるのでおすすめです。

せっかく壊れた SD カードが手元にあるので、後日セクタチェック等もやってみたいと思っています。