最近一个新客户由于长期没做备份,再加上客户与之前的技术合作伙伴之间的一些不愉快。导致客户的整体linux系统被全部用rm删除。我们对这种技术人员的职业素养、道德品质和法律素养表示唏嘘,客户已经在第一时间进行了报案和立案工作,犯罪嫌疑人迟早会被绳之以法的。在唏嘘感叹的同时间,我们建议所有的企业第一时间要做好数据定时异地备份,下面介绍linux下的ext4文件系统删除原理。

警告:若数据块被覆盖,则无法恢复,第一时间问清楚是什么时候删除的数据,叮嘱不要继续再动了!

一、文件删除原理

在ext3/4文件系统中,inode索引节点除了存放文件属性还指向文件的block节点,是书的目录,block存放文件的实际数据,是书的每一页,文件的上级目录的block存放的是文件名及其inode节点编号,删除文件实际上是删除文件名和inode节点编号的关联以及inode节点内的指针信息,那么实际上,文件的block还在,加上ext3/4文件系统是日志文件系统,格式化时会分配一个固定大小的空间的日志文件journal,它记录创建和删除文件的记录,当删除一个文件,操作系统首先把文件inode信息和文件名称写入到journal,然后删除文件并清空inode原始数据指针。

二、有两种情况无法恢复

1)当新的数据写入到被删除文件占用的block后,原来的inode号就指向新的数据,那么这样是无法找回的。

2)当journal日志文件存满之后,会释放前面的空间,循环使用,存放最新的记录,如果删除文件的记录被覆盖,是恢复不了的。

三、恢复文件的原理

根据journal日志文件残留inode的信息,定位到相关目录,恢复残留inode对应的block。但日志文件恢复只适合小数据量的恢复,因为journal的空间有限,存放不了太多记录。对于大文件如oracle等数据库文件恢复采用逆向推算和数据文件本身特点来提取。

简单说,ext4中文件和目录包含元数据和实际数据两个部分,实际数据存储了文件的实际内容,元数据存储了文件的创建修改删除时间以及实际数据的地址。文件和目录的元数据由一个inode结构表示。所有的inode存储在inode数组中,根据序号访问。

Linux下文件删除的原理

Linux下控制文件真正被删除的计数器

Linux是link的数量来控制文件删除的。只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来讲,每个文件都有两个link计数器:i_count和i_link

i_count的意义是当前文件使用者(或被调用)的数量

当一个文件被某一个进程引用时,对应的这个值就会增加

i_nlink的意义是介质连接的数量(硬链接的数量)

当创建文件的硬链接的时候,这个值就会增加

可以理解为i_count是内存引用计数器,i_nlink是硬盘的引用计数器

rm命令原理

对于删除命令rm而言,实际上就是减少磁盘引用计数i_nlink。

Q:如果一个文件正在被某个进程调用,而用户却执行rm把文件删除了,那么会出现什么结果?当用户执行rm删除文件后,再执行ls或其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容,这又是为什么呢?

A:rm操作只是将文件的i_nlink减少了,如果没有其它的链接i_nlink就为0了。但是由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以执行rm操作,系统并没有真正的删除这个文件,只有当i_nlink和i_count都为0的时候,这个文件才会被真正的删除。也就是说,必须要解除该进程对该文件的调用,才能真正的删除。

Q:当文件没有被调用,执行了rm操作之后,还能找回被删除的文件吗?

