本文目录
- 利用 Linux 系统软件恢复数据-lsof
- 利用 Linux 系统软件恢复数据-extundelete
操作系统数据误删除恢复方法
在任何企业环境中,系统中所存储的数据信息都是至关重要,因此如果不小心删除了重要文件,轻则会给系统服务运行带来影响,重则会给整个公司企业带来重大的经济损失,所以在删除文件数据时必须谨慎的操作。但是,正所谓常在河边走,哪有不湿鞋的,有时候墨菲定律就是常出现在我们的生活中,越不想发生的事,越可能出现。在应对数据不小心误删除情况时,类似于 windows 系统误删了文件,可以使用一些软件进行恢复操作。同样,Linux 也是有几款软件可以做到误删除软件之后的数据恢复,本文就给大家介绍几种亲测有效的数据误删除恢复方式。
注意事项:
虽然有软件可以对误删的数据进行恢复,但是完全恢复数据的概率并不是百分百的。因此,使用 rm 命令删除文件的时候,建议大家做好以下几点。
-
重要的数据在进行编辑修改时,一定要有备份数据信息;
-
在无用数据文件信息进行删除操作时,建议可以先放入临时目录几天,系统服务运行无影响后再删除清理磁盘空间;
-
一旦误操作删除数据时,恢复删除的数据前,删除文件的目录内不能往进存放新东西,否则覆盖掉的信息无法找回
1.利用 Linux 系统软件恢复数据-lsof
lsof(list open files)是一个查看进程打开的文件的工具。在 linux 系统中一切皆文件,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息。
1.1 恢复数据原理介绍
这个命令实际上并不能直接用来恢复文件,不过它可以列出被各种进程打开的文件信息。配合其他命令,从/proc 目录下的信息中恢复已删除的文件,但能恢复的文件必须是被进程调用打开的状态。
/proc 目录是挂载的是在内存中所映射的一块区域,当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。因此,当我们对文件进行读取或写入时(即有进程正使用文件时),哪怕硬盘中的该文件已删除,还可以从内存中的信息恢复文件。
注意事项:
- 必须以 root 用户的权限运行, 因为 lsof 需要访问核心内存和各种文件;
- 只能恢复“文件已删除,但进程仍保持打开该文件的状态”的文件;
- 如果误删了目录,目录中的其他文件未被进程打开,没有进行使用的文件将无法使用此方法恢复。
1.2 命令操作输出信息
[root@web01 ~]# lsof |head -n10
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 8,3 4096 64 /
systemd 1 root rtd DIR 8,3 4096 64 /
systemd 1 root txt REG 8,3 1612152 34018594 /usr/lib/systemd/systemd
systemd 1 root mem REG 8,3 20064 45721 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 8,3 265600 48715 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 8,3 90248 747862 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 8,3 157424 48741 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 8,3 23968 49064 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 8,3 19896 48599 /usr/lib64/libattr.so.1.1.0
以上命令输出信息,各列代表含义解释说明:
编号信息 | 各列信息 | 含义解释 |
---|---|---|
① | COMMAND | 服务进程名称信息 |
② | PID | 服务进程 PID 编号信息 |
③ | TID | 服务线程 TID 编号信息 |
④ | USER | 服务进程管理者用户信息 |
⑤ | FD | 用来识别该文件,文件描述符信息 |
⑥ | TYPE | 用来识别该文件所属类型 |
⑦ | DEVICE | 指定设备存储编号信息 |
⑧ | SIZE | 指定文件的大小信息 |
⑨ | NODE | 索引节点信息,文件在磁盘上的标识 |
⑩ | NAME | 具体打开文件的路径和确切名称 |
此命令长使用参数介绍:
编号信息 | 参数信息 | 参数解释 |
---|---|---|
① | -c | 显示某进程现在打开的文件 |
② | -p | 显示哪些文件被某 pid 进程打开 |
③ | -g | 显示归属某 pgid 的进程情况 |
④ | -d | 显示目录下被进程开启的文件 |
⑤ | -i | 显示打开指定端口的进程 |
1.3 系统恢复文件操作
环境准备阶段:
准备恢复数据的环境,在/test/目录创建一个文件 oldboy.txt,其中一个远程连接会话窗口在编辑查看此文件,然后另一个终端将其删除
A 窗口 ssh 连接会话中,准备出要准备删除的数据信息,并同时查看打开文件
[root@web01 ~]# mkdir /test/
在 /var/spool/mail/root 中有邮件
[root@web01 ~]# touch /test/oldboy.txt
[root@web01 ~]# echo oldboyedu.com >/test/oldboy.txt
[root@web01 ~]# less /test/oldboy.txt
oldboyedu.com
/test/oldboy.txt (END)
B 窗口 ssh 连接会话中,查看被加载的文件进程信息
[root@web01 ~]# lsof -c less
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
---部分无关信息省略---
less 28025 root 4r REG 8,3 14 68076441 /test/oldboy.txt
将打开文件进行删除,查看打开文件状态信息,发现进程加载的文件显示 deleted 信息,目录下已经不存在被删除的文件数据
[root@web01 ~]# rm -f /test/oldboy.txt
[root@web01 ~]# lsof -c less
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
---部分无关信息省略---
less 28025 root 4r REG 8,3 14 68076441 /test/oldboy.txt (deleted)
[root@web01 ~]# ll /test
总用量 0
数据恢复阶段:
切换到/proc 下,删除文件对应的进程的 pid 下的文件描述符中的目录中;将对应的内容重定向或 cp 到其他文件中,重点关注:PID 与 FD。
[root@web01 fd]# cd /proc/28025/fd/
[root@web01 fd]# cat 4
oldboyedu.com
[root@web01 fd]# ll
总用量 0
lrwx------. 1 root root 64 9 月 28 22:03 0 -> /dev/pts/1
lrwx------. 1 root root 64 9 月 28 22:03 1 -> /dev/pts/1
lrwx------. 1 root root 64 9 月 28 22:03 2 -> /dev/pts/1
lr-x------. 1 root root 64 9 月 28 22:03 3 -> /dev/tty
lr-x------. 1 root root 64 9 月 28 22:03 4 -> /test/oldboy.txt (deleted)
[root@web01 fd]# cat 4
oldboyedu.com
[root@web01 fd]# cat 4 >/test/oldboy.txt_recovery
[root@web01 fd]# cat /test/oldboy.txt_recovery
oldboyedu.com
至此,丢失数据信息恢复完毕
2.利用 Linux 系统软件恢复数据-extundelete
Extundelete 是在 Linux 下,基于开源的数据恢复工具。使用阿里云的云服务器 ECS,您可以方便地安装,及时还原误删除的重要文件。
2.1 恢复数据原理介绍
extundelete 恢复文件时并不依赖特定文件格式,首先 extundelete 会通过文件系统的 inode 信息,来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和 inode。然后利用 inode 信息结合日志去查询该 inode 所在的 block 位置,包括直接块,间接块等信息。最后利用 dd 命令将这些信息备份出来,从而恢复数据文件。相比于另一种 ext3grep 数据恢复软件只能恢复 ext3 文件系统的文件,其适用范围更广,恢复速度更快。
2.2 软件部署安装过程
软件安装环境准备
软件名称 | 部署信息 | 链接地址 |
---|---|---|
extundelete | 官方网站地址 | http://extundelete.sourceforge.net/ |
extundelete | 程序下载地址 | https://jaist.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 |
最新版本的 extundelete 是 0.2.4,于 2013 年 1 月发布,暂时未有更新版本 |
上表中是软件程序的获取方式,可以提前进行下载保存。
注意事项:
- 在数据删除之后,要卸载被删除数据所在的磁盘或是分区
- 如果是系统根分区遭到误删除,就要进入单用户模式,将根分区以只读的方式挂载,尽可能避免数据被覆盖
- 数据被覆盖后无法找回
- 恢复仍有一定的机率失败,平时应对重要数据作备份,小心使用 rm
软件安装部署过程
解决软件安装依赖关系:
# centos安装操作
yum install -y e2fsprogs-devel e2fsprogs* gcc*
# ubuntu安装操作
apt-get install build-essential e2fslibs-dev e2fslibs-dev
软件编译安装部署过程:
wget https://jaist.dl.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
2.3 系统恢复文件操作
执行extundelete
命令的当前目录必须是可写的.
查看要恢复文件的分区挂载情况与文件系统类型:
[root@web01 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
---部分无关信息省略---
/dev/sdb1 ext4 9.8G 37M 9.2G 1% /mnt
在指定分区挂载目录中创建数据信息,并删除:
[root@web01 ~]# cd /mnt
[root@web01 mnt]# mkdir test
[root@web01 mnt]# echo oldboyedu.com >test/oldboy.txt
[root@web01 mnt]# cat test/oldboy.txt
oldboyedu.com
[root@web01 mnt]# rm -rf test/
[root@web01 mnt]# echo oldboyedu.com >oldboy.txt
[root@web01 mnt]# rm -f oldboy.txt
将要恢复文件的分区进行卸载操作:
[root@web01 ~]# umount /mnt
查看可以恢复的数据
# 指定误删除文件的分区进行查找,最后一列标记为delete的文件,即为删除了的文件
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
test 393217 Deleted
oldboy01.txt 12 Deleted
恢复单个目录
# 指定要恢复的目录名,如果是空目录则不会恢复
extundelete /dev/vdb1 --restore-directory test
当执行恢复文件的命令后,会在执行命令的当前的目录下生成RECOVERED_FILES
目录,恢复的文件都会放入此目录中。如未生成目录即为失败。
恢复单个文件
# 指定要恢复的文件名,如果几k大小的小文件,有很大几率恢复失败
extundelete /dev/vdb1 --restore-file oldboy01.txt
恢复全部删除的文件
# 无需指定文件名或目录名,恢复全部删除的数据
extundelete /dev/vdb1 --restore-all
原文链接:https://www.cnblogs.com/oldboy-heqing/articles/13744890.html