故障现象:
中午一线同事说服务器登不上了密码不对,要重新同步密码,试了一下能ping通,ssh连不上,登录idrac查看,结果卡在登录这一块。登录程序一直在输入用户名部分循环。
看样子不是密码不对,估计是登录模块哪地方损坏了,看来只能进单用户看下了,登录相关的一般都会在secure日志中记录。
重启服务器:
重启时,BIOS自检后本应该是grub引导内核启动,但是报了这个错误,
error: file '/grub2/i386-pc/normal.mod' not found.
是grub引导损坏导致的,需要修复grub。rhel7系列使用grub2来启动系统,这里要修复grub2。
服务器挂了有两块硬盘, hd0和hd1,因为这里的boot是个单独分区,所以应该在分区下的第一级目录。
boot分区一般都在第一块的第一块分区上,看下hd0,msdos1
只有(hd0,msdos1)能识别到,但是内容是空的,虽然不想相信,但怎么看也是整个boot分区都没了。接下来要重建boot分区,才能引导进入单用户。
当时故障比较紧急,没有保存多少照片,现在在虚拟机上复现下问题。
救援模式(Centos7)
挂载个rhel7的镜像,下次启动选择‘虚拟cd/dvd’,重启机器,接下来读取镜像
1.选择Troubleshooting(不要选错了,不然把系统给重装了)
2.选择‘Rescue a CentOS system’
3.输入‘1’
4.这时候会把原来的系统挂载到/mnt/sysimage
使用chroot切换下目录,就能进入到原来的系统。(关于切换上面有提示)
这是原来的文件系统和lvm,都挂载到了/mnt
出故障的系统是CentosOS 7.6的版本
执行chroot /mnt/sysimage,切换工作目录
接着切换报错:
chroot: faile ro run command '/bin/bash': No such file or directory.
字面意思是,因为/bin/bash命令找不到,导致choot执行失败。
这里的/bin/bash 是指的原来系统的bash,这时的路径就是/mnt/sysimage/bin/bash
还真没了。。。
感觉像是把根给删了。。。
/bin 是/usr/bin的软链接,但是救援模式中建立软连接路径要依赖于/mnt/sysimage,chroot之后这个路径就不存在了, 这个软链接就不会生效。
这里直接把/mnt/sysimage/usr/bin 复制到/mnt/sysimage/bin
切换前的提示符是"sh-4.2#", 切换成功后命令提示符为 "bash-4.2#"
/boot 目录是空的了, 需要重建boot
重建boot
重建boot主要分为两部分:重建内核和grub2引导
安装内核
重新安装个内核就行,先看下当前的内核版本:
当前使用的版本应该是3.10.0-1127.18.2.el7
需要注意的是,当前使用uname -a 检查出的内核版本并不是原系统的内核版本,而是挂载的镜像的。
要以安装的rpm包的版本为准。
本地没有这个版本的内核,需要配置个临时IP,连接到外网进行下载。
如果没有外网权限,可以使用rsync等工具,从局域网下载。
配置临时IP
添加临时路由
dns 设置
ping测试
接下来需要下载内核安装包,重新安装。
http://mirror.nsc.liu.se/centos-store/7.8.2003/os/x86_64/Packages/kernel-3.10.0-1127.el7.x86_64.rpm
然后强制安装:
现在/boot目录下面内核相关的文件都已经有了,还差grub2, 接下来重建grub2
重建grub2
经过重建,重新生成了引导文件。
然后重启服务器即可。
修复完成。
https://www.hugbg.com/archives/3147.html
评论