一次linux启动故障记录

一次linux启动故障记录

故障背景:

在2.6.32升级内核之后,出现多台设备启动失败,失败的全部都是ssd作为系统盘的机器,bios引导之后,屏幕就黑了,没有打印。

一开是以为是mbr损坏了,所以将启动盘挂载到其他服务器上,结果发现mbr和升级之前备份的mbr是一样的,而且和升级后能正常启动的mbr也是一样的。

 

排查到此,没能继续跟踪,找专业的os团队同事蒙恩排查,结论记录如下:

由于使用的是grub作为引导程序,mbr中的扇区位置,找不到stage2文件。

过程:

1.把现场的boot.bak和mbr.bak拿回来搭建了环境,引导内核,引导不起来,由于虚拟机bios有里程碑打印,确定bios已经加载到mbr了。

2.确定mbr坏掉了,主要是mbr中写入的stage2文件开始扇区号错了

3.打点确定升级操作没有操作到mbr以及引导相关的几个关键文件(stage2等)

grub-install失败的原因就是现场用了这种方式写device map文件,构造个如下的device.map文件,然后用命令:”grub-install /dev/sda” (sda是系统盘)

[root@XJ-Center-VS3000-4 /]# cat /boot/grub/device.map

(hd0)   /dev/disk/by-id/ata-INTEL_SSDSC2BB240G4_BTWL4020041Z240NGN

 

原理记录:

=====

系统启动流程:MBR(/boot/grub/stage1)->/boot/grub/stage2->vmlinux MBR负责加载stage2->stage2负责加载vmlinux.

MBR /boot/grub/stage1,/boot/grub/stage2的关系如下:

stage1二进制么以办法识别文件系统,因此只能通过biso中断,读数据。

stage1二进制程序被写入MBR,stage1有几个变量通过编译器严格控制其在stage1二进制文件中的偏移量。其中一个最重要的变量是stage2在boot分区的开始扇区号,因此MBR为stage1文件+几个被安装程序修改的变量+分区表

stage2中内置了ext系列文件系统的支持,因此可以通过直接读boot分区所在的文件系统来加载vmlinux,grub.conf等。

上面结论的依据:

Stage 1 and Stage 2 have embedded variables whose locations are

well-defined, so that the installation can patch the binary file

directly without recompilation of the stages.

   In Stage 1, these are defined:

`0x3E’

     The version number (not GRUB’s, but the installation mechanism’s).

`0x40′

     The boot drive. If it is 0xFF, use a drive passed by BIOS.

`0x41′

     The flag for if forcing LBA.

`0x42′

     The starting address of Stage 2.

`0x44′

     The first sector of Stage 2.

`0x48′

     The starting segment of Stage 2.

`0x1FE’

     The signature (`0xAA55′).

一次linux启动故障记录

一次linux启动故障记录

打点了升级patch中是否调用过grub一级打开stage文件结果如下,并没有发现有人调用过grub命令(grub-install也是调用了grub来安装grub的)

[root@localhost home]# ./test.stap |grep -E ‘stage|grub’

open===/boot/grub/grub.conf

open===/boot/grub/sedgzxf68

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting10.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting11.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting08.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting08.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting01.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting11.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting10.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting04.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting09.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting01.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting03.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting11.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting08.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting07.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting07.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting03.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting06.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting05.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting02.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting07.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting02.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting01.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting09.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting06.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting09.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting05.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting05.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting03.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting10.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting06.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting04.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting04.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting02.png

execve===>/sbin/grubby

open===/etc/grub.conf

open===../boot/grub/grub.conf-

execve===>/sbin/grubby

open===/etc/grub.conf

execve===>/sbin/grubby

open===/etc/grub.conf

open===/etc/sysconfig/grub

execve===>/sbin/grubby

open===/etc/grub.conf

open===../boot/grub/grub.conf-

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting10.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting11.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting08.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting08.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting01.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting11.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting10.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting04.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting09.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting01.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting03.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting11.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting08.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting07.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting07.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting03.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting06.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting05.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting02.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting07.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting02.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting01.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting09.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting06.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting09.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting05.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting05.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage01-connecting03.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting10.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting06.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage02-connecting04.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting04.png

open===/usr/share/icons/hicolor/22×22/apps/nm-stage03-connecting02.png

open===/boot/grub/grub.conf

open===/boot/grub/grub.conf

 

排查了grub-install脚本,在脚本中发现对device-map文件的解析还是过于简单,我们这种类型的device-map没有适配,在升级之前,我们的mbr中对stage2的扇区也是错的,

但由于这个扇区里面存放的之前老的stage2文件还留存着,反倒没有问题,升级之后,boot分区可能因为备份的原因,里面要覆盖一些新的文件,导致那个sector被分配出去了。

参考资料:

https://www.gnu.org/software/grub/manual/legacy

转载于:https://www.cnblogs.com/10087622blog/p/9896701.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101324.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • axisfault 解析报文异常_oculus headset only

    axisfault 解析报文异常_oculus headset only一般说来,不可避免的WebService的服务中也会出现异常,举个简单的例子,一个服务接受一个SOAP请求消息,获取有效负载后,进行一个数据库更新操作,而在更新操作过程中发生了SQLException,这个时候就需要告诉客户端(调用WebService)出现异常了,Axis2将异常封装成为一个AxisFault进行抛出。任何类型的异常Axis2都会对其进行封装,而不管该异常是运行时异常,还

    2025年11月8日
    7
  • 001-圆周率1万位「建议收藏」

    001-圆周率1万位「建议收藏」3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564

    2025年11月3日
    10
  • 英诗派精致版配置参数_自动舒适版是什么配置

    英诗派精致版配置参数_自动舒适版是什么配置部署运行CKFinder

    2025年8月11日
    6
  • python七夕表白代码(转载)_情人节图片唯美浪漫

    python七夕表白代码(转载)_情人节图片唯美浪漫七夕,最浪漫的Python代码送给陷入爱河的Python男同胞image.gif​三句话情书,我们听过。如何用python写一段浪漫的代码?可以是简短有韵味的情书式,也欢迎冗长而效果拔群的万行代码,我这在下面例举一些,还有其它思路的欢迎补充。千万千万别用代码表白,因为Python已经告诉你了:’she’isnot’yours’True千万别用Python表白,实在太扎心了:七夕,最浪漫的Py…

    2022年9月24日
    5
  • 随机梯度下降算法原理 知乎_梯度下降算法的正确步骤

    随机梯度下降算法原理 知乎_梯度下降算法的正确步骤目录1.算法目标2.算法描述3.算法推导4.注意1.算法目标逐渐逼近损失函数loss的极小值,简单抽象为求函数的极小值。2.算法描述每次取一个增量,使得,每次向函数值更小的地方前进一小步,多次迭代就能做到逐渐逼近函数的极小值。3.算法推导展开得到公式。其中H为海森矩阵,暂且不考虑。为使成立,只需要保证。即,当时,,如此即可保证每次更新在逐渐逼近函数的极小值。其中为学习率是一个较小的正数。每次更新时做操作,求得的最小值。4.注意上..

    2025年9月7日
    6
  • asp.net专业实习——网上花店系统

    asp.net专业实习——网上花店系统2019.5.2项目适用vs2010直接打开后更改数据库连接字符串即可如果在添加商品遇到报错,多半是输入的字符太多了链接:https://pan.baidu.com/s/1ulU89ogdHKRVGv9ad5Zszw提取码:he88复制这段内容后打开百度网盘手机App,操作更方便哦此项目是用vs2013开发,使用时需要重新配置连接字符串。。如果你的环境是vs20…

    2022年7月21日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号