很多朋友都在想linux永久删除一个文件怎么恢复?下面就一起来了解一下吧!
linux永久删除一个文件怎么恢复
1、在命令框中找到已删除文件路径。
2、输入df+文件路径命令查看一下路径的分区所在。
3、利用系统自带的还原工具debugfs来修复,并分别运行open/dev/vdal、Ls/mnt/Summer Tes t两个命令,回车后即可找到删掉的文件。
4、输入logdump –i+
5、输入dd if=/dev/vda1 of=/mnt/Summer_Test/China.png bs=1152 count=1skip=6291611命令。
6、回车后返回该路径即可看到删掉的文件已恢复。
以上是小编的分享,希望能帮到大家。
linux文件误删除该如何恢复?
一、linux误删除数据的场景在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了。而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就是打脸时刻 。新人操作文件时往往战战兢兢、反复确认,反而不容易出错。如果你也是一个有多年工作经验的工程师,也给自己提个醒:淹死的都是会游泳的。我们需要区分两种场景来进行误删除文件的恢复:
第一种场景的数据恢复相对简单一些,第二种相对麻烦些。
二、场景一数据恢复实验第一种场景:被删除的文件正在被其他进程使用。我们先创建一个独立目录testdel,用于完成我们的实验。然后使用echo命令创建一个文件test-recovery.txt,放在testdel目录下,文件内容是:"test file delete recovery"。重点来了:我们使用命令tail来一直监听这个文件,表示这个文件一直被tail进程监听占用。
$mkdir./testdel;$echo"testfiledeleterecovery">./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|greptest-recovery.txt;tail1535kafka3rREG253,22634095906/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针对该文件有两个计数器
当以上两个计数器都为0的时候,该文件实际上就是属于没有进程使用它的状态,就直接被删除掉了。如果有进程使用它,那么该文件的i_count数值不为0,就可以在/proc/<进程id>/fd目录中找回来
第二种情况:此时没有进程使用被删除的文件,被删除的文件的两个计数器i_count和i_link此时都为0。这个时候我们要理解一个概念
需要注意的是:存放数据块block单元的文件内容会一直存在么?答案是否定的,因为该数据块的内容被删除了,所以该数据块是可以被其他进程重新利用写入数据的。所以,当你发现你误删除了非常重要的文件时,你需要做的第一件事就是将磁盘从操作系统中unmout,或者停止所有进程向磁盘中写数据。因为写作数据操作,可能会占用覆盖你"误删除文件"所在数据块,一旦数据块被写的数据写入覆盖,你的数据文件就再也找不回来了。