萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 誤刪文件救援:使用 ext3grep 恢復 ext3 分區數據完整教程

適用場景

  • 文件系統:ext3 (ext2 請用 `debugfs`,ext4/xfs/btrfs 有專用工具)。
  • 誤刪後**立即卸載或掛載為只讀**,防止數據被覆寫:mount -o remount,ro /dev/sdXn
  • 環境:CentOS/RHEL 7/8 (示例),其他發行版同理。

工具原理

`ext3grep` 掃描 ext3 日誌與 inode 表,尋找已刪除文件的 inode 與數據塊關聯,嘗試恢復文件內容。屬於**文件系統級恢復**,不依賴備份。

安裝步驟

1. 安裝依賴

# yum install -y e2fsprogs e2fsprogs-devel gcc-c++ make

確認關鍵庫:

# rpm -qa | grep e2fsprogs
e2fsprogs-1.45.x
e2fsprogs-libs-1.45.x   # 必須存在

2. 下載源碼編譯安裝

# cd /usr/local/src
# wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ext3grep/ext3grep-0.10.2.tar.gz
# tar xzf ext3grep-0.10.2.tar.gz
# cd ext3grep-0.10.2
# ./configure
# make && make install

安裝後二進制位於 `/usr/local/bin/ext3grep`。

恢復實戰

1. 確認目標分區

# df -hT
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda3      ext3   50G   20G   28G  42% /home

假設誤刪文件在 `/home` (/dev/sda3)。

2. 卸載或只讀掛載

# umount /home
# 或
# mount -o remount,ro /home

3. 掃描可恢復文件

# ext3grep /dev/sda3 --list
# 或指定 inode 範圍加速
# ext3grep /dev/sda3 --inode 123456 --list

4. 恢復指定文件

# mkdir -p /recovery
# ext3grep /dev/sda3 --restore-file "user/report.txt" --destination /recovery

5. 批量恢復 (按類型/時間)

# 恢復所有 .jpg
ext3grep /dev/sda3 --restore-all --extension jpg --destination /recovery

# 恢復最近 24 小時刪除的文件
ext3grep /dev/sda3 --after $(date -d '1 day ago' +%s) --restore-all --destination /recovery

常見問題

提示 "Filesystem not clean"
先運行 `e2fsck -f /dev/sda3` 修復文件系統,再嘗試恢復。
恢復出來的文件名為 inode 編號
ext3 刪除時目錄項已清除,文件名丟失。需通過 `file` 命令判斷類型重命名,或結合 `foremost`/`scalpel` 進行文件雕刻。
分區較大掃描極慢
使用 `--inode` 縮小範圍,或先用 `debugfs` 導出 inode 列表篩選。

替代方案對比

工具支援文件系統特點
ext3grepext3專注 ext3 日誌分析,恢復率高
debugfsext2/3/4底層調試器,手動操作複雜
extundeleteext3/4ext3grep 衍生版,支援 ext4,活躍維護
TestDisk/PhotoRecFAT/NTFS/exFAT/ext2/3/4...通用文件雕刻,不依賴文件系統結構

最佳實踐

  1. 誤刪即**停止寫入**該分區。
  2. 優先嘗試 `extundelete` (支援 ext4 且維護中)。
  3. 生產環境務必建立快照/備份策略 (LVM snapshot, Rsync, BorgBackup)。
copyright © 萬盛學電腦網 all rights reserved