Redhat虚拟机克隆后无法开机
  BI6bSVNIuckr 2023年11月02日 30 0

故障背景

生产环境一台Oracle 19c虚拟机克隆到测试环境后报错,操作系统版本为Red Hat Enterprise Linux Server release 7.6版本

故障截图如下:

Redhat虚拟机克隆后无法开机_操作系统

最后该页面卡在【Failed to start udev Kernel Device Manager】报错后就不会有其它信息更新。该服务器为生产环境克隆到测试环境使用的,在生产环境配置的服务器内存为64G,后克隆到测试环境后考虑到测试环境资源使用量较少,故只分配了32G的内存。尝试修改内存为64G后,服务器开机正常。


故障排查步骤

先查看服务器是否有配置开机自启动命令,查看/etc/rc.d/rc.local无异常命令,检查chkconfig –list无异常开机自启进程。考虑到这台服务器为oracle服务器,联系DBA同事一起帮忙排查。由于系统增长开机后无oracle进程,判断不是由于数据库开启自启动内存不足导致启动失败。考虑到是否有配置大内存页,查看/etc/sysctlc.conf配置文件有配置 vm.nr_hugepages = 24576 ,另外查看/proc/meminfo 配置文件,HugePages_Total:    24576 HugePages_Free:     24576


(注释:这里简单介绍下大内存页Hugepages,HugePages 是 Linux 操作系统的一个内核特性,让操作系统可以支持现代硬件架构的大页面容量功能。对于 Oracle 数据库,通过启用 HugePages 并使用大页面,可以用一个页表条目代表一个大页面,而不是使用许多条目代表较小的页面,从而可以管理更多内存,减少操作系统对页面状态的维护并提高 TLB 缓存命中率。在 Linux 中,大页面大小为 2 MB。)


在Linux中,大内存页配置是内核中已经定义的,是开机过程中预置分配的内存。故排查到这里我们认为该问题应该是和大内存页相关。因为该服务器一共配置了24576个大页,每个大页大小为2MB,故光用于大内存页的预置内存就有48G。在生产环境下,虚拟机分配内存为64G,故服务器分配完预置内存后还剩16G可以正常开机,但测试环境修改为32G后,无法提供足够的预置内存导致操作系统起不来。大概知道方向后,尝试修改/etc/sysctl.conf配置文件,修改vm.nr_hugepages = 24576 -》vm.nr_hugepages = 9728(正常生产情况下建议该文件以及该值让DBA同事进行配置,运维同事协助DBA同事操作)。配置完成后poweroff关机,虚拟机管理平台修改内存后32G后开机,发现系统还是无法启动,故障报错没有变化,故又修改内存回64G后重启进行测试。


系统正常启动后,还是检查/etc/sysctlc.conf配置文件和/proc/meminfo文件,查看vm.nr_hugepages = 9728 以及HugePages_Total:    9728 HugePages_Free:     9728

参数均修改成功。通过free -m查看内存使用率已使用19G,剩余内存45G,使用内存是小于32G的,按照推测32G内存预置给大内存页内存19G还剩约13G系统是可以起来的,但是还是没有起来。后续重新尝试在/etc/sysctlc.conf 注释该行vm.nr_hugepages = 9728,

重新关机后配置32G 内存依旧无法启动,修改为64G内存后启动正常。但启动正常后发现/etc/sysctlc.conf 中vm.nr_hugepages = 9728该行依旧为注释的,但是/proc/meminfo文件HugePages_Total变回了24576,free -m查看也占用了48G内存,貌似大内存页的注释失效了或者从其它地方读取到了默认配置。



后续的排错思路

1、 尝试通过查看操作系统是否有异常期间的系统日志来判断故障的具体信息。

2、 故障截图的信息为Failed to start udev Kernel Device Manager,检查该服务开机过程中是否对内存有依赖。

3、 判断大内存页是否有其它相关内存大小的配置。



启动start_udev 调试日志,设置udev.conf 为udev_log="debug" ,日志输出在/var/log/messag。通过查看/var/log/messages日志看看是否有异常时间的日志,发现并没有。检查demesg内核引导日志,也没有发现到记录异常信息日志。检查udev配置文件/etc/udev/udev.conf和/usr/lib/udev/rules.d未发现异常文件和配置。


最后在收集sosreport后发现操作系统目录下/boot/initramfs-3.10.0-957.el7.x86_64.img 文件中记录的sysctl.conf还是之前的数据,vm.nr_hugepages = 24576 解决方案就是在更改大内存页配置后重新rebuild initramfs文件,rebuild后重新重启系统。

操作步骤:

# cp /boot/initramfs-3.10.0-957.el7.x86_64.img  /boot/initramfs-3.10.0-957.el7.x86_64.img.bak

# dracut -f /boot/initramfs-3.10.0-957.el7.x86_64.img  3.10.0-957.el7.x86_64


故障分析:

生产环境/boot/ initramfs-3.10.0-957.el7.x86_64.img镜像中sysctl.conf配置文件为vm.nr_hugepages = 24576,服务器从生产环境克隆到测试环境后镜像不会自动重建,即使在开机后修改sysctl.conf并执行sysctl –a也不会刷新数据到镜像,如果操作系统分配内存少于48G左右,就会出现操作系统在开机Boot Loader加载驱动阶段卡住,无法进入/sbin/init初始化阶段导致系统无法正常开机。


建议:

建议在更改完sysctl.conf后,都手动进行rebuild的操作。 系统很多的时候都会在后台重新rebuild的动作,例如新版本的升级,第三方驱动/固件等等. 每次在rebuild的时候,读到sysctl.conf是什么内容就会加载进img文件。linux内核2.6版本及以上boot/initrd*.img查看配置文件方法如下:

cp /boot/initrd-***.img initrd.img.gzgunzip initrd.img.gzmkdir initrdmv initrd.img initrdcd initrdcpio -ivmd < initrd.img




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  P3nxyT0LRuwj   2023年11月24日   68   0   0 缓存redis配置文件
  tOAzE26bEQkF   2023年12月02日   31   0   0 操作系统DOS
  9JCEeX0Eg8g4   2023年12月11日   26   0   0 mysql配置文件