`
Michaelmatrix
  • 浏览: 206968 次
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux系统启动过程及grub引导故障排错

 
阅读更多
Linux 系统启动过程:
1、 主机开机后,就是硬件检测( POST ),通过后再根据 BIOS 里面设置的启动顺序找到启动驱动器(如硬盘,光驱等),计算机启动都要经过这一步,没什么好说的啦。
2、 读取硬盘 MBR ,启动系统引导程序(如 grub lilo ),再由系统引导程序加载 Linux 的核心( kernel
系统引导程序引导并运行核心可以分两个阶段:
一阶段:即 BIOS MBR 中读入 IPL initial program loaderI ),就是启动系统引导程序如 grub
二阶段:加载 boot loader 的所有配置文件和相关的环境参数;由于 MBR 只有 512 字节,所以系统引导工具还要从其它地方读入数据 ( /boot 目录下的文件 )
注: MBR Master Boot Record 512 字节, 0 0 1 扇区),前 446 字节 存放的是 stage1 ,后面存放硬盘分区表信息;
3、 Kernel 会立即初始化系统中各种设备并做相关配置工作,其中包括 CPU I/O 、存储设备等,也就是加载驱动程序啦。
4、 驱动加载后,会创建一个根设备,然后将根文件系统 / 以只读的方式挂载,结束后,执行 switchroot ,转到真正的根 / 上面去,同时运行 /sbin/init 程序,运行 linux 系统的第一号进程( init 进程,也就是所有进程的父进程, PID 1
init 初始化过和参考: http://blog.chinaunix.net/u1/48373/showart_416908.html
5、 读取 /etc/inittab 配置文件
6、 执行系统初始化脚本 /etc/rc.d/rc.sysinit )对系统进行基本配置,以读写方式挂载根文件系统及其其它文件系统;
主要工作有:
a)
取得网络环境与主机类型( /etc/sysconfig/network )、
b)
挂载 /proc /sys
c)
配置 selinux

d)
系统时钟,
e)
内核参数( /etc/sysctl.conf ),
f)
加载用户自定义的模块 ( /etc/sysconfig/modules/*.modules)
g)hostname
h)
使能 swap 分区,
I
)根文件系统的检查和二次挂载(读写),

j)
激活 RAID LVM 设备
k)
使能磁盘 quota
l)
检查并挂载其它文件系统

等等。
根据运行级别启动相应服务,具体的每个运行级别的服务状态是放在 /etc/rc.d/rcX.d (X= 0 ~ 6) 目录下,所有的文件均链接到 /etc/init.d 下的相应文件
/etc/rc.d/rcX.d/
里面的文件介绍:(里面的文件都是链接文件,都是指向 /etc/init.d 底下)
l S 为开头的文件,为开机时需要启动的服务;
l K 为开头的文件,为关机时需要关闭的服务的档案连结;
l S K 后面接的数字,代表该档案被执行的顺序。
7、 读取 /etc/rc.d/rc.local 文件,就是启动用户自定义的一些脚本程序,所以说如果你有什么东西需要在系统启动时启的的话就往这个文件里面写就可以了。
8、 执行 /bin/login 程序,并等待用户登入
9、 系统启动完成。
参考文章: http://blog.chinaunix.net/u1/48373/showart_418407.html
知道了 Linux 系统的开机流程,下面再了解一下 GRUB 的配置文件,以 RHEL5.0 做参考:
该文件位置保存在 /boot/grub/grub.conf ,还有一个链接文件是 /boot/grub/menu.lst 也是指向 /boot/grub/grub.conf
[root@rhel5 ~]# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/had
default=0 // 默认启动第一个系统,以 title 分隔;
timeout=5 // 在启动菜单选择界面停停留时间,单位是秒;
splashimage=(hd0,0)/grub/splash.xpm.gz //GRUB 启动背景画面,可以不写;
hiddenmenu // 开机时是否显示启动菜单,如果要显示的话就要注释掉;
title Red Hat Enterprise Linux Server (2.6.18-53.el5) // 启动菜单显示的标题
root (hd0,0) // root 启动文件所在置
kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet //kernel 内核所在位置和名字
initrd /initrd-2.6.18-53.el5.img // initrd 内核镜象的名字
title windowsXP // 第二个操作系统的标题
rootnoverify (hd0,1)
// 操作系统存放在 hd0,1 上,不要在 grub 里挂载

chainloader +1
//
加载 boot loader 的定义值, 那个 +1 代表的是第一
sector ,也可以说成 Super block
注意: kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
rhgb 表示 redhat graphics boot ,就是会看到图片来代替启动过程中显示的文本信息,这些信息在启动后用 dmesg 也可以看到
quiet
表示在启动过程中只有重要信息显示,类似硬件自检的消息不回显示
当你的 grub.conf 配置文件出错,或者是丢失的时候,你就会发现进不了系统了。为什么?
因为 Linux 系统启动时,找不到 Kernel 文件在哪里,所以说会启动不了。会提示以下内容:
而这个时候我们可以通过下面的步聚来恢复;
1) 先找到 vmlinuz 所在的分区,也就是 /boot 所在分区

grub > root
(hd0,0)
Filesystem type is ext2fs , partition type 0x83
或者是

grub > find /vmlinuz-2.6.18-53el5 (
这里可以用 TAB 来补全 )
(hd0
0)
grub >

2) 执行 kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/rhgb quiet ( 用来指定 linux 内核 )
grub > kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet ( 可以用 TAB 补全 )
[Linux-bzImage setup=0x1e00 size=0x1b3654]
3) 执行 initrd /initrd-2.6.18-53.el5.img (用来指定 initrd 文件)
grub > initrd /initrd-2.6.18-53.el5.img ( 这里可以用 TAB 来补全 )
[Linux-initrd @ 0xfc9d000 0x242073 bytes ]
4) 执行 boot
grub > boot
后看到底下的 Hed Hat 这几个红字时就是 OK 的意思了。再下去就是启动系统啦。
登录系统时就可以在里面修改 /boot/grub/grub.conf 配置文件错误的地方了,最方便的就是把你备份出来的 grub.conf 文件直接 COPY 一份到 /boot/grub/ 下面;所以说要注意备份这些文件,要是没有备份的话只能手工写一个了,内容就是前面所说的 grub.conf 文件内容啦。
注意:关于不同的发行版的 kernel 核心那里可能不一样,你可以 ls /boot 查看一下 kernel 文件的位置和名称以及指定 initrd 文件;

本文出自 “ky.blog ” 博客,请务必保留此出处http://kyhack.blog.51cto.com/490370/192630

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics