生产事故:误删/lib64,移走/lib64目录

事故背景:

有一台机器装不上nagios监控,yum install openssl报一个关于“libkrb5.so.3”冲突的错误。

解决过程:

1./lib64事故

关于“libkrb5.so.3”冲突的错误,查了一些文章没有解决,就想着把libkrb5卸掉,rpm -e libkrb5.rpm,卸载有关联冲突,然后就rpm -e libkrb5.rpm --nodeps(事实证明,如果不清楚软件的依赖,最好不要“--nodeps”),一卸载就发现问题了,发现yum命令用不了了,提示缺少“libkrb5.so.3”,然后我就从别的机器上拷贝了一个libkrb5.so.3到这台机器上,然后yum继续提示少别的文件,经验告诉我,这可能还缺少别的很多库文件,由于是生产的机器,我不想花太多时间整,所以就想着从别的机器上拷贝/lib64到这台机器,想着想着,手就不由自主的敲了个“mv /lib64 /tmp”,敲完我就后悔了,赶紧“ls”,发现用不了了,然后发现只有cd命令能用,其他的都用不了,这个时间点大概是15:00,说实话,有点慌,因为生产上没有遇到过这种事,在虚拟机上试过“rm -rf /”能删,但是也没恢复过。

2.模拟并处理/lib64事故

想了一分钟,决定在虚拟机上模拟这个事故,打开虚拟机,然后mv /lib64 /tmp,重启,进不去系统,一直卡在开机界面。然后就开始搜索“误删/lib64”的相关文章,几乎没找到有用的,可能是因为这个事故确实比较少,生产中没人会这么做,实验的话可能也不会做这个。没搜到“误删/lib64”的文章,但是有个文章的“linux修复模式”提醒了我,心想:我可以先进了系统,然后把/tmp目录下的lib64拷贝回/根目录,这样不就解决问题了吗。

然后我就在虚拟机上试验,进入linux修复模式下后,发现/tmp目录下的文件被删了,然后就想到/tmp目录下的文件是不是重启后自动删除了,然后我就把光盘镜像系统里的/lib64拷贝到崩溃的系统根目录下,重启系统,依旧不行,这可能是依旧缺少什么库文件导致的系统起不来。

很着急很着急,因为现在我误认为/tmp/lib64这个目录在重启系统后就被删除了,而且镜像里的/lib64拷贝到崩溃系统里也是不起作用的,没办法了,我只能想着把系统里的东西导出来,这是一台发布机器,深圳那边的同事专门用来发布代码的,恰巧当天晚上就要用。

大概17:00左右,我联系深圳那边同事:勇哥,那台发布机器被我搞崩了,想问问你重要的文件是不是集中存放在哪,我试试能不能拷贝出来。联系之后,我基本已经做好了将文件拷贝出来的准备。

17:30,脑子里突然想到,进入了linux修复模式后,奔溃系统的tmp目录不是/tmp,而是/mnt/sysimage/tmp,所以我就进入/mnt/sysimage/tmp,发现lib64目录还在,然后我就mv /mnt/sysimage/tmp/lib64 /mnt/sysimage/,重启系统,正常进入。开森。

3.处理生产上的/lib64事故

然后我就在vCenter的存储上上传了一个iso镜像(存储上没有镜像,我们新装机是走cobbler),可恶,上传镜像花了半小时。。这时候已经18:30了,我是有多紧张,20:00就要用这个机器,这个事经理还不知道。。。然后就设置BIOS开机光盘启动,选择存储,前两次因为选错了存储导致没光盘启动,后来选对了存储也还进不去,试了三四次都进不去,我慌了,这是什么问题呢,难道镜像有问题?没理由啊,拷贝没报错。我就查,查查查,么查到,后来有个人一句话点醒我了:光盘启动的话,如果你没有勾选“开机启动”的话,那就别往下看了。。突然想到,我选了镜像但是没有勾选“开机自动挂载”,可不就进不去嘛,真是忙中出错。一切都处理好了,进入了系统,然后mv /mnt/sysimage/tmp/lib64 /mnt/sysimage/,重启,正常进入系统了,但是又有新问题了:密码明明是正确的,但是提示密码不正确。

慌乱之中采取了网管的措施,重启,重启之后问题依旧,此时是19:00,经理走了,大多数同事都走了,没人知道我正在处理一个线上事故。。。说实话,这时候我心里怕了,我怕一步一个错,但是我分析着既然系统都进去了,单用户模式应该没问题,改改密码吧,然后就把系统密码改成123456,重启后,正常进入系统了,发现一切都正常,没问题了吧。。。然后我远程连接这台机器,提示超时,回到vmware上,发现系统的sshd服务没起,查看了这个服务是开机启动的,然后我就手动起,提示少“libkrb5.so.3”,等于这个libkrb5.so.3库文件不仅影响了yum,还影响了ssh服务,然后我就又进入linux的修复模式,将镜像里的libkrb5.so.3拷贝到系统,进入系统后启动sshd服务正常,远程连接也行了,但是又有新问题了,只能用root用户,切普通用户就卡死,这又是什么问题呢?难道是堡垒机后遗症(公司用着堡垒机呢,出事故后我就把这台机器从堡垒机上下了)?然后我就把sshd.config里的关于堡垒机的配置都清空了,还是不行。如果只能连接不能切用户,深圳那边的用户发布代码还是有问题的,所以这个问题必须解决,但是没有思路啊。