A:rm操作只是将文件的i_nlink减少了,或者说置为0,实际上就是将inode的链接删除了,此时,并没有删除文件的实体(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果继续写入数据,那么新数据可能会被分配到被删除的数据的block数据块,文件就被真正的回收了。

linux恢复rm命令,linux下rm删除与恢复相关推荐

  1. linux新建自定义命令,Linux 创建自定义命令

    Linux 创建自定义命令 Linux 可以创建自定义使用命令 这里我们采取使用"alias"命令.这里我们首先了解两个文件,通过这两个文件我们可以根据环境配置相应的自定义命令. ...

  2. 命令行下从bak文件恢复sqlserver数据库方法

    命令行下从bak文件恢复sqlserver数据库方法 注:本文所示访问从SqlServer 2000 - 2014版都是通用的 参考:http://blog.sina.com.cn/s/blog_5c ...

  3. linux shell 未找到命令,未找到linux问题setenv命令(linux issue setenv command not found)

    未找到linux问题setenv命令(linux issue setenv command not found) 我在Linux中开发了一个Tcl / Tk脚本工具. 为了运行该工具,每次需要在she ...

  4. linux恢复rm命令,Linux系统下不小心使用rm命令删除的文件能有办法恢復吗?

    linux的文件被rm删除是可以通过linux自带的文件恢复工具debugfs来进行恢复,但是只能恢复ext2文件系统的文件,不能恢复ext3文件系统的文件. 1,首先查看需要恢复的文件所在的文件系统 ...

  5. linux mv复制命令,linux中删除复制移动文件rm,mv,cp命令详解linux操作系统 -电脑资料...

    在linux中对文件的复制删除移动分别会使用到rm,mv,cp三个命令,下面我来给大家介绍一下rm,mv,cp命令对文件的常规操作吧, 先看实例 删除复制移动文件命令 Linux代码 rm -rf / ...

  6. linux删除del后缀文件,linux删除命令_linux下如何删除一个文件?

    关于linux的删除命令 先登录linux服务器. linux下的删除命令是 del吗 不是del.是rm:remove 移除的意思.rm的用法如下: 1.删除文件夹以及文件夹中的所有文件命令: rm ...

  7. linux 阻止 复位命令,linux防误删操作(使用safe-rm;使用mv命令删除文件)

    本文于2021年1月16日由AlvinCR更新 1.基于文本的Linux为什么没有回收站? 个人观点: 1.linux是指令行操作系统,不同于win的图形化界面,linux无法方便的快速恢复文件,例如 ...

  8. linux 移动压缩包 命令,Linux命令,复制,移动,删除,创建,解压缩,修改权限

    cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大. 语法: cp [选项] 源文件或目录目标文件或目录 说明:该命令把指定的源文件复制到 ...

  9. linux清屏命令_linux下的7个常用命令的基本使用

    02.Linux下的7个常用命令的基本使用 小技巧: 使用[ctrl + shift + = ]可以放大终端窗口的字体显示使用[ctrl + -]可以缩小终端窗口的字体显示 ls:查看当前目录下的文件 ...

最新文章

  1. 强大:MyBatis 流式查询
  2. NLP情感分析 动手学深度学习博客
  3. Ubuntu 11.10中用xen-tools安装虚拟机(UbuntuCentOS)
  4. HDOJ1860 ( 统计字符 ) 【水题】
  5. 前端学习(2445):分页的实现
  6. java 双等号(==) 与equals方法的使用区别
  7. 让我们来比较C#,C++和Java之间重写虚函数的区别
  8. CTA策略06_BollChannelStrategy
  9. docker登录密码错误_Docker安装运行Mysql 5.7.31容器并修改数据库密码
  10. Nginx 学习--初级篇,Nginx 认识以及作用
  11. 淘宝手淘搜索怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  12. springboot整合aceadmin
  13. Cohen's d 效应量计算
  14. AAAI 2020对抗样本论文
  15. 如何对计算机进行磁盘整理,碎片整理,详细教您怎样进行磁盘碎片整理
  16. android流光字体实现,【流光算法代码实现】Demo
  17. 电脑系统服务器丢失怎么办,电脑本地连接不见了,小编教你怎么解决
  18. 三菱FX5U系列PLC给程序设置密码的具体方法和步骤
  19. 实体中list属性为空或者null,设置为空数组
  20. 召回率与精确率的理解

热门文章

  1. 继承和多态详解【java】
  2. Citypersons数据集转VOC标准格式(YOLO 目标检测txt格式)
  3. 声学传感技术综述 (A survey on acoustic sensing)
  4. mybatis-plus 实现一对一和一对多关系
  5. 你和云的距离只缺数据库服务器的一场大火
  6. 普通相机也可以拍摄720°全景你知道吗
  7. linux 常用压缩格式,Linux下常用压缩格式的压缩与解压方法
  8. 帝国插件-最全帝国插件中心免费下载
  9. 经典算法之线切面(1) 切蛋糕
  10. 95个新基建项目,总投资4119亿元! 深圳8月实现5G全覆盖