【Ubuntu】ファイルを消し飛ばして復旧を諦めた
忘れないために書き残す。
環境
大失敗
C++でちょっとしたプロジェクトを作成しており、ヘッダファイルの依存関係を記述しようとMakefileをいじっていた。
作成された.dファイルを削除しようとmake clean
を実行したところ、大量のダイアログが表示された。
やばい!とすぐさま<C-x>で止めたが時すでに遅く、カレントディレクトリのファイルはすべて消えてしまっていた。
それどころか、ホームディレクトリ以下のデータが全て消え、Ubuntuの「さぁ始めましょう」みたいな画面が出てきた。
これは何か重要なファイルを消してしまったらしい、と思い復旧方法をググろうとしたら、Firefoxのブックマークも全て消えている。 やってしまった。
extundelete
による復旧
Windowsのような「復元ポイント」機能はないが、調べてみたところextundelete
というコマンドでext4フォーマットのファイルを復旧できるらしい。
さっそく導入し、ファイルを消してしまったあたりの時間(2018/12/22 1:00~1:30、epoch time)を指定して実行してみたが、ジャーナルを取得しているところでSegmentation faultが起きて失敗してしまった。
$ sudo apt install extundelete $ sudo extundelete --after 1545408000 --before 1545409884 --restore-all /dev/sda2 ... Loading journal descriptions ... Segmentation fault.
インストールUSBからの実行
アンマウントしなかったことが原因かもと思い、インストールUSBのUbuntuからextundelete
を実行してみることにした。
aptで導入できなかったため、ソースコードからビルドしてみる。
自分はビルド時次の2点で詰まったが、バージョンによって色々変わるかもしれない。
- e2fslibの導入:
sudo apt install e2fslibs-dev
- パッチ適用:
$ patch -p1 < extundelete-0.2.4-e2fsprogs-patch.txt
Index of /gentoo-portage/sys-fs/extundelete/files/
$ wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.0/extundelete-0.2.0.tar.bz2 $ tar -jxvf extundelete-0.2.4.tar.bz2 $ cd extundelete-0.2.4 $ ./configure ... $ make .... $ sudo make install ...
さて、extundelete
を実行してみたが、同じようにSegmentation faultで止まってしまった。
$ sudo extundelete --after $(date +%s -d "2018-12-22 01:00") --before $(date +%s -d "2018-12-22 01:30”) --restore-all /dev/sda2 ... Loading journal descriptions ... Segmentation fault.
依存パッケージのビルド、諦め
依存パッケージe2fsprogsについて、1.42.12以降のバージョンでは互換性がなくSegfaultを起こしてしまうらしい。
aptでバージョンを変更できなかったためソースコードからビルドしようとしたが、エラーが出てビルドに失敗した(ヘッダファイルが見つからないエラーだったと思う)。
対策を探してもわからず、ここで心が折れて、復旧を諦めてしまった。
消えてしまったもの
- 作りかけのプログラム。C++で簡単なニューラルネットを作っていたが、Githubにpushしていなかったここ3週間ほどのcommitが消えてしまった。これが一番痛い。
- 色々な設定。ブラウザのブックマーク、.vimrc、.bashrcあたりはつらい。
- PDF資料。技術書典で買った本、再ダウンロードできるだろうか…
反省点
- 安易な
rm -rf
の実行。Makefileにこれを指定していたのはまずかった。 - パーティション分割の軽視。意義をよくわかっていなかった。
- バックアップの軽視。これが一番良くなかった。
- 英語能力の不足。技術情報をそこまで追えなかった。探せば方法はあったかもしれない。
教訓
- 重要なファイルは定期的にバックアップをとる。
- ストレージまわりの知識は持っておくべき。
- 英語を読め。
...
これを書いている間にも「不完全な言語サポート」の警告が出てきているので、色々と設定をやり直すことにします。
VSCodeなどアプリケーションはけっこう残っているので、そこまで苦痛ではない、かも…