首发地址:学习日记 https://www.learndiary.com/2022/09/linux-file-recovery/

一、数据误删背景

这次是一名科技工作者客户在 Ubuntu Linux(版本大概是20.04) 下用 rm 命令误删除了一个重要文件夹里面的文件,然后又在同一分区上装了一个数据恢复软件试图恢复。结果失败。他在我回复他不能保证恢复数据的程度后,去找了一个人帮他恢复,结果可能不理想,又联系我帮他恢复。视频演示分为“恢复过程”和“恢复小结”如下两部分:

Linux 下恢复误删文件过程

Linux 下恢复误删文件小结

二、数据恢复过程

首先我要求客户长按电源键关闭电脑,避免关机过程中的数据写入操作进一步破坏丢失的文件。然后,我用向日葵远程到客户同一台机器上的 Windows 系统,制作了 Ubuntu 的 U 盘 Live 系统。然后,从 U 盘启动 U 盘里的 Live 系统,在 Live 系统中安装向日葵,我用向日葵远程到客户的 Ubuntu Live 系统进行操作。

下面的操作均未挂载硬盘上的分区。用lsblk -f命令查看了客户的磁盘分区情况,发现客户有一个单独的 /home 分区,格式是ext4,而被删除的文件是位于家目录下的一个文件夹中。用户之前一直运行着硬盘上的 Ubuntu 系统,这样,系统可能会随时写入数据,如 .cache 缓存文件夹,加之用户还在家目录里面安装了一个数据恢复软件。之前,也有其他人帮他作了一些未知的操作。所以,我预判这次的数据恢复程度不容乐观。这里假设这个分区是 /dev/sda3。

先调整 Live 系统的时区为正确的 +8 时区,问清了客户数据删除的大概时间。然后,我在 Live 系统中安装了 testdisk 和 ext4magic。

硬盘是 /dev/sda,执行 sudo testdisk /dev/sda,验证了客户删除数据的具体位置,查看删除数据的上级目录时间(目录内容更新时间),证实了客户删除文件的时间。然后退出 testdisk。

然后挂载硬盘的另一个分区作为存储恢复数据的地方。假设这个用于存储恢复数据的分区是 /dev/sda1,切换到挂载这个分区的目录下如: /mnt/tmp,执行sudo ext4magic /dev/sda3 -a “$(date -d “2022-09-25 15:00:00” +%s)” -r,表示恢复2022年9月25日15点后删除的文件。

恢复的文件保存在 RECOVERDIR 中,根据文件删除的路径是找不到的。比如,删除的文件是位于 /home/user/dir 下面,在 RECOVERDIR 下相应的路径 RECOVERDIR/home/user/dir 是找不到的。

最后有效的文件都位于 RECOVERDIR/MAGIC-2 下面,但是没有原来的目录结构和文件名了。下面的文件是 ext4magic 自动归类的,比如客户要找回的 python 文件是位于 RECOVERDIR/MAGIC-2/text/x-script.python,而一种后缀名为 .rmf 的文件则位于 RECOVERDIR/MAGIC-2/application/octet-stream 下面。这次寻找的方法是根据丢失文件的内容含有的关键字。比如,python 文件基本都会引用一个特殊的包比如叫“specialpackage”。而 .rmf 文件虽然没有归类到文本文件,但是我用 vim 打开,看到大部分是可识别的文本,夹杂一些乱码,其中也含有这个格式文件开头特有的关键字如“mykeyinhead”。

当然,根据实际情况,你也可以尝试用文件大小或修改时间等文件属性查找。但建议属性留有余地,我曾经测试过找回来的文件丢失了一些修改步骤,相应的修改时间似乎也丢失了。

三、数据恢复结果

从最后的结果来看,在最初作了错误的数据覆盖操作的情况下,也找回了很多 python 文件和一些 rmf 文件,客户对恢复的文件还是基本满意的。

四、数据误删恢复小结

1、 重要的数据要在不同的介质备份。

2、误删数据后不要往相同分区作写入操作。未被占用可以直接卸载的分区就直接卸载。如果是有自动写入操作的分区(如 / 和 /home 等分区)的话,建议直接按住电源按纽数秒关闭电脑。

3、上面直接卸载的分区可以直接在电脑上安装恢复软件进行恢复;但系统启动后会直接作写操作的分区就用 Live Linux 启动进行恢复操作。

4、为了尽可能多的找回丢失的文件,我也给上面这位客户尝试用跟 testdisk 伴生的 photorec 进行恢复。photorec 是根据文件类型的特征,逐扇区扫描硬盘找回删除的文件。不会管文件的删除时间。photorec 也可以指定只搜索特定类型的文件。但因为客户找的用于保存数据的移动硬盘中途出现IO错误导致恢复中断,另外,通过上面 ext4magic 找回的文件可能已经达到了客户的心理预期,后来就放弃了这种耗时很长、恢复文件占用空间很大的方法。

5、网上的不少文章讲到可以通过文件系统日志恢复删除的文件,还能保留原有的文件名称。但据我的测试,在新版本的操作系统中(如:Ubuntu 20.04)的 ext4 文件系统中删除和恢复文件是办不到的。旧版本的系统,如在 Ubuntu 16.04 Linux 中的 ext4 文件系统中删除和恢复文件则是可以保留原有的文件名和目录结构的。我测试过 ext4magic、R-Linux、R-Studio、UFS Explorer、Recovery Explorer,统统一样的效果。extundelete 干脆就不工作。