4.彻底恢复

不能没有思路就不干啊,最起码把能干的先干了。把这台机器加到堡垒机吧,然后再说,不得不说付费的东西就是好用,也不知道什么原理,把这台机器加到堡垒机后,就能正常切用户了,这时候已经是20:00多了(代码因为一些原因延迟发布了),然后我赶紧联系深圳用户,让他看看正常吗,他回复正常,可算松了一口气。。。

类似事件:

这个事故出现后不久,又有一台数据库因为更换磁盘导致系统起不来了,做的raid10,更换了一块磁盘,然后系统就崩了(事后分析是raid卡故障导致)。挂载镜像,进入linux修复模式,系统有五六个分区,不知道问题出在哪个分区,就挨个挂载,发现/boot分区不能挂载,进入/boot分区,发现是空的,也就是说/boot分区文件丢失,查了查资料,说是重装kernel可以解决,然后就重装kernel,事实发现不行,然后就从别的机器上拷贝/boot分区内容到崩溃的机器,重启机器后,不像之前直接进入grub界面了,但是读完系统进度条后就卡死了,可见还是有问题。这台数据库上部署的3M高可用应用,为了快速解决这个问题,选择了重装系统并重新部署3M应用。

在此提醒:

1、生产上操作虽然需要手速,但是回车别急着敲。

2、尽量别用rm命令,用mv替代。

3、不确定能处理好的事故,在处理了一段时候后最好上报,不然会特别特别尴尬,不上报吧可能处理不好,上报吧又觉得这么晚才报有点2逼。

linux进入修复模式:

救援模式有什么作用

◆可以更改root密码;

◆恢复硬盘、文件系统操作;

◆系统启动不来的时候,只能通过救援模式来启动;

救援模式启动的步骤如下:

1、首先开机进入BIOS设置(每台电脑进入bios的方法不同根据自己的电脑进入),BOOT启动顺序为光盘优先启动 CD-ROM Drive 使用小键盘的+ -号调整上下顺序;设置好后保存并退出。

如果是vmware workstation,可以“虚拟机→电源→开机进入固件”进行设置BIOS;

如果是物理机,直接F1 F2 F12什么的进入BIOS,各有不同,看提示;

如果是exsi,右键虚拟机,点编辑,先挂载了镜像,然后修改开机启动到BIOS界面即可。

2、重启系统后进入安装启动菜单,上下键移动到Rescue install system 救援安装系统;

3、选择语言,保持默认English

4、选择键盘类型,保持默认us

5、是否启动网络,需要根据你实际情况进行选择,如果需要通过联网拷贝数据,选择YES,在这里我们选择NO;

6、进入到Rescue界面,选择Continue

7、本地系统挂载在/mnt/sysimage下 如果要到root环境下,运行 chroot /mnt/sysimage 命令

8、三种选项:shell 进入命令行模式;fakd是诊断模式;reboot重启电脑;我们这里选择shell

9、进入shell命令行,提示符为bash-4.1#

ls /mnt/sysimage/ 显示挂载的目录为根目录的文件

执行chroot /mnt/sysimage/ 将/mnt/sysimage/目录下的文件移动到根目录;

命令后提示符为sh-4.1#

ls    显示为根目录的文件;

事实上,缺少系统文件会导致“chroot /mnt/sysimage”出错,查也查不出来什么,因为不管缺什么都是统一的错误提示“/bin/bash。。。。”,像我上面缺少/lib64目录、缺少/boot下的文件,在“chroot /mnt/sysimage”时都会报错,而且报错一样。。。可以不理会这个命令,你干啥干啥,该修改文件修改文件,该拷贝目录拷贝目录,不影响。

10、在sh-4.1#模式下需要先exit退出,回到bash-4.1#才可以reboot重启系统;


时间: 2024-10-31 15:05:27

生产事故:误删/lib64,移走/lib64目录的相关文章

使用rsync+inotify的方式监控一个目录,当被监控目录下的子目录被移走后无法同步的问题

最近在测试rsync+inotify的方式同步PHP代码到一个集群下的WEB服务器.如被监控的目录是/var/www/html下有三个目录 dream_android  dream_ios  game_router 当我把dream_android这个目录更名为android后,发现其他服务器上没有出现android并且原有的dream_android并没有被删除.测试游戏时发现大量的404错误,最大的问题就是代码同步出现了问题. 检查同步脚本中inotify和rsync相关的信息 /usr/b

