Linux中恢复误删文件的方法及工具

在Linux操作系统中,没有类似于Windows的回收站,它需要借助工具才能恢复已删除的文件,在执行rm命令时一定要小心谨慎,因为,有工具也并不代表能百分百恢复数据。本文介绍几种在Linux操作系统中恢复被删除文件的方法和工具。

方案一 恢复处于打开状态的已删除文件

通过lsof命令列出被各种进程打开的文件信息,其原理是从内存中的信息恢复文件,先了解lsof命令:

常用参数

参数 说明
lsof {filenam} 显示打开指定文件的所有进程
lsof -a 两个参数都必须满足时才显示结果
lsof -c {string} 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -d FD 显示指定文件描述符的进程
lsof +d /DIR/ 显示目录下被进程开启的文件
lsof +D /DIR/ 显示目录下被进程开启的文件,同时搜索子目录
lsof -g {gid} 显示归属{gid}的进程情况
lsof -i:{port} 显示打开{port}端口号的进程
lsof -n 不将IP转换为{hostname}
lsof -u {username} 显示所属{user}进程打开的文件

字段说明

字段 说明
COMMAND 进程的PID(进程标识符)
USER 进程所有者
FD 用来识别该文件(文件描述符)
DEVICE 指定磁盘的名称
SIZE 文件的大小
NODE 索引节点(文件在磁盘上的标识)
NAME 打开文件的确切名称

以恢复正在使用中的/opt/chkfile.txt文件为例,我们新建一个终端,将该文件删除。

0x01 查看正在使用删除文件的进程号

# 安装lsof
# yum -y install lsof

lsof /opt/rmfiles

重点在COMMAND列,即进程{PID},下一步将用到它。

0x02 恢复/proc中对应的文件

cd /proc/{PID}/fd
# 查看目录中有有没有被删除的文件
ll
# 从指定序号恢复文件
cat 4 > /opt/chkfile.txt

方案二 恢复已删除但未被覆盖的文件(xfs/ext文件系统)

据说没有特别适合xfs文件系统的数据恢复软件,但 TestDisk & PhotoRec 还是可以一试的。

访问testdisk下载地址

1x01 安装TestDisk(PhotoRec)

# 从源yum/apt/dnf安装
# CentOS/RHEL/Fedora
yum install testdisk
# Fedora 22+
dnf install testdisk
# Debian/Ubuntu
apt-get install testdisk

# 从官网下载可执行程序
wget https://www.cgsecurity.org/testdisk-7.2-WIP.linux26-x86_64.tar.bz2
# yum -y install bzip2
bzip2 -d testdisk-7.2-WIP.linux26-x86_64.tar.bz2
tar xf testdisk-7.2-WIP.linux26-x86_64.tar
cd testdisk-7.2-WIP

在程序目录中有三个可执行文件,分别是fidentify_static、photorec_static和testdisk_static,我们使用photorec_static工具来恢复数据。

1x02 开始恢复数据

# 从列表选择磁盘或分区
./photorec_static

# 指定磁盘或分区
./photorec_static /dev/sdb1

上下方向键选择对应的选项,左右方向键选择底部菜单,分别是:

菜单 说明
Search 开始恢复
Options 调整恢复参数
File Opt 调整扫描的文件类型
Quit 退出

此外,通过回车键、空格键进行选择、修改或返回。

方案三 恢复已删除但未被覆盖的文件(ext文件系统)

该方案适用于ext3/ext4文件系统,通过extundelete工具根据存储在ext3/ext4分区日志中的信息恢复被删除的文件。

访问extundelete网站

2x01 卸载分区

恢复前卸载分区或磁盘,如果删除的是系统根分区,须进入单用户模式以只读模式挂载根分区。

# 卸载前建议备份
dd if=/path/file of=/dev/sdc1

# 以卸载/mnt为例
umount /mnt

# 如果提示设备busy,可通过fuser命令强制卸载
fuser -m -v -i -k /mnt

2x02 安装extundelete

# 安装依赖

# Redhat/CentOS
yum -y install e2fsprogs-devel e2fsprogs* gcc*
#Ubuntu
apt-get install build-essential e2fslibs-dev e2fslibs-dev

# 安装extundelete

wget http://udomain.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
bzip2 -d extundelete-0.2.4.tar.bz2
tar xf extundelete-0.2.4.tar
cd extundelete-0.2.4
./configure
# 在程序当前的src目录中生成extundelete可执行文件
make
# 将extundelete程序安装到/usr/local/bin/中【可选】
make install

# 在当前程序目录中
cd src
# 若有执行 make install 则可在任意位置执行extundelete命令
extundelete -v

2x03 查找已删除的数据

查找指定分区上被删除的文件,最后一列为红色的deleted标记。

# 根分区的inode值为2
extundelete /dev/sdb1 --inode 2

2x04 开始恢复数据

执行恢复文件的命令后,会在当前位置生成RECOVERED_FILES目录,成功恢复的文件都会出现在该目录中。

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

# 恢复指定文件
extundelete /dev/sdb1 --restore-file removed_file

# 恢复指定inode
extundelete /dev/sdb1 --restore-inode inode_id

# 恢复所有文件
extundelete /dev/sdb1 --restore-all

原创文章禁止转载:技术学堂 » Linux中恢复误删文件的方法及工具

精彩评论

9+7=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