在我们日常使用的Linux系统中rm命令是删除文件的,而且在命令行界面是没有回收站概念所以也不能从回收站中恢复。但是一个一般情况下使用rm删除命令的话,是不能直接删除文件夹的,所以造成的损失相对较小。那如何使用了rm -rf这样的直接删除且不询问的命令,那删除的文件是否能找回了?这里牛人技术为大家讲解下,首先用rm删除后是不能直接找会文件的。但是,可以使用数据恢复工具命令恢复数据。其实Linux系统和Windows系统,进行删除文件的时候一般都是直接删除文件标头,只是从操作系统中的文件系统数据库里面删除了文件名。其实文件体还是在磁盘里面,但是需要注意的是这些文件体随时可能被新写入的数据覆盖。所以文件被删除后,第一件事就是不要在对磁盘进行写入操作,有条件的直接先把磁盘完全备份,然后挂从盘只读处理。把恢复的数据放到另外一个硬盘上,虽然这样做成本有点高,但是确最大限度的保护了数据的安全。如果没有上述条件,比如我这台服务器上,我就尽量不做写操作。然后直接在服务器上恢复。具体流程如下;
第一;查看硬盘和文件绝对路径
首先使用df -h命令显示查看你Linux系统上的盘符信息,例如我们这里的/dev/sda1硬盘分区。然后用fdisk -l查看各分区和容量信息,以便在恢复后进行对比。
使用lsdel查看删除文件的结果格式如下:
Inode Owner Mode Size Blocks Time deleted
8934212 14456 102664 591 1/ 1 Wed Aug 26 11:49:48 2018
第二;使用debugfs文件系统命令查找和恢复
记录了上的盘符和文件位置信息后,我们可以使用debugfs命令进入文件系统调试模式。具体命令如下;$sudo debugfs
debugfs: open /dev/sda1
debugfs: ls -d
debugfs: ls -d /home
找到你要恢复的文件inode号,在对应的<xxxxxxx>这个数字,并用文本文件记录下来。
然后使用如下命令进行恢复
debugfs: dump <xxxxxxx> /tmp/123456.bak
或者在系统命令下执行logdump命令恢复,具体如下;
$logdump -i<xxxxxxx>
找到输出的block后面的数字xxxx
运行命令:
$sudo dd if=/dev/sda5 of=被删除的文件绝对路径 bs=4096 count=1 skip=xxxx
一定要注意这里的<xxxxxxx>这个数字,就是被删除文件的inode号。通过这个编号就能恢复文件,前提是这个文件体没有被覆盖。如果被覆盖了,就有可能无法恢复,或只能部分恢复。
最后,通过fdisk和df命令查看恢复后的磁盘容量和文件数量是否有变化,并尝试打开恢复的文件看里面的内容是否完整。随时说能恢复被rm删除的文件,但我们牛人技术博客还是建议大家尽量不要用rm -rf这样命令,如果实在要用,也在回车执行命令前。使用文本文件,把命令内容复制出来,再三确认。如果可以的话,我们建议大家对重要的文件一定要进行定期备份,这里我们建议大家使用tar命令进行计划任务的备份。如果需要交流数据恢复或这备份的也欢迎随时联系作者(Q69693721)沟通交流。
网友评论 comments