系统运维数据存储知识-系统数据误删除恢复
操作系统数据误删除恢复方法
在任何企业环境中,系统中所存储的数据信息都是至关重要,因此如果不小心删除了重要文件,轻则会给系统服务运行带来影响,重则会给整个公司企业带来重大的经济损失,所以在删除文件数据时必须谨慎的操作。但是,正所谓常在河边走,哪有不湿鞋的,有时候墨菲定律就是常出现在我们的生活中,越不想发生的事,越可能出现。在应对数据不小心误删除情况时,类似于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