一、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. 策略模式——Strategy
  2. python webbrowser安装_如何为python webbrows设置BROWSER环境变量
  3. c++读取和写入TXT文件的整理
  4. beeline连接hiveserver2报错:User: root is not allowed to impersonate root
  5. MQ java.lang.OutOfMemoryError: unable to create new native thread
  6. 在国企工作30年,单位现在协商买断工龄,3000/年该走吗?
  7. 海量数据库解决方案2011022101
  8. leetcode 链表1
  9. 初涉龙芯I/龙芯II
  10. hdu 4320 Arcane Numbers 1 多校联合赛(三)第一题
  11. HTTP的基础知识——HTTP协议
  12. FudanNLP学习实例——中文分词部分
  13. 金蝶K3 WISE 13.1版本服务器虚拟机环境部署
  14. MATLAB 内积外积混合积
  15. 计算机技能培训心得,计算机技能培训心得感想.doc
  16. 【演讲实录+视频】走近40+世界级AI专家!第三届中国人工智能大会资料分享(直播进行中_不断更新)
  17. 一元三次多项式因式分解的两种方法
  18. android指南针闪退,互动课堂及视频闪退修复方案(KB3132372)
  19. 45-Jenkins-Sidebar Link插件实现添加侧边栏
  20. Python传感器采集数据文件分析处理实验源码

热门文章

  1. python乌龟吃鱼_Python面向对象练习-通过pygame改良乌龟吃鱼
  2. 大学生静态HTML网页源码——佛山旅游景点介绍网页代码 家乡旅游网页制作模板 web前端期末大作业
  3. mathtype删除注册表的方法
  4. 2017服务器cpu性能排行,桌面CPU性能排行 CPU天梯图2017年7月最新版
  5. 极光设置一级二级标题
  6. 深圳市及各区人才补贴
  7. CAD绘图的基本步骤和重点
  8. VUE小需求——旋转小图标
  9. CentOS8桌面环境打开终端
  10. 皮尔逊相关 p值_皮尔逊,p值和图