问题解决:Centos误将/lib64更改为lib64.bak

CentOS系统中,lib目录下的库对系统的正常运行起着非常关键的作用.一旦误操作将导致系统瘫痪. /lib64被重命名故障表现由于操作失误,把/usr/lib64重命名成了/usr/lib64.bak,结果发现,在运行所有外置命令的时候报错: mv命令无法使用 -bash: /bin/mv: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory cp命令无法使用 -bash: /bin/cp: /

生产事故(MongoDB数据分布不均解决方案)

可以很明显可以看到我们这个集合的数据严重分布不均匀. 一共有8个分片,面对这个情况我首先想到的是手动拆分数据块,但这不是解决此问题的根本办法. 造成此次生产事故的首要原因就是片键选择上的问题,由于片键选择失误,在数据量级不大的时候数据看起来还是很健康的,但随着数据量的暴涨,问题就慢慢浮出了水面,我们使用的组合片键并不是无规律的,片键内容是线性增长的,这就导致了数据的不正常聚集.由于数据分布不均匀,我们有两个分片的磁盘使用率接近80%,数据还在持续增长,这个问题必须尽快解决. 涉及到此次事故的集合

#批量清理某目录下的文件或移除某目录下的文件

#!/bin/bash  #批量清理某目录下的文件或移除某目录下的文件 basedir=/data/db/renewal/snapshots   #执行目录 clear_before_days=95       #清理的时间,100代表100天前的数据 logdir=/data/log/clear      #日志路径 log=$logdir/clear.log      #日志文件 file_key="snapshot"       #清理文件包含关键字 is_font=1     

13Lync2013升级到SkypeForBusiness2015--迁移CMS&会议目录&呼叫允许控制

3.7 迁移CMS 安装CsDatabase到Skype For Business后端数据库实例,命令如下: 使用Move-CsManagementServer开始迁移CMS 3.8 迁移会议目录和呼叫允许控制等 3.8.1 迁移会议目录 3.8.2 迁移呼叫允许控制 13Lync2013升级到SkypeForBusiness2015--迁移CMS&会议目录&呼叫允许控制

因我而起的生产事故

首先,祝大家新年快乐!应该陆陆续续开始踏上了回家的征程吧! 生产事故 产品上线一段时间之后,技术支持反馈客户现场一个进程总是挂掉或者不干活!最开始不紧不慢的查找问题,后来老大很生气说:生产事故很严重,你们居然不重视!成立了一个应急小组,专门解决此问题,其中包括我! 事故原因 经过2.3天没日没夜的艰苦奋斗,终于找到进程挂掉的原因,问题因我而起.大约去年8月,做一个项目,与大数据对接,把数据推给它,然在加上了推送部分的代码,最开始那个模块是没有日志的,然后给加上了日志打印,当时也没考虑那么多,多线

将mysql的data目录移走方法

如移动到"/home/mysql/data",我的mysql是装在/usr/local/mysql下的 1. 将/usr/local/mysql/data移动到/home/mysql/data mv /usr/local/mysql/data /home/mysql/data 2. 修改启动文件 vi /usr/local/mysql/support-files/mysql.server 修改如下行,指定datadir datadir=/home/mysql/data 3. 修改配置文

深入认识二进制序列化--记一次生产事故的思考

一 概要 二进制序列化是公司内部自研微服务框架的主要的数据传输处理方式,但是普通的开发人员对于二进制的学习和了解并不深入,容易导致使用过程中出现了问题却没有分析解决的思路.本文从一次生产环境的事故引入这个话题,通过对于事故的分析过程,探讨了平时没有关注到的一些技术要点.二进制序列化结果并不像Json序列化一样具备良好的可读性,对于序列化的结果大多数人并不了解,因此本文最后通过实际的例子,对照MSDN的文档对于序列化结果进行详细解析,并意图通过本次分析对于二进制序列化的结果有直观和深入的认识. 二

凌晨1点突发致命生产事故,人工多线程来破局!

有一个读者问我:你认为一个程序员具备什么样的能力,才算得上是厉害的程序员? 我答:拥有解决问题的能力的程序员. 这个回答貌似有点抽象,不要紧看下面的文章你会慢慢有所了解. 一.解决问题的能力 很多年前,当我还是一个小菜鸟的时候,我的领导经常告诉我,解决问题的时候,不要局限于技术本身,并且形象的给我举了一个例子. 有一次两个程序员一直讨论,如何判断两台服务器之间是否网络正常,争争吵吵了很久.旁边的一个测试说,Ping 一下不就知道了吗?就这样他们用 Java 代码实现了 Ping 操作解决了这个问