旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【Linux】rm -rf 通称バルスの恐怖からファイルを復元

よくあるやつです。 さすがにrm -rf / とかっていう世界が崩壊するような協力魔法を撃ってしまうとなんともなりませんが、ディレクトリとかファイルであれば"ある程度"復元が可能なようです。

とは言え、ドキドキですよね。

ということで、テスト用のファイルを作って実験してみます。

# touch /tmp/test.txt

touchで適当にファイルを作成して消します。

rm -rf /tmp/test.txt

さてWindowsとかMacとかであれば変なことしなければゴミ箱に入っているわけですが。 ゴミ箱ないんですよね。 ってことでこんなものをインストールします。 というかmakeもinstallもさくっとしちゃいましょう!

extundelete

その前にもしext2fsライブラリをインストールしていない場合は makeした時にエラーになる可能性があるので先にインストールしちゃいましょう。

# yum -y install e2fsprogs-devel

 

# cd /tmp/
# curl -L http://sourceforge.net/projects/extundelete/files/extundelete/0.2.4/extundelete-0.2.4.tar.bz2/download | tar xj
# cd extundelete-0.2.4/
# ./configure --prefix=/tmp && make && make install

さてこれでextundeleteが使えるようになったんだけど restoreにあたってすべてを指定すると今までのものを。。。となるので 消してしまったファイルの時間を指定し、それ以降のものを復元させる。 そのために、一度消した時間を取得する。

HISTTIMEFORMAT="%F %T " history

例えば自分の場合だと

  417  2014-12-01 07:48:39 cd /tmp/
  418  2014-12-01 07:48:39 ls
  419  2014-12-01 07:48:40 touch /tmp/test.txt
  419  2014-12-01 07:48:41 rm -rf /tmp/test.txt ←ここで消している

なので"2014-12-01 07:48:41"以降のデータ復元となる。 大体やっちまったってなった場合はすぐ調べて対応すると思うからhistoryが埋まるなんてことはすぐにはないと思う。 そう信じたい。

これを復元する。

# /tmp/bin/extundelete --restore-all --after $(date +%s -d '2014-12-01 07:48:41') /dev/root

そうすると

WARNING: Extended attributes are not restored.
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
The partition should be unmounted to undelete any files without further data loss.
If the partition is not currently mounted, this message indicates
it was improperly unmounted, and you should run fsck before continuing.
If you decide to continue, extundelete may overwrite some of the deleted
files and make recovering those files impossible. You should unmount the
file system and check it with fsck before using extundelete.
Would you like to continue? (y/n)

となるので"y"を選択。

復元が開始され、コマンドを実行したディレクトリにRECOVERED_FILESというディレクトリができています。 このディレクトリの中にはfile.xxxxxxというものが入っています。 今回は削除してすぐの状態だったので、1つだけありました。 この中身が削除したファイルになります。 vim等で確認してみるといいかと。

基本はrm -rfとかする時は確認が必要ですね。 実は前に自前のMacBookAirで寝ぼけてrm -rf /とかやっちゃって動かなくなって再インストールしたことがあり その時、もうやるまいとrm.shみたいなものを作って、2度確認するまで消さないみたいなものをalias貼ったのが懐かしいです。

こういうツールは便利ですが、その手前で防げるような何かを考えるべきですね。