created_date: 2020-12-11T22:12:02+08:00

update_date: 2020-12-27T03:51:51+08:00

comment_url: https://github.com/ferstar/blog/issues/30

我digital ocean的5刀丐版vps上面放了个人公众号的服务,就是些许python脚本拼凑起来的,还是科研狗的时候偷懒搞的东西,不小心维护到现在。

前几日因为数据源站更新,需要更新爬虫策略,开vscode登上去改代码,不小心手贱删掉了工作目录,蛋疼啊,火急火燎关掉vps, 刚关完就有粉丝反馈公众号故障,所以临时挂了个维护的通知,开始苦逼恢复数据。

  1. git、备份恢复 - 扑街,因为很多功能调整都是断断续续加的,没有及时的备份,拿到的旧代码相当于没用

  2. extundelete大法

这个网上一堆教程,比较有用的一个参数是after,因为我知道确切的删文档时间点,那么只需要恢复删档时间以后的资料就可以

mount -o remount,ro /dev/sdX1
# 举个栗子,恢复一小时内删除的资料
extundelete --restore-all --after $(date -d "-1 hours" +%s) /dev/sdX1
find RECOVERED_FILES/
  1. uncompyle6恢复丢失的py代码

extundelete恢复后,悲剧的发现py代码几乎全丢了,但神奇的是__pycache__居然完整恢复,于是赶紧用uncompyle6反编译pyc试试

for i in $(ls | awk -F . '{print $1}'); do uncompyle6 $i.cpython-36.pyc > ../$i.py; done

跑完效果好的出奇,基本上完美还原

  1. 重启&恢复服务 - 一切正常

  2. 复盘 - crontab rsync + git code 走起来,可保江山永固

从手欠删工作目录到恢复完成耗时1.5h,能完美恢复的关键是发现问题需要立即把盘离线(避免覆写,神仙难救)

大概就是损失了午休的时间,于是公众号卖惨求红包,果然收到几个热心粉丝老板的红包打赏,开心。。。

刚看到这里说ext4magic恢复效果要比extundelete好,mark一下

https://gist.github.com/ebautistabar/cca12863e6335d08a019f015f53fac4a