当前位置: 首页 > 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.jsqmd.com/news/803/

相关文章:

  • 最新!!!MySQL环境搭建(windows系统) - 详解
  • 重新理解12306:它卖的从来不是“库存”,而是“状态”
  • 基于Python+Vue开发的房产销售管理系统源码+运行步骤
  • WinSCP从Windows传文件到Linux,文件名为中文显示乱码
  • 混合架构(SpringCloud+Dubbo)的整合方案与适用场景(一) - 教程
  • Oracle中case when函数和decode函数
  • Jmeter生成随机数
  • 通过代码认识 CNN:用 PyTorch 构建卷积神经网络识别手写数字
  • SQLite数据库 - 教程
  • 安全技术深度探讨:从鱿鱼皮肤到AI漏洞挖掘
  • 【Bluedroid】A2DP Source 音频流暂停流程解析[3]:AVDTP 协议中 Suspend Accept 响应的处理流程与建立分析(Suspend Accept)
  • 安装WSL
  • 实用指南:【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!
  • 数据建模流程分析
  • 第四章:大模型(LLM)】08.Agent 教程-(7)使用 LangGraph 的作文评分架构
  • 详细介绍:您必须知道的 10 大 Highcharts 性能优化技巧—— 提升加载速度与交互体验的实战建议
  • PHP8.5 Pipeline Operator 你应该了解的 8 个特性
  • Nvidia Orin DK 本地 ollama 主流 20GB 级模型 gpt-oss, gemma3, qwen3 部署与测试 - 实践
  • Mysql查询条件里的字符串不加引导索引失效
  • 详细介绍:在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 实用指南:在 k8s 上部署 Kafka 4.0 3节点集群
  • Django HttpRequest 对象的常用属性 - 指南
  • 完整教程:Ajax-day2(图书管理)-弹框显示和隐藏
  • 实用指南:C语言基础【20】:指针7
  • civil 3d com api 帮助文档
  • 完整教程:【教程4>第8章>第28节】OFDM完整通信链路项目FPGA开发22——提取导频
  • 实用指南:万字详解架构设计:业务架构、应用架构、数据架构、技术架构、单体、分布式、微服务都是什么?
  • WebSockets与Socket.io渗透测试实战指南
  • 深入解析:spring boot3.0整合rabbitmq3.13
  • 完整教程:VLAN划分——TRUNK