免责声明:我不太擅长写问题,而且我的问题是一个非常具体的场景。所以我要直接进入这个情况:
tarfile::todo/main
我正在浏览我的文件系统,并以某种方式设法从我的本地 FS 下载包含两个关键节点(和)的 tar 文件tarfile::todo/code
,并将其写入同一个文件。当我意识到下载器在做什么时,我很快停止了它并检查了 tarfile,令我沮丧的是,我发现只留下了一小块,其余的都被截断了。我不知道为什么它在向现有文件写入其他内容之前没有备份现有文件,也不知道为什么 session.tar 没有提交到我的 git 存储库,但现在整个事情都消失了。我是一个非常小心的用户,但是当我搞砸的时候,那绝对是灾难性的。
extundelete 无法恢复文件后,我在这里浏览找到这,给出了一种结合 grep 和 dd 直接从硬盘查找并读取数据的方法。
更多背景:
- 我的
/home/user
目录安装在单独的驱动器上:/dev/sdb3
- 今天是尝试恢复文件的第二天。
- 下一段中的输出是今天生成的。
一旦我做了 grep/dd 组合,我得到了这个输出。我究竟如何使用它来取回我的文件?我尝试将其复制到 a 中.file.swp
并使用 with 进行恢复,vim -r
希望它是一个 vim 交换文件,但事实并非如此。我以前从未见过这种格式,所以我不知道它的含义。
我会真的想要取回这些数据。正如我之前所说,这很关键。这是名副其实的篮子,里面装着我所有的鸡蛋。失去它将对生产力和组织造成痛苦的打击。
答案1
好吧,我想我已经找到了解决方案。首先,我将从我在问题中发布的链接开始。
从马克·普洛特尼克。
第一次运行:
sudo grep -a -b "[text from deleted file]" /dev/[drive where it was stored]
这将产生相当多的输出。例如:
13813610612: a bunch of text
您将获取该号码并将其与 dd 一起使用以直接从您的硬盘,遍历文件系统。
sudo dd if=/dev/[same drive from before] \
of=./salvaged \
count=2000 \
skip=$(expr [number] / 512)
因此,我编写了一个脚本来使用该技术,并生成了大约一百个与“tarfile”匹配的 1MB 文件。
我认为我将所有内容保存在常规.tar
文件中的非正统决定救了我,因为我在硬盘驱动器上的多个位置找到了相同的数据。我多次找到了我需要的一切。
现在我只需要对超过一千兆字节的随机文本/二进制垃圾进行排序。啊。这是很多工作。