rm误删文件恢复

问题描述

在Linux实例中,使用rm命令误删除文件且没有对文件所在磁盘进行任何写操作,可以通过以下方法进行数据恢复。

# 执行不成功的
rm -Rf /

## 使用 --no-preserve-root 选项跳过安全模式
rm -rf --no-preserve-root /*

文件系统的三部分

LinuxWindows文件系统三部分组成:

  • 文件名
  • inode
  • block
文件名 存放文件元数据信息 真正存放数据
a.txt –>inode –> block

block块:真正存储数据的地方
逻辑删除:假删除(相当于只是删除了书的目录)
为什么删除比复制快?


误删除文件后进程还在的情况

https://www.lxlinux.net/1124.html

# 查看当前正在使用的、已被删除的文件
lsof | grep deleted

image.png
幸运的是这种情况进程还存在 ,那么开始进行恢复操作。


恢复

# 恢复命令
cp /proc/pid/fd/1/指定目录/文件名 /tmp/恢复/

进入进程目录,一般是进入/proc/pid/fd/,拷贝文件到指定的位置

在这里插入图片描述
恢复操作
在这里插入图片描述


安装extundelete

参考:https://www.lxlinux.net/8012.html
ext4文件系统上删除文件,可以使用extundelete恢复;
ext3文件系统上删除文件,可以使用ext3grep恢复;
windows恢复误删除的文件: final data v2.0汉化版easyrecovery

extundelete官网:http://extundelete.sourceforge.net/

extundelete工具可以从 ext3ext4分区恢复已删除的文件
extundelete使用存储在分区日志中的信息尝试恢复已从分区中删除的文件,无法保证任何特定被删除文件都能够被成功恢复。
extundelete工具暂不支持xfs文件系统中恢复误删文件,可以尝试使用TestDiskxfs中恢复误删文件。


yum安装extundelete

# 检查是否安装有extundelete工具
rpm -qa extundelete

# yum安装extundelete
yum install -y extundelete

# 查看extundelete版本
extundelete -v

编译安装extundelete

# 安装依赖包
yum -y install e2fsprogs-libs e2fsprogs e2fsprogs-devel

# 下载压缩安装包
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

# 备用下载地址
wget https://raw.githubusercontent.com/omaidb/qiaofei_notes/main/shell_code/extundelete/extundelete-0.2.4.tar.bz2

# 解压
tar -jxvf extundelete-0.2.4.tar.bz2

cd extundelete-0.2.4

# 构建编译选项
./configure

# 编译安装
make && make install

# 检查是否安装成功
extundelete -v

extundelete常用参数

其中,参数(options)有:

参数 解释
–version, -[vV] 显示软件版本号
–help 显示软件帮助信息
–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 通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件

误删文件后立即要做的事情

提示:

  • 误删除文件后,第一件事要立即停止继续写入数据, 要避免误删除的文件内容被覆盖
  • extundelete在恢复文件时不能自动创建空文件目录
  • 安装extundelete工具,切勿extundelete工具安装到误删文件所在磁盘。建议安装到系统盘,或者安装到一块新的数据盘
  • 由于使用该工具后续恢复删除文件的操作需要执行umount命令取消分区挂载操作,或以只读方式挂载分区,系统盘分区不能执行umount命令。
  • 系统盘中的误删文件数据恢复,需要使用liveCD启动后以只读方式挂载要恢复的系统盘

1. 通过dd命令对当前分区进行备份

通过dd命令对当前分区进行备份,防止第三方软件恢复失败导致数据丢失。适合数据非常重要的情况,这里测试,就没有备份,如备份可以考虑如下方式:

# 通过dd命令对当前分区进行备份
dd if=/path/filename of=/dev/vdc1

2. 卸载需要恢复文件的分区或以只读的方式挂载

卸载被删文件所在磁盘分区。

# 查看当前系统磁盘分区
df -h

# 卸载需要恢复文件的分区
## umount 挂载点
umount /mnt

# 查看谁在占用挂载点
## -m 显示挂载点
## -u 显示用户
## -v 显示详情
fuser -muv /mnt

# 识别和终止正在访问指定文件或文件系统的进程
## -m:指定匹配模式为挂载点,只管挂载点相关的进程
## -v:显示详细信息,包括进程的命令行参数
## -i:交互式模式,要求在终止进程之前进行确认
## -k:终止进程
fuser -m -v -i -k /mnt

# 以只读的方式挂载
## remount 重新挂载
## ro 只读方式挂载
mount -o remount,ro /mnt

3. 查看inode号

扩展:

  • ext4分区根目录的inode值为2
  • xfs分区根目录的inode值为64
    • 本示例中的根分区使用LVM创建,所以为96
# 查看etx4文件系统磁盘的inode值
ls -id /mnt/data/

在这里插入图片描述

# 查看xfs文件系统中/boot的inode值
ls -id /boot/

在这里插入图片描述
定位被误删的文件需要一步步查找,可以先从根分区 inode 查找

# 查看inode号:
## 常识:每个文件,有一个inode号。
ls -i a.txt

image.png

# 查看inode中的文件属性
## 通过stat命令查看inode中包含的内容
stat a.txt

image.png


4. 查看被删除数据信息

https://blog.51cto.com/bosszhang/2069542

# 通过inode结点查看被删除的文件名字:
# 查看sdb1分区根目录下面可被恢复的文件及文件夹
# 查询可恢复的数据,带有Deleted标记的表示已经删除的文件
## --inode 2 显示inode号为2的文件的信息
# extundelete 磁盘设备路径 --inode 2
extundelete /dev/sdb1 --inode 2

系统显示类似如下:
图中Deleted状态的既是被删除的数据
恢复被删除数据RECOVERED_FILES目录下,该RECOVERED_FILES目录默认创建在当前目录下。


恢复文件

https://developer.aliyun.com/article/563603


恢复指定inode号文件

# 恢复对应inode的文件
extundelete 磁盘镜像文件 --restore-inode 21

恢复指定文件名

# 指定文件名test.txt尝试恢复
extundelete /dev/sdb1 --restore-file test.txt

恢复指定目录

空目录不会被恢复

# 恢复指定目录
extundelete /dev/sdb1 --restore-directory /dir1

恢复所有可恢复文件

# 恢复该磁盘下的所有可恢复文件
extundelete 磁盘设备路径 --restore-all

系统显示类似如下:


恢复指定时间的文件

Unix时间戳转换:https://tool.chinaz.com/tools/unixtime.aspx


恢复指定时间戳之前删除的文件

# 恢复指定时间戳之前删除的文件
## --before UNIX时间戳,从1970年1月1日 00:00:00 UTC 起的秒数。
extundelete --before 1451288304 --restore-all /dev/sdb1

恢复指定时间戳之后删除的文件

# 恢复指定时间戳之后删除的文件
## --after UNIX时间戳
extundelete --after 1451288304 --restore-all /dev/sdb1

查看恢复出的文件

# 查看恢复出的文件
ls RECOVERED_FILES/

猜你喜欢

转载自blog.csdn.net/omaidb/article/details/133276923