Extundelete 是一款专为 Ext 文件系统(Linux 系统中最常用的文件系统,如 Ext3、Ext4)设计的开源数据恢复工具,核心功能是恢复被意外删除(通过 rm
命令等操作)但尚未被新数据覆盖的文件或目录。它基于文件系统的底层机制工作,避免了对磁盘的 “破坏性扫描”,是 Linux 环境下数据恢复的重要工具之一。
在Linux下可以通过“ls –id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:
[root@cloud1 ~]# ls -id / 2 / # 由此可知,根目录的inode值一般为2。
1、直接安装
yum install -y extundelete
2、编译安装
wget https://github.com/curu/extundelete/archive/refs/tags/v1.0.tar.gz yum install libcom_err e2fsprogs-devel gcc gcc-c++ tar xf v1.0.tar.gz cd extundelete-1.0/ # 稳定版本,比较推荐该版本 ./configure make && make install cd ./src/ #进入 src 目录,可查看已编译好的 Extundelete 文件
使用方法extundelete –help
# 参数(options)有: –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,# 通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件
使用方法
mount /dev/sdb /root/123 # 挂载一块空盘,并进入到挂载点 for i in {1..10};do sleep 1 && for i in {1..100};do echo `date +%s` >> $i.txt ;done ;done # 创建实验环境,删除20.txt文件尝试恢复 # - 查看sdb1 分区根目录下面可被恢复的文件及文件夹 extundelete /dev/sdb --inode 2 # -- 恢复单个文件, 恢复对应inode的文件 extundelete /dev/sdb --restore-inode 12 # - 恢复单个文件,恢复对应文件名称 extundelete /dev/sdb --restore-file filename # -- 恢复目录,空目录不会被恢复 extundelete /dev/sdb --restore-directory # -- 恢复所有文件 extundelete /dev/sdb --restore-all
注意:在数据删除之后,首先要卸载被删除数据所在的磁盘或分区,如果是系统根分区遭到误删除,就需要进入单用户模式下,将根分区以只读的方式挂载。原因:因为文件删除之后,仅仅是将文件的inode节点中的扇区指针清零,实际上文件还存在磁盘上面,如果磁盘以读写方式挂载,这些删除的数据块可能会被系统从新分配出去,这些数据块被覆盖之后,这些数据就真的丢失了,所以以只读的方式挂载,尽可能避免数据被覆盖。
模拟数据恢复过程
1、创建挂载点,并创建测试文件
mkdir /root/123 && cd /root/123 for i in {1..10};do sleep 1 && for i in {1..100};do echo `date +%s` >> $i.txt ;done ;done
2、模拟误删文件
rm -f 20.txt
3、为防止数据被覆盖,卸载挂载点
cd ~
umount /root/123
4、开始进行文件恢复
extundelete /dev/sdb --inode 2 | grep 20.txt # 过滤出20文件inode 20.txt 31 Deleted extundelete /dev/sdb --restore-file 20.txt
5、检查文件恢复情况
ls –l RECOVERED_FILES/