Ubuntuで削除したファイルを復元する方法【TestDisk/extundelete】

ストレージ

「大切なファイルを rm してしまった…」という経験は、Linuxを使い始めると一度は直面するものです。結論から言うと、削除直後であれば TestDisk/PhotoRec や extundelete で復元できる可能性があります。ただし時間が経つほど上書きのリスクが上がるため、気づいたらすぐに対処することが重要です。

本記事では Ubuntu 24.04 LTS 環境で実際に Docker コンテナを使ってファイル削除・復元を実行し、testdisk 7.1(PhotoRec 同梱) および extundelete 0.2.4 の動作を確認しました。単なるコマンド紹介ではなく、実測で判明した「extundelete が自動スキャンできないケース」も正直に載せています。

この記事のポイント

  • Ubuntu 24.04 の apttestdisk(PhotoRec同梱)と extundelete をインストールできる
  • PhotoRec はファイルシグネチャをスキャンするため、ファイルシステムに依存せず復元できる
  • extundelete は --restore-all が効かない場合でも、--restore-inode でinode直接指定なら復元できることを実測確認
  • 削除後に何も書き込まないことが最重要。気づいたらすぐにディスクをアンマウントする

目次

  1. 復元の前に知っておくべきこと
  2. ツールのインストール
  3. TestDisk でパーティションを復元する
  4. PhotoRec でファイルを復元する
  5. extundelete で ext4 ファイルを復元する
  6. 実測で判明:extundelete と ext4 の注意点
  7. よくあるエラーと対処法
  8. まとめ

復元の前に知っておくべきこと

ファイルを削除しても、データ自体はすぐには消えません。Linuxのファイルシステムでは、削除操作は「ディレクトリエントリを削除してinode(ファイルの管理情報)を空きとしてマーク」するだけです。実データはしばらくの間ディスクに残っています。

復元の成否を左右する行動

削除に気づいたらすぐにディスクへの書き込みを止めることが最優先です。新しいファイルを保存したり、パッケージをインストールしたりすると、削除されたデータが上書きされる可能性があります。可能であれば復元対象のパーティションをアンマウントしてください。

どのツールを使うべきか

Ubuntu で削除ファイルを復元するツールは大きく3種類あります。実測した結果も踏まえて選び方を整理します。

削除ファイル復元ツール比較(Ubuntu 24.04 実測データ)
削除ファイル復元ツール比較(Ubuntu 24.04 実測データ)

筆者が Ubuntu 24.04 のコンテナで実測したところ、extundelete の --restore-all は「0 recoverable inodes found」と表示されることがありましたが、inode番号を直接指定する --restore-inode オプションでは正常に復元できました。詳細は後述します。

ツールのインストール

手順1:パッケージリストを更新する




ubuntu@linuxlab: ~
$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease

Reading package lists… Done

手順2:testdisk をインストールする(PhotoRec 同梱)

testdisk パッケージをインストールすると、TestDisk と PhotoRec の両方が入ります。




ubuntu@linuxlab: ~
$ sudo apt install testdisk -y
Get:8 http://archive.ubuntu.com/ubuntu noble/universe amd64 testdisk amd64 7.1-5+nmu1build2 [408 kB]
Setting up testdisk (7.1-5+nmu1build2) …
$ testdisk –version
TestDisk 7.1, Data Recovery Utility, July 2019
$ photorec –version
PhotoRec 7.1, Data Recovery Utility, July 2019
testdisk/extundelete インストール実ログ(Ubuntu 24.04)
testdisk/extundelete インストール実ログ(Ubuntu 24.04)

手順3:extundelete をインストールする(ext4 専用)

ext4 ファイルシステムのジャーナルを使って復元したい場合は extundelete も入れておきます。




ubuntu@linuxlab: ~
$ sudo apt install extundelete -y
Get:1 … extundelete amd64 0.2.4-3build2 [50.4 kB]
Setting up extundelete (0.2.4-3build2) …
$ extundelete –version
extundelete version 0.2.4
libext2fs version 1.47.0
Ubuntu 22.04 vs 24.04 パッケージバージョン比較(実測)
Ubuntu 22.04 vs 24.04 パッケージバージョン比較(実測)

TestDisk でパーティションを復元する

TestDisk は主に削除されたパーティションの復元や、誤って消したパーティションテーブルの修復に使います。ファイル単位の復元には後述の PhotoRec が適しています。

注意

TestDisk はパーティションテーブル全体を操作します。操作を誤るとデータがさらに失われる可能性があります。必ず作業前に sudo で実行し、操作ログを確認しながら進めてください。

手順1:TestDisk を起動する




ubuntu@linuxlab: ~
$ sudo testdisk
TestDisk 7.1, Data Recovery Utility, July 2019
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org

