数据的恢复
聊一下我是如何在垃圾堆里找回我要的数据的。
起因
那是一个阳光明媚的中午,我正在电脑面前无所事事。突然发现在我的home目录下有一些扎眼的东西,为了看上去不那么难受我决定把他们删掉。
熟练的在终端敲出rm -rf
然后敲出首字母按下tab
,zsh就会补全那个文件名。就在这个时候,右下角某境外聊天软件的提示突然出现,我打开了软件,一边和别人聊天一边继续我的操作。
作为一个单进程生物,在尝试异步操作的时候总是会犯一些糊涂。
比如,
把自己的工作目录删了。
数据灾难
继王A老师在 Java 课程上使用 eclipse 清空自己D盘,王B老师在数据库课程上将数据从C盘备份到E盘后,我也手滑删除了工作目录。这三次在数据上的操作失误史称信息学院数据灾难。(((
经过检查,我发现部分文件其实在移动硬盘上是有备份的,另外部分文件都丢在 Github 上,真不愧是世界上第二好用的网盘(第一好用的是某境外聊天软件
目前无法手动恢复的只有一个小玩具和我的 Beancount 账本那个小玩具没了可以再写,唯独这个 Beancount 账本要想再次手动记录还是有点难度。所以想要找回这些文件。
所以,为什么不备份呢?
就像小学老师问你:“为什么会做错呢?”,我要是知道我也不会这样了啊。
准备找回文件
参考 使用 Linux 文件恢复工具 这篇文章,我安装了 Testdisk
这个工具,使用 Photorec
进行恢复
这个软件整体使用起来还是比较简单
Photorec
可以选择恢复的类型,但是对于文本类都是一样的格式
虽然早有预感无法很顺利的找回文件,但是我没想到居然这么成功的找回了文件,甚至,成功过头了.
从垃圾堆里找回需要的文件
成功的通过 Photorec
找回了文件,找回了……个十百千万……大概500万个文件
并且文件名还是重命名过的。
那么要从这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老师是否成功找回了需要的数据,不过我找回数据的过程非常艰辛,终于知道了为什么大佬执迷于研究优雅的数据备份方式,在你手滑的时候,你的备份可能是拯救你的最后一根稻草.
别看你今天闹得欢,小心今后拉清单,这都得应验的.
本文作者:Keshane
评论