生產環境誤刪除關鍵配置檔或資料檔是運維人員的噩夢。本文記錄一次真實的 /boot 分區檔案誤刪恢復實戰,展示如何使用 extundelete 這款開源神器,在幾分鐘內精準找回被 rm -rf 刪除的檔案,並分析其底層原理與適用場景。
實驗環境:CentOS 5.x,/boot 獨立分區(/dev/sda1,ext3 檔案系統)。操作過程中不慎執行 rm -rf config-2.6.18-128.el5 並同步寫入磁碟(sync),隨即將分區重掛為唯讀(mount -o remount,ro /boot)防止資料被覆寫——這是資料恢復的黃金法則:停止寫入,鎖定現場。
嘗試過 ext3grep 但發現其只能恢復小檔案且不支援目錄結構恢復。extundelete 則支援 ext3/ext4、可恢復單一檔案/整個目錄/全分區,且能利用日誌記錄精準定位已刪除 inode,官方宣稱支援 ext4,是目前社區最成熟的開源恢復工具之一。
[root@localhost tmp]# /usr/local/extundelete/bin/extundelete /dev/sda1 --ls --inode 2
File name | Inode number | Deleted status
Directory block 512:
. 2
.. 2
lost+found 11
grub 10041
System.map 18
message 12
initrd-2.6.18-128.el5.img 17
System.map-2.6.18-128.el5 13
config-2.6.18-128.el5 14 Deleted
symvers-2.6.18-128.el5.gz 15 Deleted
vmlinuz-2.6.18-128.el5 16
grub_bak 8033
mynewkernel 4017
vmlinuz-2.6.38.6 4018
symvers-2.6.18-128.el5.gz_bak 19
輸出清晰標記了 config-2.6.18-128.el5 的 inode 為 14,狀態為 Deleted,確認目標可恢復。
[root@localhost tmp]# /usr/local/extundelete/bin/extundelete /dev/sda1 --restore-file config-2.6.18-128.el5
WARNING: Extended attributes are not restored.
Loading filesystem metadata ... 13 groups loaded.
Loading journal descriptors ... 410 descriptors loaded.
Writing output to directory RECOVERED_FILES/
Restored inode 14 to file RECOVERED_FILES/config-2.6.18-128.el5
工具自動讀取日誌描述符,定位 inode 14 對應的資料塊,將檔案完整恢復到當前目錄下的 RECOVERED_FILES/。
[root@localhost tmp]# ll RECOVERED_FILES/
總計 12
-rw-r--r-- 1 root root 12288 05-13 02:25 config-2.6.18-128.el5
檔案大小、權限、時間戳均與原檔一致,恢復成功!
mount -o remount,ro 或 umount 分區,防止資料塊被新資料覆蓋。--restore-directory /path/to/dir--restore-all--after / --before 掌握 extundelete,讓「手滑刪庫」不再是不可逆的災難,而是可控的小插曲。