数据的恢复

数据的恢复

聊一下我是如何在垃圾堆里找回我要的数据的。

起因

那是一个阳光明媚的中午,我正在电脑面前无所事事。突然发现在我的home目录下有一些扎眼的东西,为了看上去不那么难受我决定把他们删掉。

熟练的在终端敲出rm -rf然后敲出首字母按下tab,zsh就会补全那个文件名。就在这个时候,右下角某境外聊天软件的提示突然出现,我打开了软件,一边和别人聊天一边继续我的操作。

作为一个单进程生物,在尝试异步操作的时候总是会犯一些糊涂。

比如,

把自己的工作目录删了。

数据灾难

继王A老师在 Java 课程上使用 eclipse 清空自己D盘,王B老师在数据库课程上将数据从C盘备份到E盘后,我也手滑删除了工作目录。这三次在数据上的操作失误史称信息学院数据灾难。(((

经过检查,我发现部分文件其实在移动硬盘上是有备份的,另外部分文件都丢在 Github 上,真不愧是世界上第二好用的网盘(第一好用的是某境外聊天软件

目前无法手动恢复的只有一个小玩具和我的 Beancount 账本那个小玩具没了可以再写,唯独这个 Beancount 账本要想再次手动记录还是有点难度。所以想要找回这些文件。

所以,为什么不备份呢?

就像小学老师问你:“为什么会做错呢?”,我要是知道我也不会这样了啊。

准备找回文件

参考 使用 Linux 文件恢复工具 这篇文章,我安装了 Testdisk 这个工具,使用 Photorec 进行恢复

这个软件整体使用起来还是比较简单

photorec

Photorec 可以选择恢复的类型,但是对于文本类都是一样的格式

虽然早有预感无法很顺利的找回文件,但是我没想到居然这么成功的找回了文件,甚至,成功过头了.

从垃圾堆里找回需要的文件

photorec

成功的通过 Photorec 找回了文件,找回了……个十百千万……大概500万个文件

找回的文件
并且文件名还是重命名过的。

woc

那么要从这500万个文件中找回需要的那几个文件,一个一个找肯定是不太现实的,但是有一点,每个 Beancount 账本里都有一条 “Assets:*” 类似的记录,可以通过这一点来找回文件。

使用

1
cp $(grep -rnl "Assets:" *) /home/xxx/beancount

将包含 “Assets:*” 的文件复制到一个新的目录里

然后发现还有一些 .java .c 等文件,删掉删掉。

1
rm $(find . ! -name "*.txt")

在经过这一系列处理之后,只剩下了

5000+个文件……

所以,还需要

从找回的垃圾堆里找回需要的文件

查看了一下这些文件,很多文件都是那种早期保存版本,因为 Beancount 每条记录都有日期,所以只需要找到每个月最后一条记录的日期在哪些文件上就行了

1
cp $(grep -rnl "2020-02-28" *) /home/xxx/beancount-02

但就这样还是找出几百个文件,还好数据基本都是全的,随机跳出来几个重组了一下文件结构终于又恢复了往日的形状。

总结

只要我筛子网做得足够细,留下的永远是想要的形状

(并不

数据备份还是很重要的,一时手滑一时爽,数据找回火葬场。不知道王A老师是否成功找回了需要的数据,不过我找回数据的过程非常艰辛,终于知道了为什么大佬执迷于研究优雅的数据备份方式,在你手滑的时候,你的备份可能是拯救你的最后一根稻草.

别看你今天闹得欢,小心今后拉清单,这都得应验的.