【CVM】Linux 误删除文件怎么恢复–云惠网

云惠网小编 2020年12月31日11:40:56
评论
1300字阅读4分20秒
摘要

Linux 误删除文件一般场景如下:

广告也精彩

Linux 误删除文件一般场景如下:

场景一:删除文件时,文件正在被其他进程调用

场景二:删除文件时,文件没有被其他进程调用

场景一:删除文件时,文件正在被其他进程调用

技术原理

对于进程正在使用文件的场景,数据可以恢复是由于Linux系统下文件包含两个部分:inode 和 block ,其中 inode 中每个文件都有 2 个计数器:i_count 和 i_nlink 。只有当 i_count 和 i_nlink 均为 0 时,文件才算被删除,但被其他进程调用的文件,i_count 将不为 0。

i_count :当一个文件被一个进程引用时,其数值会增加 1,主要是用来记录文件被进程引用的次数

i_nlink :记录硬链接个数

恢复示例

1.创建测试文件 Delete.txt ,并使用 tail -f 程序持续调用此文件;

使用 tail -f 确保 i_count 不为 0

2.在新终端中,使用 rm -rf 命令删除该文件;

删除 Delete.txt 文件

3.lsof 查看被删除文件 Delete.txt 的被调用情况;

Delete.txt 被 PID 为 21205 的 tail 进程调用

4.在 /proc/21205/fd 目录下查找 Delete.txt 文件(fd 目录下可查看当前进程持有的文件句柄);

找到 3 对应着被删除的 Delete.txt

5.使用 cp 命令直接恢复到对应目录,核实文件完整性;

恢复为 Delete.restore

场景二:删除文件时,文件没有被其他进程调用

技术原理

没有被进程调用且无其他硬链接的文件在被删除后,i_count 和 i_nlink 将为 0。但文件本身依赖于两部分【inode & block】,rm 操作本身删除的仅是 inode 连接信息,不会删除 block ,而真正的数据恰恰是存在于 block 中的,故可当前场景下可通过 block 找回数据【需要借助 extundelete】。

inode :用于存放文件的元数据,并通过索引信息关联到磁盘中具体 block 单元

block :数据块,用来实际存放数据的单元

风险提醒

如果有进程在不断往磁盘写入数据,此时如果将对应的数据分配到之前被误删除的 block 上时,block 上原始的数据将被覆盖,这个时候数据将无法再次找回,故当前场景下找回时,请务必在发生数据误删除时,停止一切写入操作【①umount磁盘;②readonly挂载磁盘】

恢复示例

1.先 yum 安装 extundelete;

extundelete 为 ext 文件系统数据恢复工具

2.数据盘 vdb 初始化后挂载到 mnt ,在 mnt 下创建文件 Delete.txt 和 目录 Delete.dir;

挂盘,创建文件和目录

3.rm -rf * 删除 mnt 目录下所有文件和目录;

删除文件和目录

4.卸载数据盘 vdb ,防止数据后续的数据写入覆盖 block 中误删除的数据;

卸载 vdb

5. extundelete 命令核实此磁盘 block 中被删除的文件信息【extundelete /dev/vdb --inode 2】;

block 中查找被删除的文件

6.extundelete 命令恢复文件和目录;

extundelete /dev/vdb --restore-all 尝试恢复所有,执行完成后发现产生新目录(RECOVERED_FILES):

尝试找回数据
腾讯云618
未分类
云惠网小编
SpringCloud -- Config、Bus解析

SpringCloud — Config、Bus解析

1、Config1.1、概述简介1. 分布式面临的问题微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要...
Java数据结构-了解复杂度

Java数据结构-了解复杂度

2.实例分析与计算  四.写在最后  // 计算斐波那契递归fibonacci的时间复杂度 int fibonacci(int N) { return N < 2 ? N : fibonacci...
[深度解剖C语言] --关键字 static

[深度解剖C语言] –关键字 static

static ---最名不副实的关键字目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量static的作用:1.static修饰全局变量我们创建两...
Java数据结构-认识顺序表

Java数据结构-认识顺序表

目录二.顺序表1.概念及结构2.顺序表的实现打印顺序表获取顺序表的有效长度在pos位置新增元素判断是否包含某个元素查找某个元素对应的位置获取/查找pos位置的元素给pos位置的元素...
腾讯云618

发表评论