当前位置: 首页 > news >正文

Extundelete工具恢复数据

Extundelete 是一款专为 Ext 文件系统(Linux 系统中最常用的文件系统,如 Ext3、Ext4)设计的开源数据恢复工具,核心功能是恢复被意外删除(通过 rm 命令等操作)但尚未被新数据覆盖的文件或目录。它基于文件系统的底层机制工作,避免了对磁盘的 “破坏性扫描”,是 Linux 环境下数据恢复的重要工具之一。

核心工作原理

要理解 Extundelete,首先需要了解 Ext 文件系统的 “删除逻辑”:当用户在 Linux 中删除文件(如 rm -rf test.txt)时,系统并不会直接擦除磁盘上的文件数据,而是仅做两步关键操作:
  1. 将文件对应的 inode 节点(存储文件元信息,如权限、大小、数据块指针)中的 “链接数”(link count)设为 0;
  2. 将文件原本占用的 数据块(存储实际文件内容)标记为 “空闲”,允许后续新数据覆盖。
Extundelete 的恢复逻辑正是利用这一特性:它通过扫描磁盘的 inode 区域和数据块区域,识别出 “链接数为 0 但数据块尚未被覆盖” 的文件,重新构建 inode 与数据块的关联,最终将文件恢复到指定位置。

在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/

 

http://www.zskr.cn/news/8845.html

相关文章:

  • 最新!!!MySQL环境搭建(windows系统) - 详解
  • SQLite数据库 - 教程
  • 【Bluedroid】A2DP Source 音频流暂停流程解析[3]:AVDTP 协议中 Suspend Accept 响应的处理流程与建立分析(Suspend Accept)
  • Mysql查询条件里的字符串不加引导索引失效
  • 详细介绍:在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 实用指南:在 k8s 上部署 Kafka 4.0 3节点集群
  • 完整教程:VLAN划分——TRUNK
  • 现代操作系统-音频处理技术1 Linux驱动底层
  • 智元首次明确七人合伙人团队
  • ABC424
  • 解决 Windows 无法挂载 HTTP WebDAV(AList,OpenList)的问题
  • HN CSP-S 2024 游记
  • 关于oj在创建文件夹失败的原因
  • 图解15:DNS工作原理
  • 图解12:软件开发8大模型
  • 图解13:软件版本是怎么命名的
  • 图解14:CDN(最近使用的都是阿里云的)
  • WINUI/WPF——自定义ListView
  • 用 Rust 实现英文数字验证码识别
  • 图解9:IDEA30款好用的插件
  • 图解10:Redis优化18招
  • 图解11:API和SDK区别
  • 短暂的初中OI学习记录
  • 实用指南:坤驰科技诚邀您参加——第十三届中国光纤传大会
  • TypeScript - typeof 搭配 as const 技巧总结
  • 图解3:幂等使用场景
  • 推荐一款数据库安全产品:全知科技知形-数据库风险监测系统的价值解析
  • wireshark 进行snmp 协议加密报文解密查看
  • 耳鸣针灸学位
  • 不管不管,就要你的特殊对待(权限)