从删库到恢复
讨论一下程序员从删库到跑路恢复的问题。
误删库后该怎么办
如果真的不幸在生产环境服务器直接或者间接地执行了rm -rf /*
那么该怎么办呢?
首先,当你错误执行了
rm -rf /*
那么当终端开始滚动删除文件信息的时候你应该知道大事不妙了。这时你应该眼疾手快地赶紧ctrl+ c来中断命令,这非常重要,这可以极大减少数据损失。到这个时候千万不要重启服务器或者断开ssh连接,然后就是对比查看到底是哪些文件和目录被删除了,使用
ls
来确定被删除的文件和目录。如果不幸ls
已经被删除了(linux中一切皆文件),那么可以使用cd
和 tab来查看当前目录的文件和目录(如下)。
回顾一下linux系统目录有哪些以及其功能(参考自:http://www.92csz.com/study/linux/):
- 恢复/bin目录,找一台拥有正常/bin目录的服务器,通过wget先下载tar命令并赋予执行权限,再用tar打包/bin为一个文件后wget下载至本机。并给予/bin下的命令以执行权限。如果chmod也被删除了,可以用perl给予权限。
1 | perl -e "chmod 777, 'ls'" |
预防再一次误删
首先要多加小心,在执行
rm
之前要停顿对目标文件或目录确定确定再确定。如果在脚本中执行rm
命令,则需要判断目标文件或目录是否可能为空,判断如果不为空再执行rm
。针对遇到目标变量不存在导致
rm
删库的情况,使用set -u
使得脚本遇到不存在的变量报错并停止执行。比如:
1 | !/bin/bash |
结果:
1 | test.sh: line 4: a: unbound variable |
- 使用safe-rm代替rm,safe-rm是一个开源项目,用来安全删除文件。通过配置
/etc/safe-rm.conf
文件来排除一些目录来防止这些目录被删除。
创建回收站机制。大家都知道命令行下的linux是没有回收站机制的,通过在命令行下创建回收机制就可以有后悔的机会。
那么我们先回忆一下windows下的回收站是如何工作的:我们在windows下删除一个文件或目录的时候,这个文件或目录被移除了本来所属的目录并且被移动到了回收站,等待用户手动清空回收站这些文件才会被真正删除。
根目录挂载为只读。
在
/etc/fstab
中将/
挂载为只读:
1 | # <file system> <mount pt> <type> <options> <dump> <pass> |