起動後は対話型のTUI(テキストUI)が表示されます。基本的な操作の流れは次の通りです。

  1. Create(新しいログファイルを作成)を選択
  2. 操作対象のディスクを矢印キーで選ぶ
  3. パーティションテーブルの種類を選ぶ(通常は Intel/PC partition
  4. AnalyseQuick Search でパーティションを検索
  5. 見つかったパーティションを選び Write で書き込み

PhotoRec でファイルを復元する

PhotoRec はファイルシグネチャ(マジックナンバー)をスキャンして、ファイルシステムに依存せずファイルを復元します。ext4 に限らず、NTFS・FAT・USBメモリなどあらゆる媒体で使えるのが特徴です。

手順1:PhotoRec を起動する




ubuntu@linuxlab: ~
$ sudo photorec /dev/sda
PhotoRec 7.1, Data Recovery Utility, July 2019
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org

手順2:対話型メニューで設定する

PhotoRec は対話型の TUI で操作します。

  1. 対象のデバイスを選択する(例:/dev/sda、USBなら /dev/sdb
  2. File Opt でどのファイル形式を復元するか選ぶ(デフォルトは全形式)
  3. Search を押す
  4. パーティションタイプを選択(ext4 なら ext2/ext3/ext4
  5. 保存先ディレクトリを指定して C キーで実行

PhotoRec の注意点

PhotoRec はファイル名を復元できません。復元されたファイルは recup_dir.1/ のような連番ディレクトリに、f0000001.jpg のような名前で保存されます。ファイルの内容は復元できますが、元のファイル名は失われます。

extundelete で ext4 ファイルを復元する

extundelete は ext4 のジャーナルを解析して削除されたファイルを復元します。PhotoRec と異なり、ファイル名を保ったまま復元できるのが強みです。

手順1:デバイスをアンマウントする

extundelete はマウントされていないデバイス(またはリードオンリーマウント)に対して実行します。




ubuntu@linuxlab: ~
$ sudo umount /dev/sdb1
# リードオンリーで再マウントする方法もある
$ sudo mount -o remount,ro /dev/sdb1

手順2:削除されたファイルを確認する




ubuntu@linuxlab: ~
# ルートディレクトリ (inode=2) の削除ファイルを一覧表示
$ sudo extundelete /dev/sdb1 –inode 2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata … 1 groups loaded.
Loading journal descriptors … 190 descriptors loaded.
File name | Inode number | Deleted status
important_doc.txt | 12 | Deleted
config.conf | 13 | Deleted

手順3:全削除ファイルを一括復元する




ubuntu@linuxlab: ~
# 全ての削除ファイルを復元(カレントディレクトリに RECOVERED_FILES/ を作成)
$ sudo extundelete /dev/sdb1 –restore-all
Loading filesystem metadata … 1 groups loaded.
Loading journal descriptors … 190 descriptors loaded.
Restored inode 12 to file RECOVERED_FILES/important_doc.txt
Restored inode 13 to file RECOVERED_FILES/config.conf
$ ls RECOVERED_FILES/
important_doc.txt config.conf

手順4:inode番号を指定して特定ファイルのみ復元する




ubuntu@linuxlab: ~
# inode 12 のファイルのみ復元
$ sudo extundelete /dev/sdb1 –restore-inode 12
Restored inode 12 to file RECOVERED_FILES/file.12
$ cat RECOVERED_FILES/file.12
重要なメモの内容がここに表示されます

実測で判明:extundelete と ext4 の注意点

Ubuntu 24.04 の ext4 で実際に検証したところ、extundelete の --restore-all が「0 recoverable inodes found」となるケースがあることが分かりました。これは本当に詰まりやすいポイントです。

extundelete inode直接指定による復元成功(実測)
extundelete inode直接指定による復元成功(実測)

原因は ext4 のモダンな機能にあります。Ubuntu 24.04 で mkfs.ext4 すると、デフォルトで次のフィーチャーが有効になります。




ubuntu@linuxlab: ~
$ tune2fs -l /dev/sdb1 | grep “Filesystem features”
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum

extent(エクステント機能)と dir_index(ハッシュディレクトリ)、metadata_csum(メタデータチェックサム)が有効だと、extundelete がジャーナルから削除エントリを自動検出しにくくなります。

著者アイコン
著者アイコン

実測では --restore-all が効かなくても、--restore-inode 12 のようにinode番号を直接指定するとファイル内容を完全に取得できました。削除前に ls -i でinode番号をメモしておく習慣が大事です。

実測から導き出した対処法をまとめます。

状況 推奨する対処
inode番号が分かる(削除前にメモした) extundelete --restore-inode <番号>
inode番号不明・ext4 extundelete --restore-all(効かなければ PhotoRec)
ファイル名不要・内容だけ取り戻したい photorec(最も信頼性が高い)
パーティションごと消えた testdisk

よくあるエラーと対処法

「No files were undeleted」と表示される

extundelete が No files were undeleted または 0 recoverable inodes found を返す場合は、以下を試してください。

  1. --restore-all の代わりに --restore-inode <番号> を試す
  2. PhotoRec(photorec)に切り替える(ext4 フィーチャーの影響を受けない)
  3. 削除後に書き込みが発生していないか確認する(上書きされているかもしれない)

「Permission denied」が出る

デバイスへの直接アクセスには root 権限が必要です。




ubuntu@linuxlab: ~
extundelete: Cannot open filesystem /dev/sda1: Permission denied
# sudo を付けて実行する
$ sudo extundelete /dev/sda1 –restore-all

「Bad magic number in super-block」が出る

ext4 以外のファイルシステム(XFS・Btrfs・NTFS など)に extundelete を使おうとしたときに出ます。ext4 でない場合は photorectestdisk を使ってください。




ubuntu@linuxlab: ~
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
└─sda1 ext4 /
# FSTYPE が ext4 であることを確認してから extundelete を使う

まとめ

Ubuntu 24.04 でのファイル復元手順を実測を交えてまとめました。

  • 削除に気づいたらすぐに書き込みを止め、可能ならアンマウントする
  • testdisk インストールで PhotoRec も同時に入る(7.1-5+nmu1build2 / Ubuntu 24.04)
  • PhotoRec はファイルシステム非依存のシグネチャスキャンで最も信頼性が高い
  • extundelete は --restore-all が効かない場合でも --restore-inode で復元できる(実測確認済み)
  • Ubuntu 24.04 の ext4 は extent / dir_index / metadata_csum フィーチャーにより extundelete の自動スキャンが効きにくいことがある

VPS でデータを失ったときのために、定期的なバックアップ環境を整えておくことも大切です。VPS の選び方や初期設定については以下の記事も参考にしてください。

コメント

タイトルとURLをコピーしました