場末のソフトウェアエンジニアのブログ

雑多な記事ばっかりのブログ

朝からつまらんことをしてしまった件

おはようございます。Happinessfieldです。今日は朝からてんやわんやでした。なぜかというと、昨日書いたはずのUART RXモジュールが微塵もなかったのです。このときショックを隠し切れませんでした。

事の経緯

おそらくgitを使っているとき、UART RXモジュールをgit addし忘れてコミットしてしまったのでしょう。 しかし、それだけなら再度git addすればいいだけの話です。 ここで私は重大なミスを犯してしまいました。git addする前にチェックアウトしてしまったのです。 そのため、編集済みのファイルが消えてしまったわけですね。こわいこわい。

さてどうする?

まずはどうしようか考えました。 ファイルがrmされているのであれば、ファイルシステム上にファイルの実体が残っている可能性が高いです。 ファイルの削除というのは、おそらくテーブルの参照情報を削除しているにすぎませんので。 ということで、ファイルの復元ソフトを使うことにしました。PhotoRecという有名なやつです。

やったこと

PhotoRecはCUIのアプリなのですが、インタラクティブに操作ができます。 そのため、非常に楽でした。 ものの30分程度で対象ディレクトリに存在していたと思しきファイルが復元されてました。

復元すると大量のディレクトリが生成されるので、いちいち1つずつ見ていてはキリがありません。 そこで、てきとーにスクリプトを書いて、てきとーに候補となるファイルを絞り込んでいきました。

find . -type f | xargs grep "module UART_Rx" > result.txt
cat result.txt | sed -e "s/\(.*\): .*/\1/g" > candidates.txt
for FILE in `cat candidates.txt`
do
    echo $FILE >> value.txt
    cat $FILE >> value.txt
    echo "" >> value.txt
done

うろ覚えなのでなんともですが、こんな感じで書きました。 value.txtからUART_Rxをインスタンシエーションしているファイルを特定し、あとはそのファイルをチェックし、復元するだけ! 非常に簡単です。

みなさんも困ったときはぜひ試してみてくださいね。そもそもそういう事態にならないようにするのが大事ですが…