当前位置: 首页 > 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.hskmm.com/?act=detail&tid=11681

相关文章:

  • 重新理解12306:它卖的从来不是“库存”,而是“状态”
  • 基于Python+Vue开发的房产销售管理系统源码+运行步骤
  • 混合架构(SpringCloud+Dubbo)的整合方案与适用场景(一) - 教程
  • 安全技术深度探讨:从鱿鱼皮肤到AI漏洞挖掘
  • 【Bluedroid】A2DP Source 音频流暂停流程解析[3]:AVDTP 协议中 Suspend Accept 响应的处理流程与建立分析(Suspend Accept)
  • 安装WSL
  • 数据建模流程分析
  • 数学笔记
  • PHP8.5 Pipeline Operator 你应该了解的 8 个特性
  • Nvidia Orin DK 本地 ollama 主流 20GB 级模型 gpt-oss, gemma3, qwen3 部署与测试 - 实践
  • 详细介绍:在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 完整教程:Ajax-day2(图书管理)-弹框显示和隐藏
  • civil 3d com api 帮助文档
  • WebSockets与Socket.io渗透测试实战指南
  • 完整教程:VLAN划分——TRUNK
  • 现代操作系统-音频处理技术1 Linux驱动底层
  • 元推理:人和事物,都是针对性的存在着与必然因果,残缺之美
  • 人和事物,都是针对性的存在着与必然因果,残缺之美
  • ArcEngine10.2中融合工具Dissolve的bug
  • Linux驱动适配I2C/SPI例子
  • [重要] PySimpleGU控件函数用法整理
  • 使用XState测试分布式微服务的完整指南
  • 含“华”量超高的奥迪,卖爆了
  • 某些外审专家的意见,真是臭不可闻
  • 智元首次明确七人合伙人团队
  • 大模型赋能的具身智能:自主决策和具身学习技术最新综述
  • ST首批中国产MCU,价格曝光
  • 狄拉克δ函数探源:从广义函数到分析核与信号窗 (AI辅助撰写)
  • 解决 Windows 无法挂载 HTTP WebDAV(AList,OpenList)的问题
  • 在Ubuntu系统中使用gcc和Makefile编译C程序