介绍

介绍

介绍

我不小心做了一件可怕的事。我键入ls而不是cd,然后rm -rf在我当前的目录上运行了一些命令,而不是几天前的该目录的副本,该副本出现在mnt我编写的脚本没有达到我的预期效果之后。

我知道这里已经有类似的问题,但没有一个是全面的。我想借此“机会”开始一系列公共贡献的答案,以供将来其他人参考。

例如,有关于使用photorec和 的建议testdisk。这些可能不是最好的解决方案。我找到了另一个答案,这里,建议使用locate.我对此一无所知,也不知道它是如何运作的。

我的系统

我的系统是 Debian 10 系统,跟踪测试分支。数据存储在 SSD 上,格式为 ext4。当我意识到我跑rm -rf错地方时,我按住电脑上的电源按钮将其关闭。

解决步骤

我有另一台笔记本电脑运行另一个 Debian 系统。我已将 SSD 从计算机中取出,并将其插入外部 USB 转 Sata 接口。

我相信我现在需要以某种方式安装它,这意味着系统无法将数据写入设备。我该怎么做?

然后我可以使用此locate方法(链接问题)来取回数据吗?在执行任何操作之前,我想确保这是正确的做法。

数据重要吗?

是的 - 我删除的目录包含我的博士学位的所有代码。我还有几周时间。我有一个可以使用的旧版本,然后重新实现我在过去几周左右所做的所有事情。然而在那短短的时间内我改变了很多东西。本周我的研究取得了“突破”。代码的编写方式意味着重新实现它一点也不简单。

我有备份吗? (编辑)

我唯一确定的是我拥有的服务器上有日期2 May 2020。从那时起我已经完成了大量的工作,因为我几乎全天候工作。

那里可能是此 SSD 上的其他备份,但其中一些备份位于我的主目录中 - 因此这些备份将被rm -rf删除,并且备份脚本未按我的预期工作 - 因此可能不存在其中的常规备份。 (试图删除正在复制的奇怪内容就是我最终陷入困境的原因。)

目前我无法访问SSD来检查日期。我需要知道如何安装它以使数据无法写入其中(如果可能的话)。

如果我只有 5 月 2 日的那些,那就真的很糟糕了。我最近在这方面疯狂地工作了几个小时,这可能就是为什么我今天早上醒来不小心把它搞砸了。

答案1

以下是需要考虑的一些事项:

  • 首先进行完整的磁盘复制:dd if=/dev/sdX of=image.img bs=1M status=progress
    处理此副本(例如photorec image.img)而不是磁盘本身。

  • 根据我的(长期)经验,比许多文件类型foremost更好。photorec根据您的文件类型,您可能想要考虑向 中添加自定义文件头foremost,这在过去对我来说非常有效。我的回答中有更多关于最重要/photorec 的内容这里

  • 我的答案可能会帮助您从恢复的干草堆中找到可用的文件。

  • 请勿安装 SSD。正如评论中已经指出的,安装只读可能并不总是足以防止覆盖。处理dd图像。

现在,这是我不久前学到的一个(令人兴奋的)技巧,它可能实际上对你有用。

我删除的目录包含我的博士学位的所有代码

所以这是文字。现在,如果您的大部分代码都在一个(或几个)文件中,您实际上可以尝试以下操作:

grep -ai '<this text is in my newest code revision>' image.img

我知道这听起来太简单了,但它之前在同样的情况下救了我。您可能需要添加-C x到命令中以包含x(替换为数字)匹配行上方和下方的行。

请注意,您的文件可能部分损坏。尝试多种模式。从很多单词开始尝试找到完全匹配的单词,如果没有结果,请尝试更少的单词。


还有强制性的...始终进行备份。不在同一驱动器上。验证备份。您正在处理文本,我认为这不是数百GB,因此您也可以设置云备份(当然是加密的)或类似的东西。


另一条建议是:不要花更多的时间在这上面,而不是重写代码。保持冷静,尝试你能做的,看看我的grep方法是否对你有帮助,如果你在一整天后没有得到任何结果,最好的解决方案可能是获取最新的备份并从那里再次工作。

答案2

答案的开始

我使用实用程序套件photorectestdisk恢复一些数据。

我尝试过的事情清单

  • 启动 Debian 10 笔记本电脑(独立机器)
  • 通过 USB 将 SSD 插入 SATA 控制器(坏主意!)
  • 磁盘自动安装(不知道如何防止这种情况)
  • 开始使用dd复制数据进行备份
  • 空间不足
  • 已取消 dd 作业
  • 首先 dd 复制数据可能是个好主意,但不知道该怎么做
  • 我遇到的问题:磁盘大小为 1TB,我需要在检查之前复制所有 1TB(可能?我可以忽略归零块吗?)photorec
  • 内置 SSD(笔记本电脑)仅为 500 GB
  • 连接外部 4TB 驱动器
  • 未安装的 1TB SSD(我正在尝试从中恢复)
  • 没有打扰 dd
  • 已加载photorec
  • 此处的说明:https://www.cgsecurity.org/wiki/PhotoRec_Step_By_Step
  • 我所做的唯一不同的是更改它搜索的文件类型,将它们全部关闭并仅搜索.tx?相关.txt选项(其中包括 .c 源文件等)

数据处理

  • Photorec 生成了数百个输出文件夹和数千个文件
  • 我不明白文件名或目录名的命名/编号约定
  • 文件名全是乱七八糟的废话
  • 用于grep -rIw在子文件夹中搜索完全匹配的整个单词字符串
  • 使用 bash 脚本对输出进行一些处理以删除不相关的行
  • 用于diff比较结果匹配
  • 找到我的源文件之一的最新版本
  • 还有几个要去...

概括

不确定这是否应该是“接受的答案” - 但上面的方法是我用来检索文件的方法。

这不是一个特别好的方法,但很有效。

对于丢失的数据是图像的情况,通过浏览内容或查看缩略图来找到正确的文件可能要容易得多。

文本文件更难处理,因为系统会由于系统生成的文本文件、日志等而产生许多误报。

答案3

如果你关闭电源的速度足够快,那么在对分区进行完整的二进制备份之后,你可以给扩展删除尝试一下。
如果我没记错的话,extundelete 利用分区上的日志来“撤消”由rm -rf.

相关内容