【Linux】削除したファイルを簡単に復元できるツールextundelete

2019年8月1日

間違ってrm -fr *などで意図しないディレクトリやファイルを削除してしまって困ったことはありませんか。

そんな時に簡単にファイルを復元してくれるツールextundeleteを使った復元手順の紹介です。

更新履歴

  • 2021/8/23
    • コード部分にシンタックスハイライターを適用

復元手順

ファイルシステムの確認

まずは削除したファイルがあったパーティションのファイルシステムとマウント先を確認しましょう。

dfコマンド等を使えば簡単に確認できます。

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             10M     0   10M   0% /dev
tmpfs           404M  5.6M  398M   2% /run
/dev/sda2       457G  130G  304G  30% /
tmpfs          1008M     0 1008M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1008M     0 1008M   0% /sys/fs/cgroup
/dev/sda1        94M   47M   42M  53% /boot
tmpfs           202M     0  202M   0% /run/user/1000

※自宅のサーバでdfコマンドを実行した例

※hオプションは容量などの数字を人間の読みやすい形式で表示してくれるオプション

Read Only化

削除ファイルがあった領域を破壊されないようにします。

対象を読み取り専用にして再マウントしましょう。

# root権限で実行
mount -o remount,ro /dev/xxxx

※必須の作業ではないですが、書き込みが発生して時間と共に復元できる確率が下がるのを止めることができます。

extundeleteのインストール

※来る時のために平時に予めインストールしておくことをオススメします。

パッケージのインストール

Debianならaptでインストールできます。

# root権限で実行
apt install extundelete

CentOSやAmazonLinuxのyumパッケージがあるかどうかは確認していません。

パッケージが無い場合はソースをコンパイルして入れて下さい。

※パッケージのインストール先がRead Only化した場所なら、当然インストールできません。

※Read Only化の前にインストールしてもいいですが、書き込みが発生すると当然復元確率は下がります。

※こういう事態になる前にextundeleteを入れておくことをオススメします。

ソースから手動インストール

まずはコンパイル用にファイルシステム関連ライブラリをインストールします。

(※パッケージのインストール時は先ほどのRead Only化に注意点)

# root権限で実行
# パッケージ名は要確認
apt install e2fslibs-dev

# yum系なら以下
# パッケージ名は要確認
yum -y e2fsprogs-devel

次にソースをダウンロードしてコンパイルしてインストールします。

wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar jxf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure --prefix=/tmp/hoge
make

# root権限で実行
make install

–prefix=/tmp/hogeはインストール先の指定です。

この場合/tmp/hoge/bin/extundeleteに実行ファイルがあります。

ファイルの復元

以下のように指定してファイルを復元します。

# root権限で実行
# pathは適宜読み替え
/tmp/hoge/bin/extundelete --restore-all --after $(date +%s -d '1 hour ago') /dev/xxxx

カレントディレクトリのRECOVERED_FILESというディレクトリに削除されたファイルが復元されます。

※コマンド実行時のカレントディレクトリに注意して下さい。

この例では/dev/xxxxが復元対象のパーティションです。

対象の過去1時間に削除されたファイルを全て復元しています。

※–afterに1時間前のUnixタイムスタンプを与えています。