Linux开机流程以及运行级别
Linux开机流程
一、概念
1、boot loader: 领导装载程序,常用的有(Grub, spfdisk)
2、Grub: 是一个多操作系统启动管理器,开机时领导不同系统,windows linux等
二、开机的流程
1、加载BIOS(basic input output system)的硬件信息,并进行自我测试
2、读取并执行第一个开机装置内MBR(主引导记录扇区)的boot loader即grub spfdisk 等程序!
3、 grub(boot loader)就是一个多操作系统启动管理器,运行之后就是选择系统(boot loader --grup的功能之后在讲)
4、依据 boot loader 的设定加载kernel(也就是在第3步这里选择的系统的内核),加载进来的kernel在存储器中解压并执行,侦测硬件信息加载驱动程序
5、硬件驱动成功之后,kernel会主动呼叫第一个用户级的程序,init, init 会取得运行级别(runlevel) 的信息(run level 信息保存在 /etc/inittab档案中)
6、init 执行 /etc/rc.d/rc.sysinit 档案 来准备软件执行的环境(如 网络 ,时区等信息)具体信息可以 vim /etc/rc.d/rc.sysinit 去查看
7、init 执行 run-level 的各个服务即启动和这个run-level 对应的服务
8、 执行 /etc/rc.d/rc.local 档案 (这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里)
9、 init 执行终端机仿真程序 mingtty 来启动 login 程序,最后等待用户登录
三、Bios(basic input output system)的作用
1、Bios它是一组固化到计算机内主板上一个Rom(read only memory) 芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,他里面的程序是被厂家烧录进去的,所以只能读不能改
2、Cmos是微机主板上的一块可读写的RAM芯片,主要用来保存当前系统的硬件配置和操作人员对某些参数的设置.
3、透过bios 程序去加载cmos 的信息,并且藉由cmos内的设定值取得主机各硬件配置信息,如cup ,接口设备的沟通频率开机装置的顺序,各个接口设备的I/O地址等.
4、获取这些信息之后,Bios 还会进行开机自我测试,然后开始执行硬件侦测的初始化,并设定pnp装置,之后再定义出开机的装置顺序,接下来就会开始进行开机装置的数据读取(MBR相关任务开始) (MBR master boot record 主引导区)
5、由于系统软件大多都被放在硬盘上,所以Bios 会制定开机的装置好让我们可以读取磁盘中的操作系统核心档案。
6、由于不同操作系统的文件系统格式不同,因此我们必须要以一个开机管理程序来处理核心档案加载的问题,因此这个开机管理程序就被称为 boot loader !
7、这个boot loader 就安装在第一个扇区(sector)内,也就是我们说的MBR( master boot record 住引导记录区)
8、每种操作系统的 boot loader 都不同,这样的话Bios怎么读取 MBR中的内的boot loader那?
9、其实 BIOS是通过硬件的INT13中断功能来读取 MBR 中的内容,也就是说只要BIOS在硬件侦测的时候如果能够侦测到你的磁盘(不管是sata 还是ide接口)那就有办法透过INT 13 这条信道来读取该磁盘的第一个扇区你的MBR中的内容,这样的话 boot loader 也就能够被执行了!
四、Boot loader (引导装载程序)
1、Boot loader 的最主要功能就是要认识操作系统的文件格式,并加载选定的系统核心到住住存储器中去执行。
2、由于每一种操作系统的文件格式不同,所以每种操作系统都有自己的boot loader
3、这样的话,当在一台机器上装多个操作系统怎么办因为MBR只有一个,而每种操作系统都有自己的boot loader ,其实每个filesystem 或主分割槽都会留Boot sector(引导扇区),来安装自己的boot loader 所以可以安装多系统的问题也就解决了
4、boot loader 的主要功能:
(1)、提供选单: 用户可以选择自己的开机项目,这也就是多重引导的重要功能。
(2)、载入核心档案: 直接指向可开机的程序区段,开始操作系统。
(3)、转交其他的boot loader : 将开机管理功能转交给其他的boot loader 负责。
** 由于具有选单功能因此我们可以选择不同的核心来开机
** 由于具有控制权转交的功能,因此我们可以加载其他boot sector 内的 boot loader !
5、当boot loader 的管理开始读取核心档案后,接下来Linux 就会将核心解压缩到主存储器中,并且利用核心的功能,开始测试与驱动各个周边的装置 如存储装置, cpu, 网卡,声卡等。此时linux 核心会以自己的功能重新侦测硬件信息,而不一定会使用BIOS侦测到的信息,也就是说此时开始 加载进来的Linux 核心 接管了 BIOS的工作!
6、到此内存中已经加载了 kernel 并使用kernel 的功能来侦测硬件以及尝试挂在根目录取得额外的驱动程序,但是现在的内核不认识磁盘,没办法挂在根目录,所以也就没法读取 /lib.modules/内的驱动
7、内核不认识磁盘,那如何挂在跟目录,如何加载驱动,那就得借助 虚拟文件系统(也叫临时文件系统 initrd)来解决
8、虚拟文件系统的特色是,他能够通过 boot loader 加载到内存中, 然后这个档案会被解压并在内存中仿真成为一个根目录,且此仿真目录能够提供一支可执行的程序,透过这个程序来加载开机过程中所需要的模块,而通常这些模块就是 USB RAID SCSI 等文件系统与磁盘接口的驱动程序,等这些程序载入完毕后 会帮助核心重新呼叫 /sbin/init 来开始后续的正常开机流程。
9、到此kernel 加载了需要的驱动程序,因为有了驱动可以找到磁盘,所以就挂载了 根目录文件系统,并释放这个虚拟文件系统。
10、核心主动加载第一个用户级程序 /sbin/init
五、第一个用户级程序init ,及配置文件 /etc/inittab 以及运行等级 run level
1、在核心加载完毕,进行硬件信息这测与驱动程序加载之后,此时你的主机硬件应该已经准备就绪了,此时核心会主动的呼叫第一个用户级程序,那就是 /sbin/init (init 被称为所有进行的祖进程,也是第一个启动的用户级进程)
2、 /sbin/ init 最主要的功能就是准备软件执行的环境,包括系统的主机名,网络设定,语系设置,系统文件格式及其他服务的启动, 而所有的动作都会透过 init 的配置文件及 /etc/inittab 来规划。
3、 /etc/inittab 中配置了系统的运行级别 , 这个档案的最下面 有 id : n : initdefault 这就是设置的系统运行级别
4、为何要设置系统的运行级别,这个有什么不同: linux藉由 设定的 run level 来规划,系统使用不同的服务来启动,让linux 的使用环境不同,按照有无网络与有无 xwindow可分为 7 个等级
5、 run level 运行级别
(0)、run level 0: 关机
(1) 、run level 1 : single mode 即单人维护模式,一般忘记 root的密码,系统有问题什么的使用这个模式
(2)、run level 2 : without NFS 即无NFS系统
(3)、run level 3: 完整含有网络功能的纯文本模式
(4)、run level 4: 系统保留
(5)、run level 5: xwinods 与3 是类似的只是纯文本变为窗口模式
(6)、run level 6: 重启 reboot
6、启动时执行一次的文件, /etc/rc.d/rc.sysinit 即系统的数据设定完成!
7、启动系统 服务与 启动配置文件 /etc/rc,d/rc n(你的系统级别,按照不同的级别启动不同的服务) /etc/sysconfig
8、加载核心让整个系统准备接受指令来工作,在经过 /etc/rc.d/rc.sysinit 的系统模块与相关硬件信息的初始化,你的系统应该已经顺利工作了!
六、运行级别的切换
1、事实上不同的运行级别 只是加载的服务不同,,这里已 run level 3 和 run level 5 为列: 只是他们的 /etc/rc.3d 和 /etc/rc.5d 内的Sxxname 和 Kxxname 不同而已
2、先对比 /etc/rc.3d 和 /etc/rc.5d 内k 和 s开头的档案
3、在新的 run level 内多的 K 都被关闭掉
4、在新的 run level 内多的S 都被开启,而都存在的就不用管了。
ok 这样运行级别就转化过来了!