一、linux误删除数据的场景

在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了。而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就是打脸时刻 。新人操作文件时往往战战兢兢、反复确认,反而不容易出错。如果你也是一个有多年工作经验的工程师,也给自己提个醒:淹死的都是会游泳的。我们需要区分两种场景来进行误删除文件的恢复:

  • 第一种场景:被删除的文件正在被进程使用

  • 第二种场景:文件没有被任何进程使用

第一种场景的数据恢复相对简单一些,第二种相对麻烦些。

二、场景一数据恢复实验

第一种场景:被删除的文件正在被其他进程使用。我们先创建一个独立目录testdel,用于完成我们的实验。然后使用echo命令创建一个文件test-recovery.txt,放在testdel目录下,文件内容是:“test file delete recovery”。重点来了:我们使用命令tail来一直监听这个文件,表示这个文件一直被tail进程监听占用。

$ mkdir ./testdel;
$ echo "test file delete recovery"  > ./testdel/test-recovery.txt;
$ tail -f ./testdel/test-recovery.txt;

此时我们新打开一个linux终端,完成文件删除操作,文件删除之后使用ls命名在该目录下查看不到任何的文件。

$ rm -fr ./testdel/test-recovery.txt;
$ ls -l ./testdel

下面我们来进行文件的恢复,执行下文中的lsof命令,在其返回结果中我们可以看到test-recovery.txt (deleted)被删除了,但是其存在一个进程tail使用它,tail进程的进程编号是1535。

$ lsof | grep test-recovery.txt;
tail      1535        kafka    3r      REG  253,2        26  34095906 /home/kafka/testdel/test-recovery.txt (deleted)

然后我们使用cd /proc/1535/fd命令进入该进程的文件目录下,1535是tail进程的进程id,这个文件目录里包含了若干该进程正在打开使用的文件。我们看到文件名为3的文件,就是我们刚刚“误删除”的文件,所以我们使用下面的cp命令把它恢复回去。至此,有进程引用的文件误删除恢复就完成了。

cp ./3 /home/kafka/testdel/test-recovery.txt;

三、场景二数据恢复

对于场景二,没有程序使用该文件,则该文件被删除之后进行文件恢复就稍微麻烦一些了。首先我们要区分当前操作系统挂载的磁盘目录的文件格式,比如:执行cat /etc/fstab得到如下的结果除了xfs磁盘文件格式,linux常用的还有ext4的磁盘文件格式。每种磁盘文件格式,数据恢复的方式,使用到的工具都是不一样的。鉴于篇幅的问题,我就不在本文中介绍了,请关注我我会继续更新!

四、深入-为什么数据可以恢复?

第一种情况:当某个文件正在被某个程序使用时,linux针对该文件有两个计数器

  • i_count计数器:该文件可能被多个进程使用,每一个进程使用该文件,i_count数值都会加1。反之,进程释放该文件的引用,则该计数器减1

  • i_nlink作用是记录该文件产生的硬链接的次数(在linux中可以使用ln命令创建文件的硬链接)。

当以上两个计数器都为0的时候,该文件实际上就是属于没有进程使用它的状态,就直接被删除掉了。如果有进程使用它,那么该文件的i_count数值不为0,就可以在/proc/<进程id>/fd目录种找回来

第二种情况:此时没有进程使用被删除的文件,被删除的文件的两个计数器i_count和i_link此时都为0。这个时候我们要理解一个概念

  • 操作系统文件删除:操作系统层面的删除文件,只是删除文件的inode信息。删除inode信息之后,该文件对于操作系统及操作系统的用户不可见了。

  • 磁盘文件物理删除:我们知道物理磁盘是由一个个数据块组成的,所以如果想恢复文件,我们需要找到存放文件的数据块block单元,真正在磁盘上存储文件的block暂时并未被删除(准确的说是暂时并未被覆盖)。

需要注意的是:存放数据块block单元的文件内容会一直存在么?答案是否定的,因为该数据块的内容被删除了,所以该数据块是可以被其他进程重新利用写入数据的。所以,当你发现你误删除了非常重要的文件时,你需要做的第一件事就是将磁盘从操作系统中unmout,或者停止所有进程向磁盘中写数据。因为写作数据操作,可能会占用覆盖你"误删除文件"所在数据块,一旦数据块被写的数据写入覆盖,你的数据文件就再也找不回来了。

