记录一次CentOS 7因断电导致宕机的修复过程

一日,突然接到电话说CentOS 7主机宕机了,让协助处理;由于不在现场,第一时间电话联系了现场的工程师了解宕机原因、都进行了哪些修复性操作;然后让录了一个开机启动的视频。下文截图来自于视频截图,展示出来了宕机的报错信息。(说明,本文档图片均来源于他人现场拍照,所以有些模糊。)结合又是由于突然断电导致的宕机;所以,第一时间就是想去检查/etc/fstab文件。

centos7系统错误日志 centos7异常重启日志_CentOS


检查发现fstab文件不存在,但是奇怪的产生了一个fstab.empty

centos7系统错误日志 centos7异常重启日志_centos_02


尝试执行fdisk –l命令查看分区情况,发现命令不识别。

centos7系统错误日志 centos7异常重启日志_centos_03

尝试提权也提示文件不存在。

centos7系统错误日志 centos7异常重启日志_centos_04

尝试将系统启动时的ro修改为 rw init-/sysroot/bin/sh进入到修复模式,失败!!!

centos7系统错误日志 centos7异常重启日志_CentOS_05


各种尝试,均失败;放弃;让现场工程师找来一个U盘并刻录了一个centos7的ISO镜像文件,准备U盘启动进入到救援模式;选择了“1) Continue”,同样由于分区存在问题,卡在了这里,进不去;

截止目前为止,已判定分区肯定出问题了;一时又想不到解决办法,且远程指导操作也很麻烦;就想着懒省事,让他们放弃修复,重新部署一套;却被告知,只能修复(该主机为多台主机集群中的一台,让应用工程师部署一套程序的话,要价不菲);

无路可退,迎难而上;

重启主机,再次进入到救援模式,这次选择“3)Skip to shell”;成功进入到了一个以ISO镜像为引导的内核系统里。

centos7系统错误日志 centos7异常重启日志_重启_06


此时,执行fdisk –l ,结果如下(发现了sda分区,就看到了希望):

centos7系统错误日志 centos7异常重启日志_centos7系统错误日志_07


发现是GPT格式,就执行了parted命令验证了分区情况。同时又看到了lvm

centos7系统错误日志 centos7异常重启日志_centos_08


于是执行了lvscan;看到了期待已久的三个分区里(root、swap、boot)的两个root、swap。而且逻辑分区状态处于“ACTIVE”激活状态;好事。

centos7系统错误日志 centos7异常重启日志_linux_09


紧接着,就创建了一个临时目录/tmpdisk;想把dev/centos/root分区挂载到/tmpdisk目录,去编辑/etc/fstab文件;结果命令行又卡住了;无语……

重启后又尝试把dev/centos/data分区挂载到/tmpdisk目录,成功;进一步验证了猜想,root分区出问题了。

centos7系统错误日志 centos7异常重启日志_CentOS_10


执行命令fsck /dev/centos/root命令尝试检查root分区,提示执行xfs_repair命令。

centos7系统错误日志 centos7异常重启日志_CentOS_11


执行xfs_repair /dev/centos/root; 提示:文件系统需要修复;

centos7系统错误日志 centos7异常重启日志_CentOS_12


于是按照提示又执行了xfs_repair -L /dev/centos/root

centos7系统错误日志 centos7异常重启日志_centos7系统错误日志_13


上一个命令执行成功后,再次挂载root分区,成功;

centos7系统错误日志 centos7异常重启日志_centos7系统错误日志_14


本以为终于可以到/etc目录下去创建fstab文件了;却又惊奇的发现有一个fstab文件,但是文件为空,没有任何内容(一开始查看的时候不是没有吗?大大的疑问)。

centos7系统错误日志 centos7异常重启日志_linux_15


编辑fstab文件,并增加了如下内容(截止到目前为止,并没有找到boot的具体分区路径;该主机上home分区不存在,后来也注释掉了);

centos7系统错误日志 centos7异常重启日志_linux_16


再次查看fsab文件内容;执行blkid命令,查看当前看到的分区。

惊吓般的发现并没有/dev/sda1分区;

centos7系统错误日志 centos7异常重启日志_linux_17


又陷入了思考;明明fdisk –l命令查到了boot在/dev/sda1上;这里为啥却找不到sda1.

centos7系统错误日志 centos7异常重启日志_CentOS_18


尝试执行xfs_repair命令去修复sda1;发现也不行(blkid命令根本就看不到sda1分区,谈何修复)。

centos7系统错误日志 centos7异常重启日志_CentOS_19


没办法;准备手工创建boot分区,并从其它正常运行的系统上拷贝boot目录来;

突然,脑袋冒出来一个疑问,执行parted /dev/sda命令时,有个499MB的分区没有标明用途(Flags);按照理论推算,499M应该就是/dev/sda2,会不会就是boot分区?于是又进行了一次挂载;成功挂载后,执行ls命令惊喜的发现猜想是正确的;boot分区找到了 。

centos7系统错误日志 centos7异常重启日志_linux_20


再次编辑/etc/fstab文件,结果如下(该主机上home分区不存在,注释掉了):

centos7系统错误日志 centos7异常重启日志_centos7系统错误日志_21


截止到目前为止,终于找到了主机启动所必须的三个分区;转折点来了;兄弟,重启机器!!!

centos7系统错误日志 centos7异常重启日志_CentOS_22

终于看到了久违的登录界面;终于搞好了,历时三个半小时。