系统运维数据存储知识-系统数据误删除恢复
liebian365 2024-10-31 15:19 17 浏览 0 评论
本文目录
- 利用 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
相关推荐
- C#夯实基础-Lambda在List中的使用
-
在C#中基本类型比如List,Dictionary,数组等都有委托来实现相关的操作。此时Lambda表达式就可以使用了.实例1,查找字符串List的包含a的元素...
- 在C#中,如何实现对集合中元素的自定义排序?
-
在C#中,可以通过多种方式实现对集合中元素的自定义排序,主要包括:...
- C++11 新特性面试题_c++ 11 面试题
-
1、C++11中引入了哪些新的智能指针类型?请描述它们的用法和区别。C++11中引入了三种新的智能指针类型:std::unique_ptr,std::shared_ptr,和std::weak_...
- 为什么要使用lambda表达式?原来如此,涨知识了
-
为什么要使用Lambda表达式先看几段Java8以前经常会遇到的代码:创建线程并启动...
- [编程基础] Python lambda函数总结
-
Pythonlambda函数教程展示了如何在Python中创建匿名函数。Python中的匿名函数是使用lambda关键字创建的。...
- 硬核!Java 程序员必须掌握的 10 个 简化代码的 Lambda 表达式!
-
大家好,我是一位在架构师道路上狂奔的码农,今天给大家介绍一下程序员必须掌握的10个Lambda表达式,这些表达式几乎涵盖了在实际编程中经常用到的常见场景。相信通过这10个Lambda表...
- 一文读懂lambda表达式_lambda表达式由来
-
作者:youngyan,腾讯PCG数据工程工程师...
- Java基础知识 - lambda 表达式_javalambda表达式用法
-
1、表达式语法1)lambda的命名采用的是数学符号λ;...
- Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter
-
什么是匿名函数?定义:没有函数名的自定义函数场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。...
- Java Lambda表达式详解(非常全面)
-
JavaLambda表达式是JDK8引入的,是一个比较重要的特性。@mikechenLambda表达式简介...
- 了解 Lambda:Python 中的单个表达式函数
-
Python中的lambda关键字提供了声明小型匿名函数的快捷方式。Lambda函数的行为与使用...
- 在C#中使用Lambda编写一个排序算法,比较其与传统排序算法的优劣
-
使用Lambda表达式编写排序算法在C#中,Lambda表达式可以用来简化排序逻辑的编写,尤其是在需要自定义排序规则时非常方便。以下示例展示了如何用Lambda表达式实现排序,并与传统排...
- 一日一技:python中的匿名函数 lambda用法
-
匿名函数lambda,语法如下:lambdaarguments:expression...
- 《回炉重造》——Lambda表达式_回炉重造是贬义词吗
-
前言Lambda表达式(LambdaExpression),相信大家对Lambda肯定是很熟悉的,毕竟我们数学上经常用到它,即λ。不过,感觉数学中的Lambda和编程语言中的Lamb...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)