五、参考资料

1、Unix/Linux undelete/recover deleted files https://unix.stackexchange.com/questions/80270/unix-linux-undelete-recover-deleted-files

2、File recovery https://wiki.archlinux.org/title/File_recovery

3、Ext4magic https://ext4magic.sourceforge.net/ext4magic_en.html

4、TestDisk https://www.cgsecurity.org/wiki/TestDisk_CN

5、PhotoRec https://www.cgsecurity.org/wiki/PhotoRec_CN

Linux 下恢复误删文件相关推荐

  1. Linux下恢复误删文件:思路+实践

    周五篮球群里有人问误删文件了怎么恢复,得知是ext4文件系统之后我推荐了ext4magic这个工具,然后又有人提到了xfs的话怎么办,正好前几天看到Dave Chinner在邮件列表里提到了这个问题, ...

  2. linux下恢复误删文件

    linux下文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, 实际删除了指向i ...

  3. Linux下恢复误删的数据

    1.ext3grep:https://code.google.com/p/ext3grep/ 2.extundelete:extundelete: An ext3 and ext4 file unde ...

  4. linux文件回收站恢复,Linux之恢复误删的文件[针对丢弃到回收站]

    linux下恢复误删除的文件方法(ext2及ext3) linux下恢复误删除的文件方法(ext2及ext3) 2009-12-19 15:23:47 分类: LINUX 如果是ext2文件系统的,直 ...

  5. 如何恢复Linux中的误删文件

    写在前面的话 在开始教程之前我有必要提醒大家,使用窗口管理器(GUI)删除文件和使用命令行工具(CLI)删除文件这两种方法之间是有区别的. 当我们使用窗口管理器来删除文件时,我们仅仅只是将文件从某个目 ...

  6. linux 文件恢复删除文件,Linux通过lsof命令恢复误删文件的步骤

    Linux系统下lsof命令的用法有很多,恢复误删文件就是其中一种用法,特别是日志类文件的恢复,下面小编就给大家介绍下Linux使用lsof命令恢复误删文件的方法. 前提条件:该文件在删除后,仍然被进 ...

  7. 怎样找回Linux中丢失的文件,如何恢复Linux中的误删文件

    原标题:如何恢复Linux中的误删文件 写在前面的话 在开始教程之前我有必要提醒大家,使用窗口管理器(GUI)删除文件和使用命令行工具(CLI)删除文件这两种方法之间是有区别的. 当我们使用窗口管理器 ...

  8. linux误删 bin目录,记linux下rm误删bin文件的解决方式

    平常有个坏习惯,删文件为了快点,喜欢用rm xx*,删除一些关键词文件.今天为了删/bin下几个含有mix关键词的文件,使用命令rm mix*.手贱,mix和*之间多了个空格...灾难发生了!bin下 ...

  9. grep命令帮你恢复误删文件

    作为长期的电脑使用者,肯定会有误删文件的经历,在 Mac OS X 和 Windows 上删除的文件都会默认进 "回收站".在 Linux 上如果事先没有用别名(alias)修改默 ...

  10. centos挂载u盘只读_完美解决linux下U盘文件只读的问题

    1. 在终端运行如下命令 tail -f /var/log/syslog 2. 插入有只读文件系统故障的U盘 3. 观察命令行输出 输出局部如下: Jul  8 16:44:50 cslouis-pc ...

最新文章

  1. mysql 建立root用户名和密码_MYSQL中5.7.10ROOT密码及创建用户
  2. Java JIT在运行JDK代码时是否作弊?
  3. 【Python基础】关于日期特征,你想知道操作都在这儿~
  4. java的解释程序_JAVA改错和程序解释
  5. gan学到的是什么_GAN推动生物学研究
  6. python怎么创建函数_Python创建与调用函数
  7. OpenCV辅助对象(help objects)(2)_Range
  8. React Native在Android当中实践(一)——背景介绍
  9. DataTable操作(建表,建行,建列,添加数据)
  10. 基于时空网络的出租车OD需求预测-模型框架(附数据集下载方式)
  11. matlab中if语句的条件,matlabif条件语句
  12. EPLAN中的edz文件的用法
  13. 2017年苹果开发者账号申请——账号VISA卡支付流程
  14. java后台amr格式转mp3格式方法
  15. Eclipse反编译插件 Enhanced Class Decompiler
  16. vrp系统和linux区别,华为VRP-文件系统基础
  17. 1054: 猴子吃桃(C)
  18. 教你如何注册winrar~
  19. (要更新)SRAM、DRAM、SDRAM、DDR异同
  20. 嵌入式系统课程设计:基于JSoup的鸿蒙教务查询软件

热门文章

  1. 任天堂(Nintendo)(什么是ps4,什么是ns(switch))
  2. 失控的滴滴:以为问题出在流程,其实问题出在人
  3. OpenWrt ar71xx 添加原生 AR8035 支持的方法 (AR934X)
  4. 新构造运动名词解释_新构造运动
  5. 【洛谷P3987】我永远喜欢珂朵莉~【卡常】
  6. Spring Boot 2.x 基础案例:整合Dubbo 2.7.3 Nacos1.1.3(配置中心)
  7. android view 前景色,Android开发中的一些小技巧
  8. ng-zorro里的“Descriptions描述列表”使用
  9. python九宫格矩阵排数
  10. 副业真没想你的这么容易做!