【1】故障情况
(1.1)误删文件
在根目录下,有2个文件,node_exporter 和 node_exporter_start.sh
我想把这2个文件都删掉,小心,生产环境
rm -f node *
要命了,多打了一个空格,真实是想 rm -f node* 的啊;
(1.2)出现问题
所有命令不能用,错误提示信息如下图:
我以为所有的东西都被我干掉了,虽然有点疑惑,在我的理解中,rm -f *,会删掉当前目录所有文件。
但文件夹及文件夹下所有文件是不会被删除的,当时我看命令都用不了啦,直接就慌了。
以为虽然保留了文件夹,但可能文件被我删除了,不然怎么所有命令都用不了,登录也不能登录了;
(1.3)慌乱之下的处理措施
直接找业务确定服务器的重要程度,东西多少;然后利用快照备份进行快照恢复了;
【2】模拟复现、解决
(2.1)查看 / 根目录
(2.2)删除操作,复现故障
如下图,我们的 rm * 根本就不会删除所有的文件,只会删除那4个文件。所有文件夹及文件夹目录里的数据都还在。
产生现象:和我们生产环境的误删操作一样,复现了
(2.3)冷静分析情况
我们只是删除了链接(见2.2 rm * 的交互式提示),但目前不是了解很深入,到底是软链接还是硬链接。
如果是硬链接、那就算只是删除了这4个目录,那也基本没救了。如果是软链接,那重新加不就完事了。
我们查看该链接指向的目录,文件是否存在,如下图,发现文件还是存在;
那就表示,删除的是软链接,但因为环境变量、很多命令、文件等事项(最吓人的就是只有当前窗口还可以在,其他无法登录了),引用的是这个软链接目录,所以各种报错。
(2.4)解决办法
那就把软链接加回来即可嘛;
如下图,但我们发现,还是报错,要先恢复 /lib64才行;那我们ls命令不能用了,怎么把软链接加回来啊
百度了一下,发现 /usr/sbin 下面还有一个 sln,也是软链接的命令,救命稻草来了;
就根据这个命令,一个一个加回去
/usr/sbin/sln /usr/lib64 /lib64 /usr/sbin/sln /usr/sbin /sbin /usr/sbin/sln /usr/bin /bin /usr/sbin/sln /usr/lib /lib
至此,问题解决; ls/ln/touch 等等所有命令也都能用了;
复制会话连接也能连了,mysql登录了也没有什么问题。
【总结与反思】
本次故障是由于本人误操作导致,总体又因为很慌并没有冷静的思考很好的解决。
反思:
1、遇到故障太慌乱,思路受限。后续应该立马强制自己冷静下来,给自己几分钟来想一下情况和方案。
2、生产环境操作太不小心,不应该在 rm 操作时即不小心、又加 -f 参数。后续要多提高警惕,保持对生产环境的敬畏之心。
3、基础不够牢,要是深入了解 linux,就不会不确定本次误操作的影响范围。
若是知道只是删除了几个软链接(核心软链接也会导致很多包、很多程序无法运行,但终究会知道文件、数据是不会丢的),那也不会那么慌那么着急。