爱收集资源网

rm -rf误删数据怎么办?教你恢复数据

网络整理 2023-09-28 05:05

怎样恢复rm-rf删掉的数据

文章目录

一、删除数据的两种场景第1个是在执行rm-rf删掉文件时,该文件正在被进程使用第2个是这个文件并没有被其他进程所使用,而被误删掉二、为什么数据可以恢复

神奇的link计数器

既然我执行了rm-rf命令,不就是删掉文件了吗,为何又可以恢复数据呢?首先我来为你介绍一下其缘由,对于第1种进程正在使用文件的场景,数据可以恢复是由由于Linux里,每位文件都有2个link计数器:i_count和i_nlink。

i_count的作用是当一个文件被一个进程引用时,它的数值会加1,也就是说它记录的是文件被进程引用的次数。i_nlink的作用则是记录文件形成硬链接的个数。Linux系统只有在两个数值都清零的时侯,文件才被系统觉得是删掉的。假如我们执行了rm-rf,却并没有把i_count删掉,假定此时删掉文件有进程在使用,这么它(i_count)数值不为0。这个时侯就是文件看似被删掉,但在操作系统还是能方便的恢复回去。

这就是第1种场景删掉数据才能被寻回的诱因(因为i_count不为0)。

第2种场景是将没有被进程使用的文件误删掉,此时i_count和i_nlink都为0。这个时侯文件的inode联接信息早已被删掉了如何恢复误删除的qq聊天记录,我们就须要通储存文件的block单元,做数据块的数据寻回。在系统上我们能看见的文件内容包括:文件名、文件大小、内容,但实际上它的储存依赖两个特别重要的单元,一个是inode,它用于储存文件的相关元数据,它的元数据里会有一个类似于索引的值,就能索引到旁边具体储存数据的block单元如何恢复误删除的qq聊天记录,block是一个数据块,拿来实际储存数据。我们在删掉文件时,虽然是把inode的链接删掉了,而且block数据块,并没有删掉。

所以这个时侯我们仍然可以通过剖析前端的block块,对文件进行恢复。由于block块保存着真实的数据,理论上可以作完整的寻回数据,不过有一个风险:假如有进程在不断往c盘写数据时,须要申请新的block块,假如操作系统分配已删掉文件的block块时,这么新的写入数据都会覆盖block原先的数据,这时都会导致数据真正遗失的风险。

所以,假若出现这样场景引起数据误删掉,须要第一时间umount目录所在的c盘设备。假如没有其他进程在不断地往同一个c盘块(block)里写数据,这么你的数据理论上还是在block块上面,仍然可以通过相关剖析把数据寻回。

这就是我们为何可以在这两个场景中把数据寻回的缘由,这么接出来我将讲解怎样来恢复数据。我会通过两个案例来进行演示。

三、案例演示

我们先演示第1种场景,第1种场景是文件在被进程使用过程中被删掉,这些场景该怎么去恢复文件呢?

3.1、恢复在被进程使用过程中被删掉的文件

误删聊天记录怎么恢复qq_如何恢复误删除的qq聊天记录_误删除的qq聊天记录怎么恢复

新建文件delete.txt,文件内容为delete-test

我们用tail这个命令始终占用这个文件

接出来在另一个窗口,我同样到/test目录下,而此时我要执行的是rm-rf./deletefile.txt,这样就“彻底”把这个文件删掉。接出来我们通过ls,可以看见本地早已没有这个文件了。

如今我们早已模拟出文件在进程使用过程中被删掉的场景,这么接出来我们来演示恢复该文件。

首先须要找到是那个进程在使用这个文件,我们可以通过lsof命令,grep刚才删掉的文件名称(deltefile.txt),会列举当前使用文件的进程。我们会听到tail命令正在使用,它(进程)的pid是3609。

接出来我们要按照这条线索去恢复数据。我们晓得该进程会有使用的文件句柄,这么我们对该进程的文件句柄目录进行查找,cd到/proc/{pid}/fd目录下(这儿pid为3609),我们到这个目录下,输入ls-l命令,这个时侯我们会听到,使用这个文件(/root/delete/deletefile.txt)而且它的文件句柄为3。

接出来我们要想办法把这个文件进行恢复,输入cp3/opt/recovertest/deletefile.txt_bak,这时我就把这3个文件做了一个拷贝,实现将数据恢复到/opt/recovertest/deletefile.txt_bak文件。

这个时侯cd/opt/recovertest/,catdeletefile.txt_bak看一下上面的内容,可以发觉这个文件的内容与刚才生成的的测试文件内容一致,所以刚才删掉的文件恢复完毕。

接出来我来演示删掉数据场景2(在没有进程使用文件的情况下,怎样恢复删掉的文件)。演示这些场景,保险起见我在本地多挂载了一块SDB的独立硬碟设备。

误删除的qq聊天记录怎么恢复_如何恢复误删除的qq聊天记录_误删聊天记录怎么恢复qq

3.2、恢复没有被进程使用过程中删掉的文件

安装extundelete

wget https://ncu.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar -jxvf extundelete-0.2.4.tar.bz2
cd extundelete
chmod +x ./configure
yum install -y e2fsprogs-devel e2fsprogs e2fsprogs-libs gcc-c++ gcc  ##安装环境依赖
./configure
make && make install

这些情况要怎么恢复数据呢?我们须要安装extundelete这个工具。登陆到我的测试机上,在这个演示场景里,挂载一块独立硬碟设备/dev/sdb并作数据低格。完成低格后。把单独的sdb设备,挂载到test目录下(mount/dev/sdb/test),接出来在test目录下生成一个内容为“deletetest”的测试文件file(echo‘deletetest’>file),这个时侯本地目录会生成一个测试的文件:file,再新建一个叫testdir的目录(mkdir/test/testdir),这么这时本地既有文件又有目录,也就是我接出来要演示删掉的那些文件。

我们可以通过rm-rf./*,直接把当前目录下的文件整体删掉。之后我须要恢复这个文件,原理就是:通过剖析它的block块,来恢复inode链接,要剖析并恢复已删掉文件的链接,我们要用到一些工具,这儿推荐你使用一个叫extundelete的命令,它是在Linux下基于ext3\ext4的文件剖析工具,可以对文件系统已删掉的文件进行剖析,并进行数据恢复。

在执行命令extundelete之前须要先做的是umount,把我们刚才删掉的目录umount掉(umount/test-l),防止有新的进程再往c盘块里写数据,同时也易于执行工具进行接出来的剖析。

安装好这个工具(extundelete)后,执行:extundelete/dev/sdb--inode2

我们可以在命令前面加入设备名称,之后加入前面的inode进行剖析。完成以后我们会听到显示屏幕上早已出现了刚才删掉的文件、名称及目录,就会看见inode号以及当前的状态。

我们也可以选择恢复单独文件类型文件,执行:extundelete/dev/sdb--restore-filefile

加入的选项是--restore-file,前面加你想恢复的文件名称。

刚才提到的选项是恢复单个文件,假定我们要恢复所有文件的话,就把选项改为--restore-all,这样就把剖析下来的已删掉文件进行了恢复。假如件,只想恢复某一个目录,就可以把“all”改成directory,之后用restore-directory这些方法恢复单个已删掉的文件目录。

经过测试extundelete只能恢复ext3格式系统,ext4恢复会报错,xfs格式找不到inode

如何恢复误删除的qq聊天