ファイルの復元(Linux)

後輩君からのネタ提供、バックアップ用のシェルを作っててできたと思ってテスト兼開発機で動かしたら、SEさんがテスト運用中だったのに、DBのデータフォルダ以下をサクっと消しちゃったらしい。(ちなみに最近のDBのバックアップも無いらしい)

シェルは確認しなかったけど、たぶん、

cd hoge
rm -r ./
cp -r /hoge2 ./

とかやって、本番のパスにしたら、hoge ディレクトリがなくてcd できてないのに、rmで消えちゃったんだろっ(-д☆)キラッ
自分もやったことあるからすぐわかったわ、わっはっは!
で、なんとかならんけ?とかって話で、消したものはムリでない?と言ってたのですが、復旧できてしまったので、メモ

ファイルを消してしまっても、「プロセスが終了していない場合」は/proc内にファイルディスクリプタの情報があるんで、そこからcpとかで取り出せば復旧可能らしい。

lsof | grep deleted | grep hoge
user01     1683  user01   10u      REG        8,1 4194312192     835691 /hoge.dat (deleted)
user01     1683  user01   11u      REG        8,1  786440192     835652 /hoge.dat2 (deleted)
のとき、
cp /proc/1683/fd/10 /tmp/hoge.dat
cp /proc/1683/fd/11 /tmp/hoge.dat2

のような感じ
cp /proc/プロセスID/fd/ファイル記述子 復元先

今回は、あわててサービスや、サーバの再起動をしなかったので、ファイルが残っていました。ファイル復旧後もデータベース的には壊れている状態なので、今度はDB屋さんが出てきてなんかコマンドいくつかいれて起動後、ダンプとれたのだけど、結局おかしくて、最終的にはシステムのバックアップからDBを戻して古いデータになったところに、なんとかとれたダンプで復旧できたみたいです。

<参考URL>
削除したファイルをlsofで復元する(DevIT)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA