利用extundelete工具恢復磁盤誤刪除的數據node
簡單介紹下關於inode的知識。在Linux下能夠經過「ls -id」命令來查看某個文件或者目錄的inode值,例如查看根目錄的inode值,能夠輸入:python
[root@Virtual Server-100 shell]# ls -id / 2 /
在利用extundelete恢復文件時並不依賴特定文件格式,首先extundelete會經過文件系統的inode信息(根目錄的inode通常爲2)
來得到當前文件系統下全部文件的信息,包括存在的和已經刪除的文件,這些信息包括文件名和inode。
而後利用inode信息結合日誌去查詢該inode所在的block位置,包括直接塊、間接塊等信息。
最後利用dd命令將這些信息備份出來,從而恢復數據文件。shell
官網下載地址:https://sourceforge.net/projects/extundelete/files/latest/download?source=top3_dlp_t5 [root@Virtual Server-100 src]# yum -y install e2fsprogs-libs e2fsprogs e2fsprogs-devel [root@Virtual Server-100 src]# rpm -q e2fsprogs-libs e2fsprogs e2fsprogs-devel [root@Virtual Server-100 src]# tar jxvf extundelete-0.2.4.tar.bz2 [root@Virtual Server-100 src]# cd extundelete-0.2.4 [root@Virtual Server-100 src]#extundelete-0.2.4]# ./configure && make && make install
安裝完成以後生成一個可執行文件工具
[root@Virtual Server-100 src]# extundelete --help 其中,參數(options)有: --version, -[vV],顯示軟件版本號。 --help,顯示軟件幫助信息。 --superblock,顯示超級塊信息。 --journal,顯示日誌信息。 --after dtime,時間參數,表示在某段時間以後被刪的文件或目錄。 --before dtime,時間參數,表示在某段時間以前被刪的文件或目錄。 動做(action)有: --inode ino,顯示節點「ino」的信息。 --block blk,顯示數據塊「blk」的信息。 --restore-inode ino[,ino,...],恢復命令參數,表示恢復節點「ino」的文件,恢復的文件會自動放在當前目錄下的RESTORED_FILES文件夾中,使用節點編號做爲擴展名。 --restore-file 'path',恢復命令參數,表示將恢復指定路徑的文件,並把恢復的文件放在當前目錄下的RECOVERED_FILES目錄中。 --restore-files 'path',恢復命令參數,表示將恢復在路徑中已列出的全部文件。 --restore-all,恢復命令參數,表示將嘗試恢復全部目錄和文件。 -j journal,表示從已經命名的文件中讀取擴展日誌。 -b blocknumber,表示使用以前備份的超級塊來打開文件系統,通常用於查看現有超級塊是否是當前所要的文件。 -B blocksize,經過指定數據塊大小來打開文件系統,通常用於查看已經知道大小的文件。
在數據刪除以後,首先要卸載被刪除數據所在的磁盤或是分區,若是是系統根分區遭到誤刪除,
就須要進入單用戶模式下,將根分區以只讀的方式掛載。
緣由:由於文件刪除以後,僅僅是將文件的inode節點中的扇區指針清零,實際上文件還存在磁盤上面
若是磁盤以讀寫方式掛載,這些刪除的數據塊可能會被系統重新分配出去,這些數據塊被覆蓋以後,這些
數據就真的丟失了,因此以只讀的方式掛載,儘量避免數據被覆蓋。測試
下面的實驗我是將磁盤格式化爲ext4文件系統,固然在ext3文件系統下面也是一樣的方法進行恢復 首先掛載一個新的分區 [root@Virtual Server-100 src]# mkfs.ext4 /dev/sdb1 [root@Virtual Server-100 src]# pwd /usr/local/src/ [root@Virtual Server-100 src]# mkdir test [root@Virtual Server-100 src]# mount /dev/sdb1 test/ [root@Virtual Server-100 src]# cp /etc/passwd test/ [root@Virtual Server-100 src]# cp -r shell/ test/ [root@Virtual Server-100 src]# mkdir test/yhl [root@Virtual Server-100 src]# echo "Welcome to test" > test/yhl/1.txt [root@Virtual Server-100 src]# cd test/ [root@Virtual Server-100 test]# md5sum passwd b182c9886c816aa0b4fc77ca6585d42e passwd [root@Virtual Server-100 test]# md5sum yhl/1.txt eb39646285ff90dd31f24bd9f0a34257 yhl/1.txt [root@Virtual Server-100 test]# ls shell/ yhl/ shell/: 6.sh check_system.sh hanyi.sh if2.sh if4.sh new.sh.bak p_s1.sh root.sh yanse.sh yuhulin.sh yunsuan.sh case.sh chengji.sh if1.sh if3.sh new.sh ppp python.sh test youxi.sh yunsuan-1.sh yhl/: 1.txt [root@Virtual Server-100 test]# rm -rf * 恢復: 1,卸載刪除文件的分區 [root@Virtual Server-100 test]# umount /usr/local/src/test/ umount: /usr/local/src/test: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) 提示設備忙,用下面方法卸載就能夠卸載 [root@Virtual Server-100 test]# fuser -m -v -i -k /usr/local/src/test/ [root@Virtual Server-100 ~]# umount /usr/local/src/test/ 查看能恢復的數據 [root@Virtual Server-100 ~]# extundelete /dev/sdb1 --inode 2 (由於根分區的inode值是2) File name | Inode number | Deleted status . 2 .. 2 shell 130305 Deleted passwd 12 Deleted yhl 1042433 Deleted 首先測試恢復單個文件 [root@Virtual Server-100 ~]# extundelete /dev/sdb1 --restore-file passwd //restore-file表示恢復文件 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 153 groups loaded. Loading journal descriptors ... 79 descriptors loaded. Successfully restored file passwd [root@Virtual Server-100 ~]# cd RECOVERED_FILES/ //恢復成功以後默認會建立這個文件,恢復的文件在這個目錄下面 [root@Virtual Server-100 RECOVERED_FILES]# ls passwd [root@Virtual Server-100 RECOVERED_FILES]# md5sum passwd //進行MD5校驗,和刪除以前對比是同樣的,說明恢復成功 b182c9886c816aa0b4fc77ca6585d42e passwd 測試恢復目錄 [root@Virtual Server-100 RECOVERED_FILES]# extundelete /dev/sdb1 --restore-directory /shell NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 153 groups loaded. Loading journal descriptors ... 79 descriptors loaded. Searching for recoverable inodes in directory /shell ... 26 recoverable inodes found. Looking through the directory structure for deleted files ... 5 recoverable inodes still lost. [root@Virtual Server-100 RECOVERED_FILES]# ls passwd RECOVERED_FILES [root@Virtual Server-100 RECOVERED_FILES]# cd RECOVERED_FILES/ [root@Virtual Server-100 RECOVERED_FILES]# ls shell 能夠看見這個目錄,可是有一個問題是恢復回來的文件權限和以前的發生了變化,須要你從新修改權限(我測試的時候是這樣的) 恢復全部數據 [root@Virtual Server-100 shell]# extundelete /dev/sdb1 --restore-all NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 153 groups loaded. Loading journal descriptors ... 79 descriptors loaded. Searching for recoverable inodes in directory / ... 26 recoverable inodes found. Looking through the directory structure for deleted files ... 1 recoverable inodes still lost. [root@Virtual Server-100 shell]# cd RECOVERED_FILES/ [root@Virtual Server-100 RECOVERED_FILES]# ls passwd shell yhl [root@Virtual Server-100 yhl]# ls 1.txt [root@Virtual Server-100 yhl]# cat 1.txt Welcome to test [root@Virtual Server-100 yhl]# md5sum 1.txt eb39646285ff90dd31f24bd9f0a34257 1.txt [root@Virtual Server-100 shell]# du -sh RECOVERED_FILES/* 4.0K RECOVERED_FILES/passwd 96K RECOVERED_FILES/shell 8.0K RECOVERED_FILES/yhl 能夠看出,數據恢復成功