はじめに
撮影が終わって、意気揚々と事務所でSDカードをパソコンに差し込んだ時...
「セットしたディスクは、このコンピュータで読み取れないディスクでした。」...って何?
カメラではきちんと見れたのになぁ...とSDカードを差し込むとカメラでもフォーマットするように指示が...
そして「終わった...」と落胆する。
そんな経験はございませんか?
最近、ドローンやカメラでの撮影、RaspberryPIを使ったIoTシステムの構築などmicroSDカードを多用するようになったことから、壊れたカードのデータを取り出す作業が時々発生するので、その手順をまとめてみます。
今回はビデオカメラで使用したSDカードからのデータサルベージです。
認識しないSDカードのデータを丸ごとコピー
認識できないカードは何か壊れているので、そのまま使用するのではなく、データを物理データで丸ごと取り出します。
以下のコマンドを実行し、対象のSDカードのデバイスを探します。
ls /dev/disk*
/dev/disk0 /dev/disk0s2 /dev/disk1s1 /dev/disk1s3 /dev/disk2 /dev/disk3 /dev/disk4s1
/dev/disk0s1 /dev/disk1 /dev/disk1s2 /dev/disk1s4 /dev/disk2s1 /dev/disk4
ここでは、disk3が対象のSDカードだったことから、以降disk3をサンプルとして使用します。
以下のコマンドでイメージファイルを作成します。
sudo dd if=/dev/disk3 of=sd.img bs=1m
終了したら壊れたSDカードを取り外します。
未使用のSDカードにデータを復元
先ほど取り出したデータを未使用のSDカードに入れ直します。
新しいSDカードを接続してみると、これもまたdisk3として認識されました。
もともと作成されていたパーティションがUNTITLEDとしてマウントされたので、マウントを解除します。
sudo umount -fv /Volumes/UNTITLED
続けて、以下のコマンドを実行してイメージを書き込みます。
sudo dd if=sd.img of=/dev/disk3 bs=1m
ファイルの取り出し
TestDiskというオープンソースソフトウェアを利用します。
まず、以下のURLにてTestDiskをダウンロードします。
解凍し、photorecを実行
tar -xvjf testdisk-7.0.mac_intel.tar.bz2
cd testdisk-7.0
./photorec
後はphotorecの指示に従ってサルベージファイルの出力先を指定し、ファイルのサルベージを実行。
指定したフォルダにサルベージできたファイルが保存されていきます。
以下のURLもあわせてご参照頂くと参考になります。
サルベージしたファイルの結合
今回の症例では、xxx.mp4とxxx_mdat.movというファイルが見つかったが、普通にカメラで撮影したデータにはmovファイルは含まれていないことから、一つのファイルが二つに分割されているのかなと想像。
mp4ファイルは全て524KBで、movファイルは数100MBから数GBあることから、mp4はヘッダー情報でmovが動画の情報ではないかと予測。
mp4とmovは元のものとは異なるファイル名になっていることから、日付順に並べ替えた状態でmp4とmovを一つのペアと仮定し、以下のようにファイル名の先頭に「a1」や「a2」などを付与。
mv xxx.mp4 a1_xxx.mp4
mv xxx_mdat.mov a2_xxx_mdat.mov
ファイル名を変更後、catコマンドでファイルを結合。
cat a* > ~/a.mp4
I've got it!
ただし、いくつかペアが成立しないmp4ファイルがあり、これはもしかするとサルベージできなかったものかもしれない...でも全滅は免れた!!
おわりに
大変ニッチな作業手順ですが、SDカードが壊れて読み込めなくなって、復旧ソフトを使ってみたけどmp4とmovが見つかり、取り出したファイルが読み込めなかったという事象に心当たりのある人にとっては大変貴重なお話のはず!
- SDカードの読み込みに3時間
- SDカードの書き込みに3時間
- 市販のソフトを購入してそれっぽくファイルを取り出すのに2時間
- 取り出したファイルを調査し、がっかりするまでに1時間
- mp4の仕様を調べて、movファイルをバイナリーエディタで開いて調査するのに2時間
- バイナリを調査して、mp4とmovを結合すれば良いことに気が付いてからデータを取り出すのに2時間
- 取り出したファイルの結合作業に1時間
合計14時間の大仕事だったけど、今なら最短で3時間あればできそうです!
僕が失った貴重な時間をこの記事を読んだ方が節約され、有意義に活用できることを心から願っています。