前言
无论在哪个零碎中,删除文件都是必须审慎的操作。因为如果不小心删除了重要文件,就会导致集体或公司呈现重大的损失。相似于 windows 零碎误删了文件,能够应用一些软件进行复原操作。Linux 也是有几款软件能够做到误删复原的。
注意事项:尽管有软件能够对误删的数据进行复原,然而完全恢复数据的概率并不是百分百的。
因而,应用 rm 命令删除文件的时候,肯定要小心;重要的数据肯定要有备份;并且复原删除的数据前,删除文件的目录内不能往进寄存新货色,否则笼罩掉的信息无奈找回。
上面介绍的就是对 Linux 中误删文件的复原操作。
1、lsof
原理:这个命令实际上并不能间接用来复原文件,不过它能够列出被各种过程关上的文件信息。
配合其余命令,从 /proc 目录下的信息中复原“文件已删除,但过程仍放弃关上该文件的状态”的文件。
/proc 目录是挂载的是在内存中所映射的一块区域,当咱们对这些文件进行读取和写入时,实际上是在从内存中获取相干信息。
因而,当咱们对文件进行读取或写入时 (即有过程正应用文件时),哪怕硬盘中的该文件已删除,还能够从内存中的信息复原文件。
留神:
- 必须以 root 用户的权限运行,因为 lsof 须要拜访外围内存和各种文件。
- 只能复原“文件已删除,但过程仍放弃关上该文件的状态”的文件。
- 如果误删了目录,目录中的其余文件未被过程关上,没有进行应用的文件将无奈应用此办法复原。
lsof 输入信息的意义:
COMMAND #过程的 PID(过程标识符)
USER #过程所有者
FD #用来辨认该文件 (文件描述符)
DEVICE #指定磁盘的名称
SIZE #文件的大小
NODE #索引节点 (文件在磁盘上的标识)
NAME #关上文件的确切名称
最罕用参数:
`
-c #显示某过程当初关上的文件
-p #显示哪些文件被某 pid 过程关上
-g #显示归属某 gid 的过程状况
-d #显示目录下被过程开启的文件
-d #显示应用 fd 为 4 的过程
-i:80 #显示关上 80 端口的过程
复原文件操作
环境:在 /mnt 下有一些文件,其中一个文件 train.less 正在被查看,而后另一个终端将其删除
【1】lsof 查看
查看正在应用删除文件的过程号
lsof /mnt
【2】复原
切换到 /proc 下,删除文件对应的过程的 pid 下的文件描述符中的目录中;将对应的内容重定向或 cp 到其余文件中。
重点关注:PID 与 FD
cd /proc/31284/fd/
cat 4 > /mnt/ferris_train.less
2、extundelete
原理:应用存储在分区日志中的信息,尝试复原已从 ext3 或 ext4 的分区中删除的文件
长处:相比于 ext3grep 只能复原 ext3 文件系统的文件,其适用范围更广,复原速度更快
extundelete 官网地址 (官网文档):http://extundelete.sourceforg…
extundelete 下载地址:http://downloads.sourceforge…. (最新版本的 extundelete 是 0.2.4,于 2013 年 1 月公布)
留神:
- 在数据删除之后,要卸载被删除数据所在的磁盘或是分区
- 如果是零碎根分区受到误删除,就要进入单用户模式, 将根分区以只读的形式挂载, 尽可能防止数据被笼罩
- 数据被笼罩后无奈找回
- 复原仍有肯定的机率失败,平时应答重要数据作备份,小心应用 rm
装置
1、依赖装置
#centos 安装操作
yum install e2fsprogs-devel e2fsprogs* gcc*
#ubuntu 安装操作
apt-get install build-essential e2fslibs-dev e2fslibs-dev
2、编译装置
wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar xf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure
make
make install
cd /root/extundelete-0.2.4/src
extundelete -v
- 执行 make 命令会在 src 目录下生成 extundelete 可执行文件,可在此间接执行复原命令。
- 执行 make install 会将程序安装在 /usr/local/bin/ 下
复原文件操作
执行 extundelete 命令的当前目录必须是可写的。
1、查看要复原文件的分区的文件系统
df -Th
2、对要复原文件的分区解除挂载
umount /mnt
3、查看能够复原的数据
指定误删文件的分区进行查找, 最初一列标记为 Deleted 的文件,即为删除了的文件。
extundelete /dev/vdb1 --inode 2(根分区的 inode 值是 2)
4、复原单个目录
指定要复原的目录名,如果是空目录,则不会复原。
extundelete /dev/vdb1 --restore-directory ferris
当执行复原文件的命令后,会在执行命令的以后的目录下生成 RECOVERED_FILES 目录,复原的文件都会放入此目录中。如未生成目录,即为失败。
5、复原单个文件
指定要复原的文件名,如果几 k 大小的小文件,有很大几率复原失败。
extundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz
6、复原全副删除的文件
无需指定文件名或目录名,复原全副删除的数据。
extundelete /dev/vdb1 --restore-all
作者:漠效
_原文:https://blog.csdn.net/GX_1_11…