linux文件误删除该如何恢复?相关推荐

  1. linux服务器格式化恢复,LINUX下误删除、格式化恢复解决方案

    原标题:LINUX下误删除.格式化恢复解决方案 一.总述:基于linux系统,删除数据及格式化后的数据恢复方案 1 .基于EXT2/EXT3/EXT4文件系统 2 .基于Reiserfs文件系统 3 ...

  2. 误删除oracle目录,LINUX下误删除Oracle数据库恢复方法

    原标题:LINUX下误删除Oracle数据库恢复方法 在LINUX下的Ext3/Ext4文件系统下,如果误删除了数据,数据恢复难度很大.如果说删除的文件数量不大(一般在几百个文件以内),还能够通过.j ...

  3. linux手误格式化,LINUX下误删除、格式化恢复解决方案(示例代码)

    一.总述:基于linux系统,删除数据及格式化后的数据恢复方案 1 .基于EXT2/EXT3/EXT4文件系统 2 .基于Reiserfs文件系统 3 .基于Xfs文件系统 二.解决方案 2.1 恢复 ...

  4. word文档怎么找回误删的文件_Word文件误删除之后如何恢复的方法

    说明 由于长期从事企业办公环境的管理工作,经常需要对日常企业职员的办公软件等诸多问题进行管理和解决,因此累积了不少相关的经验.最近一段时间内常常发现这样的问题,很多企业职员在电脑操作的过程当中,经常会 ...

  5. Linux文件误删除恢复工具

    一.ext文件系统误删除恢复工具 1.extundelete反删除工具简介 在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs.R-Linux.ext3grep.extundelet ...

  6. linux文件被覆盖如何恢复_在Linux下误删文件后恢复

    1.给虚拟主机添加一块磁盘,磁盘为/dev/sdb,如下: 2.格式化磁盘,并进行挂载 # mkfs.ext4 /dev/sdb # mkdir /usr/local/dbdata/ # mount ...

  7. linux pannel 误删除后的恢复方法

    笔者使用debian作为开发环境, 有一次不小心将最上面的panel 整个删除掉了.现将恢复方法介绍如下: 1,在最下面未删除的panel上点击New Panel ,linux会创建一个panel到桌 ...

  8. 达梦数据库表数据或者物理文件误删除或者损坏恢复方法

    一.数据库表数据误删除 情况一:之前没有做备份或者忘记做备份了,这种情况下不能恢复误删除的数据 情况二:做了备份并且也配置了归档,这种情况下可以通过备份文件恢复+还原归档日志的方式恢复到指定时间点 模 ...

  9. linux集群中删除的文件去哪里找回,恢复Linux误删除文件系列之extundelete工具

    下载安装 extundelete 之前要安装两个软件包 e2fsprogs 和 e2fsprogs-libs 安装顺序:e2fsprogs --> e2fsprogs-libs --> e ...

  10. Linux环境下利用句柄恢复Oracle误删除的数据文件

    在误删除Oracle的数据文件后,如果未关闭数据库,文件句柄还没有释放,且被删除的数据文件占用的磁盘块未被复写,则可以利用句柄的方式来恢复数据文件.下面模拟恢复过程. (一)环境 OS版本:redha ...

最新文章

  1. 线程池 And 线程池的使用(基于.net平台)
  2. 2021网络药理学研究的免费数据库、在线平台与软件工具汇总整理介绍
  3. Swift-Tips之重复字符串
  4. CentOS 7 解决丢失 nginx.pid 1
  5. jms spring_JMS和Spring:有时很重要的小事情
  6. 倒排索引、分词、同义词
  7. 论文笔记_CV_AD_3D Reconstruction using a Sparse Laser Scanner and a Single Camera for Outdoor Autonomous
  8. 火狐无法安装扩展_立即安装的前5个Firefox扩展
  9. tp5调用阿里云短信接口
  10. CMD窗口下强制删除文件
  11. java catch中throw_Java中异常关键字throw和throws使用方式的理解
  12. FRS.0020The subservice has not been subscribed.解决方案
  13. 常见帧率 与 帧率运用
  14. 客户体验模型|客户体验分析的四个关键要素
  15. 非最小相位系统的闭环频域辨识算法
  16. 嵌入式实践教程--ASOC之Codec
  17. 股票开发中用到的专业英文
  18. DC-2靶机渗透测试记录
  19. D26 Scala增强
  20. echarts设置图表滚动条 设置滚动条高度

热门文章

  1. 微信小程序使用建行支付
  2. 史上最全编程语言列表,你掌握了哪些?
  3. 已安装pywinrm,仍报错winrm or requests is not installed: No module named winrm
  4. 中坚力量:Isilon
  5. ESP32-土壤湿度传感器
  6. Python Scrapy爬虫框架详解
  7. Mysql基本知识1
  8. Collecting package metadata (current_repodata.json): failed(解决方案)
  9. [已解决]datetime.date is coerced to a datetime. In the future pandas will not coerce, and ‘the values
  10. 如何批量压缩图片?这几个方法值得一试