这是看LinuxCast的笔记
Linux系统启动流程
Linux系统启动(使用GRUB引导)顺序是
- BIOS通电自检,并找到512字节的MBR(是GRUB引导的第一阶段),把控制权交给MBR
- GRUB分两个阶段引导系统
- 第一阶段MBR中的主引导加载程序加次引导载程序
- 第二阶段次引导加载程序加载内核映像
- 内核映像创建进第一个进程(init进程),初始化系统的服务
接下来我们详细介绍各个过程
BIOS
BIOS(Basic Input Output System). 计算机启动的时候第一个运行的就是BIOS, BIOS负责检查硬件并且查找可启动的设备
常见启动设备在BIOS设置中进行定义,如USB,CDROM.. 在找到启动设备后,BIOS就把控制权交给启动设备的主引导程序。
GRUB
GRUB分两个阶段来引导内核
第1阶
第一阶段主要由MBR中的主引导程序完成的,这里我们先介绍一下MBR
MBR(Master Boot Record)即主引导记录, 又叫做主引导扇区. 它共有512字节,主要功能是查找并加载次引导加载程序(第二阶段).
由三部分组成:
- 446字节的引导程序.
- 4个16字节的DPT(磁盘分区表)
- 2字节的结束标志(0x55AA),BIOS正是通过这两个字节来辨别启动设备
在第一阶段后,MBR可以直接进入第2阶段.但也可以在进行第2阶段之前,加载一个程序用来理解Linux内核的特殊文件系统.
第1.5阶段
加载对文件系统的支持文件,在CentOS下, /boot/*_stage1_5 就是各种文件的支持,MBR根据配置来加载文件系统支持
第2阶段
进入第2阶段后,它后根据GRUB的配置文件,呈现一个界面区来让用户选择启动的操作系统
GRUB的配置文件和位置系统的不同而不同.在CentOS中,GRUB的配置文件是在 /boot/grub/grub.conf中,下面让我们来仔细研究一下grub.conf
GRUB的配置
以下是CentOS的grub.conf(去掉前面的一些注释)
default=0 # 采用默认的0配置
timeout=5 # 开机的时候等待几秒让你选择
splashimage=(hd0,0)/boot/grub/splash.xpm.gz #引导界面的背景图片
hiddenmenu #默认隐藏菜单栏
title CentOS (2.6.32-279.el6.x86_64) #启动项的标题
root (hd0,0) #操作系统所在的分区
#以下是要启动的内核的配置
kernel /boot/vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=887b0b9e-449b-414e-a11d-cd94093e3fe1 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600n8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
#以下是内核模块
initrd /boot/initramfs-2.6.32-279.el6.x86_64.img
我们可以通过修改grub.conf来配置启动项, 我们可以通过dmesg来查看本次启动的信息
在kernel启动后就创建了Linux系统中运行的第一个进程init
init
init是Linux系统中运行的第一个进程,是Linux所有进程的进程,它的pid是1
init负责调用/etc/rc.d/rc.sysinit负责对系统进行初始化,持载文件系统,并且根据运行级别来启动相应的服务
Linux的运行级别
| 运行级别 | 特点及功能 |
|---|---|
| 0 | 关机 |
| 1 | 单用户模式 |
| 2 | 不带网络的多用户模式 |
| 3 | 多用户模式 |
| 4 | 未使用 |
| 5 | X11图形化模式 |
| 6 | 重启 |
以下是INIT的一些知识点
- 可以通过/etc/inittab 和 /etc/init 的配置文件修改默认的运行级别
- 每个级别对应的启动服务保存在/etc/rc.d/rc[0123456].d中
- 命令runlevel可显示当前及上一个运行级别
- 命令init可用来改变当前运行级别
实用技巧
单用户修改ROOT密码
可以通过在启动进入grub的界面时,编辑grub来进行单用户模式,具体步骤如下
- 开机时编辑grub,为内核传递参数"l"或者"single"
- 单用户直接以root用户登陆
- 用password修改root密码
GRUB加密
GRUB加密是为了,让有权限的人编辑GRUB,具体步骤如下
- 用grub-md5-crypt生成密文
- 通过在grub. conf上的启动配置下加入如下参数即可以对grub进行加密
- password --md5 你生成的密文
参考资料
转载请注明出处--nothi





