Linuxでうっかりrm -rfしちゃったけど復活出来たよー\(^o^)/ – y-kawazの日記

サーバのファイル整理作業をしていたところ…、

間違えてrm -rfしてしまった!

ぎゃーバックアップもねー!

長いこと生きてたらこんな経験の1度や2度はありますよね?

えぇ、ついさっきやらかしちゃいましたwwオワタwww

速攻「rm 復活」とかでググッたねw、したらmcってプログラムのUndelete機能使えばよいって情報が出てくるが、どうやらこれext2じゃないと使えないっぽいぞ…、うちext4だ。

混乱。以下ターミナルのヒストリーより実況。

## こーいうときはまずあれだ、現場保存!## まずは今いるパーティションを確認# df -hTFilesystem    Type  サイズ  使用  残り 使用% マウント位置/dev/sdb2     ext4    193G  6.9G  176G   4% //dev/sdb1     ext3    194M   22M  163M  12% /boot/dev/sdb5     ext4    1.2T  752G  371G  67% /home  ←イマココtmpfs        tmpfs    999M     0  999M   0% /dev/shm## とりあえず読み込み専用にしておこう!# mount -o remount,ro /dev/sdb5# touch /home/hogetouch: cannot touch `/home/hoge': 読み込み専用ファイルシステムです## うし、ちゃんとリードオンリーになったな## あと何だ?とりあえず時間メモ!# date2011年  1月 23日 日曜日 18:15:22 JST## ふぅ、さてひとまずこれでいいだろう、あとはext4の復元方法をググりまくるぞー…。## どうやら extundelete ってのがext3/ext4対応の復活プログラムらしい。## 藁にもすがる思いでインストール。とりあえず/tmpでいいや。# cd /tmp# mkdir a# cd a# wget "http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.0/extundelete-0.2.0.tar.bz2?r=http%3A%2F%2Fextundelete.sourceforge.net%2F&ts=1295777113&use_mirror=jaist"# lsextundelete-0.2.0.tar.bz2# tar xfj extundelete-0.2.0.tar.bz2# extundelete-0.2.0# ./configure --prefix=/tmp/a && make && make install## ビルド待ち…、うしっなんか出来たっぽい!## んー何々…?# /tmp/a/bin/extundelete No action specified; implying --superblock.Usage: /tmp/a/bin/extundelete [options] [--] device-fileOptions:  --version, -[vV]       Print version and exit successfully.  --help,                Print this help and exit successfully.  --superblock           Print contents of superblock in addition to the rest.                         If no action is specified then this option is implied.  --journal              Show content of journal.  --after dtime          Only process entries deleted on or after 'dtime'.  --before dtime         Only process entries deleted before 'dtime'.Actions:  --inode ino            Show info on inode 'ino'.  --block blk            Show info on block 'blk'.  --restore-inode ino[,ino,...]                         Restore the file(s) with known inode number 'ino'.                         The restored files are created in ./RESTORED_FILES                         with their inode number as extension (ie, file.12345).  --restore-file 'path'  Will restore file 'path'. 'path' is relative to root                         of the partition and does not start with a '/' (it                         must be one of the paths returned by --dump-names).                         The restored file is created in the current                         directory as 'RECOVERED_FILES/path'.  --restore-files 'path' Will restore files which are listed in the file 'path'.                         Each filename should be in the same format as an option                         to --restore-file, and there should be one per line.  --restore-all          Attempts to restore everything.  -j journal             Reads an external journal from the named file.  -b blocknumber         Uses the backup superblock at blocknumber when opening                         the file system.  -B blocksize           Uses blocksize as the block size when opening the file                         system.  The number should be the number of bytes.Error parsing command-line options.## ふむ、どうやらパーティション&時間指定で復元できるっぽいな?## dtime って何だろ…、helpだと分からんかったのでサイトのマニュアル読む…## エポック秒で指定すればいいんだな。## 取ってて良かった時間メモ、18:15ってことは18:00以降くらいでいいだろ。# date -d "18:00"2011年  1月 23日 日曜日 18:00:00 JST## うむ、じゃエポックは…、と# date -d "18:00" +%s1295773200## うし、じゃこんな感じかな?# /tmp/a/bin/extundelete --after 1295773200 --restore-all /dev/sdb5Only show and process deleted entries if they are deleted on or after 1295773200 and before 2147483647.WARNING: Extended attributes are not restored.Loading filesystem metadata ... 9607 groups loaded.Loading journal descriptors ... 28902 descriptors loaded.Writing output to directory RECOVERED_FILES/Searching for recoverable inodes in directory / ... 327 recoverable inodes found.Looking through the directory structure for deleted files ... Restored inode 3373 to file RECOVERED_FILES/share/家中共有/読み聞かせ/こころ441p.WAVRestored inode 3374 to file RECOVERED_FILES/share/家中共有/読み聞かせ/お侍をだましたキツネ.WAVRestored inode 3376 to file RECOVERED_FILES/share/家中共有/読み聞かせ/金色の馬.WAVRestored inode 3377 to file RECOVERED_FILES/share/家中共有/読み聞かせ/梨の実 小山内薫.WAVRestored inode 3378 to file RECOVERED_FILES/share/家中共有/読み聞かせ/カメとイノシシ.WAVRestored inode 3379 to file RECOVERED_FILES/share/家中共有/読み聞かせ/こころ474P.WAVRestored inode 3380 to file RECOVERED_FILES/share/家中共有/読み聞かせ/長者になりそこねた欲張り.WAVRestored inode 3381 to file RECOVERED_FILES/share/家中共有/読み聞かせ/こころ515P.WAVRestored inode 3382 to file RECOVERED_FILES/share/家中共有/読み聞かせ/大きな玉のサルと、ネコと、犬と、ニワトリ.WAVRestored inode 3385 to file RECOVERED_FILES/share/家中共有/読み聞かせ/トカトントン 太宰治.WAVRestored inode 3384 to file RECOVERED_FILES/share/家中共有/読み聞かせ/トビの鳴き声.WAVRestored inode 3396 to file RECOVERED_FILES/share/家中共有/読み聞かせ/狢 芥川龍之介.WAVRestored inode 3399 to file RECOVERED_FILES/share/家中共有/読み聞かせ/車 宮沢賢治.WAVRestored inode 3400 to file RECOVERED_FILES/share/家中共有/読み聞かせ/カエルの泳ぎ自慢.WAVRestored inode 3409 to file RECOVERED_FILES/share/家中共有/読み聞かせ/栗拾い.WAV:

おぉおおおおお!?ls、find、内容チェック…、やったー復活出来てるっぽい!

というわけでコマンド実行したカレントディレクトリに RECOVERED_FILES/ ってディレクトリが出来てその中に、なんとファイル名やディレクトリ構造までそのままに復元できました!

ファイルの内容についてはお気になさらずw数年前から何となく毎日寝る前に1話ずつ、昔話とか青空文庫とかを朗読してiPhoneで録音して貯めてたデータが今回の事故対象。絵も文章もかけないし歌とかも微妙なのであんまし見たことないコンテンツってことで朗読はじめてみたんだが。蓄積で多分数百時間は溜まってたから駄ファイルだとしても消えるとショックだったので復活できて良かった(^-^)

ext4のファイル復活に付いてぐぐってたら、extundeleteの日本語情報無いっぽかったので、またやりそうな自分の為にもメモメモ。

ふぅ、焦ったー(^^;

追記)ブコメで何件か、rm -rf / とかやっちゃった場合は?てあるけど、多分そういう場合は別OS(別PCやKnoppix起動)からextundeleteすれば良いと思うよ。

追記2)この記事についての沢山のブクマとツイートとリファラ先とか見てたら、こうしてブクマが伸びてるたった1日か2日の間にも既に何人かやらかした人がいて復旧を試みてる人がいるようだw内容見てるとやっぱ成功談と失敗談どっちもあるっぽくて参考になる、勝率7~8割くらい?僕の場合はやらかしてすぐに読み込み専用にしたのが効いたのかもしれんが、とりあえず運が良い方だったっぽいね、ほぼ全て取り戻した。ちなみにファイル名が戻せない奴は files.{inode番号} みたいな名前でディレクトリ直下にズラーッと並ぶっぽい。実は僕も幾つかのファイルはそうなってました。中身見たらちゃんとしたデータだったのでリネームで済んだけど。

しかし実践談の中には1年以上前にやらかしたHDDが失意のまま取ってあって、今回のを試みたら復旧できたって人も居るようで、すげーっ!て思ったよ。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中