大家好,欢迎来到IT知识分享网。
当不小心使用rm -rf /*删除了文件之后,数据就这么丢了吗?当然不会,下面介绍几种方法,有可能恢复文件,但是也不一定能成功,笔者就有一次这种经历,试了几种方法后,最终只有testdisk的photorec才把文件恢复了,但是恢复的文件文件名都不是原来的名字了(内容还是不变的),最后写了程序来解析这一堆文件,才勉强找回了部分丢失的文件,满满都是泪,所以还是要记得备份
testdisk
testdisk不仅可以恢复删除的文件,还可以恢复分区表,这里笔者会同时介绍这两种功能
1.安装
sudo apt update \ sudo apt -y install testdisk
2.重建分区表
- 执行 sudo testdisk
- 选择是否要记录日志
- 选好磁盘,选择下面的Procced
- 选择分区表类型(按实际情况来,我的是EFI GPT)
- 选择Analyse分析当前磁盘分区表
- 选择QuickSearch快速搜索分区
- 按Enter,然后选择下面的Write保存搜索出来的分区表到主引导记录(MBR)
3.恢复分区表
3.1.备份分区表
- 执行 sudo testdisk
- 选择是否要记录日志
- 选好磁盘,选择下面的Procced
- 选择分区表类型(按实际情况来,我的是EFI GPT)
- 选择Analyse分析当前磁盘分区表
- 选择Backup备份分区(这个时候目录下会产生一个backup.log的文件)
3.2.从备份恢复分区表
- 执行 sudo testdisk
- 选择是否要记录日志
- 选好磁盘,选择下面的Procced
- 选择分区表类型(按实际情况来,我的是EFI GPT)
- 选择Analyse分析当前磁盘分区表
- 选择Backup备份分区
- 按L选择备份文件
- 找到备份的backup.log文件后,选择下面的Load恢复分区表
4.恢复文件
4.1.直接从硬盘恢复文件
- 执行 sudo testdisk
- 选择是否要记录日志
- 选好磁盘,选择下面的Procced
- 选择分区表类型(按实际情况来,我的是EFI GPT)
- 选择Advanced进入该磁盘选择分区
- 选好分区后选择下方的List进入该分区
- 选择要恢复的文件,按c
- 选择要恢复文件存放的目录,按c保存
4.2.从备份文件中恢复
注意这里的备份文件只有误删的文件,而没有未被删除的文件,所以千万不要用它来备份磁盘
4.2.1.备份文件
- 执行 sudo testdisk
- 选择是否要记录日志
- 选好磁盘,选择下面的Procced
- 选择分区表类型(按实际情况来,我的是EFI GPT)
- 选择Advanced进入该磁盘选择分区
- 选择分区后选择下方的Image Creation进入该分区
- 选择备份文件存放的目录,按c保存
- 之后可以在存放的目录找到image.dd文件
4.2.2.从备份文件中恢复文件
- 执行 sudo testdisk image.dd
- 选择是否要记录日志
- 选择磁盘image.dd,选择下面的Procced
- 选择分区表类型为None:
- 选择Advanced进入该磁盘选择分区
- 选择分区后选择下方的Undelete进入选择恢复文件的界面
- 选择要恢复的文件,按c
- 选择恢复后的文件存放的目录,按c保存
- 可以看到文件恢复到了存放的目录
4.2.3.photorec恢复所有文件
使用photorec工具,这个方法可以真的恢复rm -rf /* 删除的文件,缺点是文件恢复之后文件名是随机生成的,且目录结构也是不对的
- 执行 sudo photorec
- 选好磁盘后,选择下面的Procced
- 选好分区后,选择下面的Search
- 选择分区的文件格式(按实际情况来,一般linux是ext格式,windows是ntfs格式)
- 选择恢复文件存放的目录,按c保存
- 可以看到存放的目录中多了很多recup_dir开头的目录(可惜里面的文件的文件名都不是原来的文件名了)
extundelete
- 使用LiveCD或U盘启动进入Ubuntu
- 安装extundelete
sudo apt update \ sudo apt install extundelete
- 卸载所有分区
sudo umount /dev/nvmeXn1pY #这里nvmeXn1pY是分区名,可以使用lsblk命令查看所有磁盘和分区
- 查看可以恢复的文件
#查看xxx文件或xxx目录下所有文件和目录的inode编号 ls -i xxx #查看inode_num的目录下可以恢复的文件 #如果inode_num==2,则可以查看所有可以恢复的文件,因为2是/目录的inode编号 sudo extundelete /dev/nvmeXn1 --inode inode_num #这里nvmeXn1是磁盘
- 恢复文件
- 4.1 恢复所有文件
- sudo extundelete /dev/nvmeXn1 –restore-all
- 4.2 恢复指定目录
- sudo extundelete /dev/nvmeXn1 –restore-directory /path/to/directory
- 4.3 恢复指定文件
- sudo extundelete /dev/nvmeXn1 –restore-file /path/to/deleted/file
- 4.4 指定输出目录
- sudo extundelete /dev/nvmeXn1 –restore-all –output-dir /path/to/restore
- sudo extundelete /dev/nvmeXn1 –restore-directory /path/to/directory –output-dir /path/to/restore
- 4.5 恢复指定inode的文件
- sudo extundelete /dev/nvmeXn1 –restore-inode inode_num
- sudo extundelete /dev/nvmeXn1 –restore-inode inode_num –output-dir /path/to/restore
safe-rm
这个东西是防止误删用的,原理是用了alias命令,这样执行rm命令会转移到safe-rm程序来执行,而不是原来的rm程序,有兴趣的读者可以去看一下
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/150996.html