一次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').
打点了升级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/22x22/apps/nm-stage03-connecting10.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting11.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting08.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting08.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting01.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting11.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting10.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting04.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting09.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting01.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting03.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting11.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting08.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting07.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting07.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting03.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting06.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting05.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting02.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting07.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting02.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting01.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting09.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting06.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting09.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting05.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting05.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting03.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting10.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting06.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting04.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting04.png
open===/usr/share/icons/hicolor/22x22/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/22x22/apps/nm-stage03-connecting10.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting11.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting08.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting08.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting01.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting11.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting10.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting04.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting09.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting01.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting03.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting11.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting08.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting07.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting07.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting03.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting06.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting05.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting02.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting07.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting02.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting01.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting09.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting06.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting09.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting05.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting05.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage01-connecting03.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting10.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting06.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage02-connecting04.png
open===/usr/share/icons/hicolor/22x22/apps/nm-stage03-connecting04.png
open===/usr/share/icons/hicolor/22x22/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
一次linux启动故障记录的更多相关文章
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- Linux启动过程详述
http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...
- linux启动流程及自定义gurb
linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...
- Linux启动与登陆环境
linux启动流程 参考:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 加载内核,首先读入/boot 目录下的内核文件. ...
- linux启动流程
看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...
- Linux 启动过程分析
本文仅简单介绍Linux的启动过程,在此基础上做简要的分析.对于Linux启动过程中内部详细的函数调用不做介绍,只是希望本文能给新手起到一个抛砖引玉的作用,以便深入研究Linux的启动过程.下图基本展 ...
- [转载] Linux启动过程详解-《别怕Linux编程》之八
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...
- python实现Linux启动守护进程
python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...
随机推荐
- [UE4]更新UI的三种方式
一.函数绑定 二.属性绑定 只会列出匹配的数据类型. 三.事件驱动更新 啦啦啦啦啦 结论:函数和属性绑定的原理都是每帧都去调用绑定的函数/属性,效率比较低下,一般不推荐使用.事件驱动更新的效率最好,性 ...
- vue 父组件给子组件传值 Vue父组件给子组件传方法 Vue父组件把整个实例传给子组件
Home.vue <template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> <v-header ...
- Xmanager远程连接CentOS7
上周例会,又被说了一通,Xmanager远程连接的文档没写?服务没搭建?心想这都有VNC了,为毛一定要弄这个啊?!!但是,我还是在今天给弄了,╮(╯▽╰)╭没人权.搭建完尝试用了下,感觉吧,也不咋地啊 ...
- Linux下rz,sz与ssh的配合使用
Linux下rz,sz与ssh的配合使用 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上 ...
- hue中使用oozie的workflow执行mr
workflow创建任务 进入hue–Workflows–编辑器–workflow–创建 拖一个mapreduce作业(在页面靠近顶端有一排选项图标)到页面中间虚线框中 Jar路径必须是hdfs中ja ...
- linux 安装scala
1. 下载scala 到scala官网下载scala https://www.scala-lang.org/download/,目前最新版本是2.12.8 wget https://downloads ...
- ~Vue实现简单答题功能,主要包含单选框和复选框
内容 实现简单答题效果 环境 Vue,webpack(自行安装) 实现方式 页面将答题列表传递给调用组件,组件将结果返回给调用页面(其它模式也ok,这只是例子) ------------------- ...
- solr学习之域的管理与中文分析器配置
该文使用 Centos6.5 64 位 solr4.10.3 IK-Analyzer中文分析器 一.solr域 在solr中域的概念与lucene中域的概念相同,数据库的一条记录或者一个文 ...
- Django中的视图
Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...
- MySQL表中的数据类型
数据类型:在表中数据类型主要是限制字段必须以什么样的数据类型传值. 一 整型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT总共有五种,name我们一般用到的也就 ...