记录一次CentOS 7因断电导致宕机的修复过程
一日,突然接到电话说CentOS 7主机宕机了,让协助处理;由于不在现场,第一时间电话联系了现场的工程师了解宕机原因、都进行了哪些修复性操作;然后让录了一个开机启动的视频。下文截图来自于视频截图,展示出来了宕机的报错信息。(说明,本文档图片均来源于他人现场拍照,所以有些模糊。)结合又是由于突然断电导致的宕机;所以,第一时间就是想去检查/etc/fstab文件。
检查发现fstab文件不存在,但是奇怪的产生了一个fstab.empty
尝试执行fdisk –l命令查看分区情况,发现命令不识别。
尝试提权也提示文件不存在。
尝试将系统启动时的ro修改为 rw init-/sysroot/bin/sh进入到修复模式,失败!!!
各种尝试,均失败;放弃;让现场工程师找来一个U盘并刻录了一个centos7的ISO镜像文件,准备U盘启动进入到救援模式;选择了“1) Continue”,同样由于分区存在问题,卡在了这里,进不去;
截止目前为止,已判定分区肯定出问题了;一时又想不到解决办法,且远程指导操作也很麻烦;就想着懒省事,让他们放弃修复,重新部署一套;却被告知,只能修复(该主机为多台主机集群中的一台,让应用工程师部署一套程序的话,要价不菲);
无路可退,迎难而上;
重启主机,再次进入到救援模式,这次选择“3)Skip to shell”;成功进入到了一个以ISO镜像为引导的内核系统里。
此时,执行fdisk –l ,结果如下(发现了sda分区,就看到了希望):
发现是GPT格式,就执行了parted命令验证了分区情况。同时又看到了lvm
于是执行了lvscan;看到了期待已久的三个分区里(root、swap、boot)的两个root、swap。而且逻辑分区状态处于“ACTIVE”激活状态;好事。
紧接着,就创建了一个临时目录/tmpdisk;想把dev/centos/root分区挂载到/tmpdisk目录,去编辑/etc/fstab文件;结果命令行又卡住了;无语……
重启后又尝试把dev/centos/data分区挂载到/tmpdisk目录,成功;进一步验证了猜想,root分区出问题了。
执行命令fsck /dev/centos/root命令尝试检查root分区,提示执行xfs_repair命令。
执行xfs_repair /dev/centos/root; 提示:文件系统需要修复;
于是按照提示又执行了xfs_repair -L /dev/centos/root
上一个命令执行成功后,再次挂载root分区,成功;
本以为终于可以到/etc目录下去创建fstab文件了;却又惊奇的发现有一个fstab文件,但是文件为空,没有任何内容(一开始查看的时候不是没有吗?大大的疑问)。
编辑fstab文件,并增加了如下内容(截止到目前为止,并没有找到boot的具体分区路径;该主机上home分区不存在,后来也注释掉了);
再次查看fsab文件内容;执行blkid命令,查看当前看到的分区。
惊吓般的发现并没有/dev/sda1分区;
又陷入了思考;明明fdisk –l命令查到了boot在/dev/sda1上;这里为啥却找不到sda1.
尝试执行xfs_repair命令去修复sda1;发现也不行(blkid命令根本就看不到sda1分区,谈何修复)。
没办法;准备手工创建boot分区,并从其它正常运行的系统上拷贝boot目录来;
突然,脑袋冒出来一个疑问,执行parted /dev/sda命令时,有个499MB的分区没有标明用途(Flags);按照理论推算,499M应该就是/dev/sda2,会不会就是boot分区?于是又进行了一次挂载;成功挂载后,执行ls命令惊喜的发现猜想是正确的;boot分区找到了 。
再次编辑/etc/fstab文件,结果如下(该主机上home分区不存在,注释掉了):
截止到目前为止,终于找到了主机启动所必须的三个分区;转折点来了;兄弟,重启机器!!!
终于看到了久违的登录界面;终于搞好了,历时三个半小时。