Linux系统启动过程:
BIOS自检-读取MBR-执行引导程序GRUB-加载内核-执行init——系统初始化
1.BOIS:基本输入输出系统,
BIOS自检主要工作:侦测电脑周边配套设备,如:CPU类型,速度,缓存等;内存的速度,容量;硬盘的大小类型和工作模式;
检查这些设备能否通过检测
2.读取MBR
BISO自检后读取第一启动设备硬盘的第一个扇区——MBR,然后执行里面的存储程序
MBR扇区512字节大小,其中后64字节存储磁盘分区信息,最后两个字节存储磁盘的有效标志,其余466字节空间保存启动程序,然后由这个i小程序加载
存储其他位置的操作系统,即启动GRUB程序
3.执行引导程序——GRUB
GRUB程序配置文件/boot/grub/grub.conf
1 [root@H0f ~]# cat /boot/grub/grub.conf 2 # grub.conf generated by anaconda 3 # 4 # Note that you do not have to rerun grub after making changes to this file 5 # NOTICE: You have a /boot partition. This means that 6 # all kernel and initrd paths are relative to /boot/, eg. 7 # root (hd0,0) 8 # kernel /vmlinuz-version ro root=/dev/sda2 9 # initrd /initrd-[generic-]version.img 10 #boot=/dev/sda 11 default=0 #引导程序的第一个操作系统开机,对应硬盘的第一个分区 12 timeout=5 #进入GRUB的画面后,5秒选择使用哪个操作系统开机 13 splashimage=(hd0,0)/grub/splash.xpm.gz#开机背景图案,hd0表示第一个硬盘,0指硬盘第一个分区,背景图像文件名 14 hiddenmenu #隐藏开机选项 15 title CentOS 6 (2.6.32-642.el6.x86_64)#开机选项标题名称 16 root (hd0,0) #0是介绍文件位于哪个目录中 17 kernel /vmlinuz-2.6.32-642.el6.x86_64(#表示kernel存放内核的位置) ro(#表示 read only) 18 root=UUID=130776d3-1cb4-415a-bed2-b4a4bf861f47 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet(#不显示错误信息) selinux=0 19 initrd /initramfs-2.6.32-642.el6.x86_64.img #将initrd映像文件加载到内存
4.加载内核
Linux内核保存在/boot 名字一般为vmlinux-版本号
内核作用:《取得BOIS检测到的硬件设备信息,然后将硬件设备进行管理,这样才能够提供给Linux系统使用》
接着加载相应设备驱动程序,之后挂载文件系统,加载开机所需要的库文件程序等
因此Linux下主要目录必须在同一分区上,否则将开机失败
dmesg 查看本次启动内核输出信息
1 [root@H0f rc.d]# dmesg |more 100 2 Initializing cgroup subsys cpuset 3 Initializing cgroup subsys cpu 4 Linux version 2.6.32-642.el6.x86_64 (mockbuild@worker1.bsys.centos.org) (gcc version 4.4.7 20120313 5 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Tue May 10 17:27:01 UTC 2016 6 Command line: ro root=UUID=130776d3-1cb4-415a-bed2-b4a4bf861f47 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF 7 -8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb q 8 uiet selinux=0 9 KERNEL supported cpus: 10 Intel GenuineIntel 11 AMD AuthenticAMD 12 Centaur CentaurHauls 13 Disabled fast string operations 14 BIOS-provided physical RAM map: 15 BIOS-e820: 0000000000000000 - 000000000009ec00 (usable) 16 BIOS-e820: 000000000009ec00 - 00000000000a0000 (reserved) 17 BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved) 18 BIOS-e820: 0000000000100000 - 00000000bcee0000 (usable) 19 BIOS-e820: 00000000bcee0000 - 00000000bceff000 (ACPI data) 20 BIOS-e820: 00000000bceff000 - 00000000bcf00000 (ACPI NVS) 21 BIOS-e820: 00000000bcf00000 - 00000000bd000000 (usable)
5.执行init
ps -aux 查看当前系统内的所有进程,PID为1的进程永远是init,即系统第一个进程,也是所有进程的父进程
1 [root@H0f ~]# ps -aux 2 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ 3 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 4 root 1 0.2 0.0 19344 1544 ? Ss 13:57 1:19 /sbin/init 5 root 2 0.0 0.0 0 0 ? S 13:57 0:00 [kthreadd]
6.系统初始化
init程序读取/etc/inittb 配置文件的设置,根据配置文件来决定接下来操作系统将如何开展工作
(1).runlevel:系统常用运行级别0,1,3,5
1 # Default runlevel. The runlevels used are: 2 # 0 - halt (Do NOT set initdefault to this) #关机 3 # 1 - Single user mode #单用户模式 4 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)#可以使用所有用户登录,但没有网络功能,不启用NFS working 5 # 3 - Full multiuser mode #可以使用所有用户登录,具有所有功能 6 # 4 - unused #用户自定义,默认与3相同 7 # 5 - X11 #与3相同,开机是图形化界面 8 # 6 - reboot (Do NOT set initdefault to this)#重启
(2)执行初始化程序
/etc/rc.d/rc.sysinit程序作用:
- 设定计算机名称,hostname在/etc/sysconfig/network文件中
- 设定系统时间
- 定义键盘,加载键盘驱动,识别键盘以便于信息收集
- 启用交换(swap)分区
- 检查根目录,且挂载成可读可写状态
- 加载其他设备,比如RAID和逻辑卷LVM
(3)执行runlevel对应程序
不同的级别对应执行/etc/rc.d 目录下不同的文件
1 [root@H0f rc.d]# cd /etc/rc.d 2 [root@H0f rc.d]# ls 3 init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit