気が向いたら書くやつ

気が向いたら何か書きます

【Ubuntu】ファイルを消し飛ばして復旧を諦めた

忘れないために書き残す。

環境

大失敗

C++でちょっとしたプロジェクトを作成しており、ヘッダファイルの依存関係を記述しようとMakefileをいじっていた。

作成された.dファイルを削除しようとmake cleanを実行したところ、大量のダイアログが表示された。

やばい!とすぐさま<C-x>で止めたが時すでに遅く、カレントディレクトリのファイルはすべて消えてしまっていた。

それどころか、ホームディレクトリ以下のデータが全て消え、Ubuntuの「さぁ始めましょう」みたいな画面が出てきた。

これは何か重要なファイルを消してしまったらしい、と思い復旧方法をググろうとしたら、Firefoxのブックマークも全て消えている。 やってしまった。

extundeleteによる復旧

Windowsのような「復元ポイント」機能はないが、調べてみたところextundeleteというコマンドでext4フォーマットのファイルを復旧できるらしい。

extundeleteによる削除済みファイルの復元方法

ameblo.jp

qiita.com

さっそく導入し、ファイルを消してしまったあたりの時間(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点で詰まったが、バージョンによって色々変わるかもしれない。

  1. e2fslibの導入:sudo apt install e2fslibs-dev
  2. パッチ適用:$ 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を起こしてしまうらしい。

bugs.archlinux.org

aptでバージョンを変更できなかったためソースコードからビルドしようとしたが、エラーが出てビルドに失敗した(ヘッダファイルが見つからないエラーだったと思う)。

対策を探してもわからず、ここで心が折れて、復旧を諦めてしまった。

消えてしまったもの

  • 作りかけのプログラム。C++で簡単なニューラルネットを作っていたが、Githubにpushしていなかったここ3週間ほどのcommitが消えてしまった。これが一番痛い。
  • 色々な設定。ブラウザのブックマーク、.vimrc、.bashrcあたりはつらい。
  • PDF資料。技術書典で買った本、再ダウンロードできるだろうか…

反省点

  • 安易なrm -rfの実行。Makefileにこれを指定していたのはまずかった。
  • パーティション分割の軽視。意義をよくわかっていなかった。
  • バックアップの軽視。これが一番良くなかった。
  • 英語能力の不足。技術情報をそこまで追えなかった。探せば方法はあったかもしれない。

教訓

  • 重要なファイルは定期的にバックアップをとる。
  • ストレージまわりの知識は持っておくべき。
  • 英語を読め。

...

これを書いている間にも「不完全な言語サポート」の警告が出てきているので、色々と設定をやり直すことにします。

VSCodeなどアプリケーションはけっこう残っているので、そこまで苦痛ではない、かも…