linux系统的启动流程:
POST --> BootSequence(BIOS) --> bootloader --> kernel [-->ramfs] --> rootfs[ro]--> /sbin/init --> 设定默认运行级别 --> 进行系统初始化 --> 并行执行ctrl+alt+del热键功能定义,系统服务的开启和关闭,电源的管理,dbus管理 -->登录提示符
在我们linux系统的启动过程中存在着这样的启动流程,下面我们一一来介绍各个流程的内容。
一、POST——通电自检程序
二、BootSequence——启动顺序
启动顺序决定了到何种硬件设备上加载操作系统,它按照指定的次序查找各个引导设备,第一个
被找出有引导程序的设备即为本次启动要用到的设备
引导程序:bootloader,引导加载器,程序
MBR:主引导记录,位于第一磁道,第一扇区
MBR描述了逻辑分区的信息,包含文件系统以及组织方式。此外,MBR还包含计算机在启动的第二阶段加载操作系统的可执行代码或连接每个分区的引导记录。这个MBR代码通常被称为引导程序
在总共512字节的主引导扇区(主引导记录MBR)中:
主引导程序(bootloader)占446字节
分区表 (Parition table),DPT:64字节
magic number:2字节,55AA(固定)
在我们linux中有特定的主引导程序:
GRUB:GRand Uniform Bootloader,全球统一引导加载器;
CentOS6:GRUB的版本号格式为:0.x.x:grub legacy
引导操作系统启动的引导程序,主要分为两个阶段
1.stage1,主引导程序(bootloader),446字节,仅仅是为了寻找stage2
2.stage2:保存在磁盘的启动分区(/boot),stage2以及内核核心必须放置在同一个基本磁盘分区上
stage2地提供的功能:
基本功能:
1.加载操作系统内核核心文件
扩展功能
2.提供一个菜单和交互式接口
3.允许用户编辑菜单内容
4.命令行接口操作模式
5.身份认证机制以保证菜单编辑和内核的安全
此外,起始在stage1和stage2之间还存在一个1.5stage
MBR之后的若干个扇区,一般来讲20多个扇区用来保存stage 1_5,
它的功能是:让stage1中的bootloader程序能够识别stage2所在的分区的文件系统
CentOS7:1.X:grub 2
grub所提供的功能:
1,为用户提供一个菜单,菜单中列举的是各个可以启动的操作系统内核
2.可以将用户选定的内核核心文件装在到RAM中,解压缩并展开,将系统控制权移交给内核
3.交互式的命令行接口
4.菜单及内核启动的安全保障
安装grub:
grub-install --root-directory=/mnt /PATH/TO/
grub命令行界面的常用命令:
grub>
help + COMMAND :显示特定命令的详细帮助信息
root + (hd#,#):将指定磁盘的指定分区作为grub程序的根设备
hd#:磁盘编号,#一般是从0开始的数字:如hd0表示第一块磁盘
#:分区的编号,0表示第一个分区
如:(hd0,0):当前计算机上的第一块磁盘的第一个分区
find (hd#,#):从指定的分区中搜索文件,并显示出文件所在的位置
kernel /PATH/TO/KERNEL_CORE_FILE:设定本次启动时用到的内核文件的绝对路径;额外还可以在kernel命令中为内核启动添加更多的内核参数
例:kernel /vmlinux ro root=/dev/sdb3 selinux=0 init=/bin/bash
initrd /PATH/TO/initramfs-VERSION-release
grub的配置文件:/boot/grub/grub.conf
grub配置文件中的各字段的含义:
[root@localhost ~]# ls -l /etc/grub.conf
lrwxrwxrwx. 1 root root 22 3月 11 23:38 /etc/grub.conf -> ../boot/grub/grub.conf
default=0: 设定默认启动的菜单项,整个菜单项中的所有的title是从0开始编号的
timeout=5:用户未作出选择时在多长时间之后,grub会自动引导默认菜单所对应内核的超时时间
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz:grub的背景图片对应的路径
hiddenmenu:隐藏grub的启动菜单
password --md5 CRYPTED_PASSWORD: 保留在上面的密码为了保护菜单,用于防止随意进入单用户模式
保护操作系统内核的启动
title CentOS 6 (2.6.32-573.el6.x86_64):
定义菜单项中的各个标识,可以定义多个title项,至少有一项
root (hd0,0)
指定grub的根设备,通常是用来安装grub的那个分区
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root nomodeset rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet:
该菜单对应的要启动的内核及传递给内核的各个参数
initrd /initramfs-2.6.32-573.el6.x86_64.img
内核所对应的ramdisk文件