一. extundelete 工作原理
extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
二. extundelete 的安装
# 提前安装好163和epel的yum源,安装成功后会有一个 extendelete 命令
yum install e2fsprogs e2fsprogs-libs extundelete #(操作系统 CentOS 6.9)
三. extundelete 数据恢复实践
在数据被误删除后,第一时间要做的是卸载被删除数据所在的磁盘或磁盘分区,如果是系统根分区的数据遭到误删除,就需要将系统进入单用户,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode结点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回力无天。所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。
- 通过extundelete恢复单个文件
在演示通过extundelete恢复数据之前,我们首先要模拟一个数据误删除环境
mkfs.ext4 /dev/sdb
mount /dev/sdb /drbd
- 卸载挂载分区,防止数据块被占用
umount /drbd
- 查询可恢复的数据信息
extundelete /dev/sdb --inode 2
- 恢复单个文件
extundelete /dev/sdb --restore-file test
- 恢复单个目录
extundelete /dev/sdb --restore-directory rkhunter-1.4.4
- 恢复所有文件
extundelete /dev/sdb --restore-all