Linux系统启动过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux系统启动过程
Red Hat Enterprise Linux启动流程图
一.初始化BIOS
& 计算机开机后首先会初始化BIOS,总的来说BIOS任务有二:
其一,检测所有外置硬体设备,收集信息,以便以后给操作系统使用;
其二,根据BIOS设置的设备启动顺序,寻找启动磁盘,以引导系统启动。
二.执行启动加载器
& BIOS找到启动磁盘后,接下来就会启动磁盘中的“操作系统”。所谓找到启动磁盘,通常是指找到硬盘的第一个扇区,这个扇区也即启动扇区(Boot Sector),也称为主要启动记录(Master Boot Record,MBR)扇区。
& 系统找到启动记录扇区后会执行并启动位于这个扇区中的前446字节空间中的“操作系统”,但由于操作系统不可能只有446字节的大小,所以这个空间无法存储真实的操作系统,为了解决这个问题人们采取了程序调用的方式,也即,在这个446字节的空间中存储一个程序,再由这个程序加载存储于其它位置的操作系统。
& 这个小存储于446字节中的小程序就是:启动加载器(Boot Loader),在Red Hat 的各版本Linux中,早期的加载器多为LILO,现在多为GRUB。
三.载入内核
& 当BIOS顺利执行启动加载器后,启动加载器会寻找存储于其它扇区中的操作系统,然后启动操作系统。当然,启动操作系统前肯定是要先启动内核的,不过,在启动内核前可以通过启动加载器(GRUB)传递一些参数(内核启动参数)给内核,以便让内核能够改变启动方式(如,Run level),或取得启动时一些重要的信息。
& Linux 内核启动后,会执行以下几项工作:
1.检测所有硬件设备
& 内核会首先向BIOS查询计算机硬件设备信息,然后接管设备,以提供给系统使用;
2.驱动硬件设备
& 系统要想使用这些硬件设备必须加载硬件设备的驱动程序。驱动程序可分为编译在内核镜像文件中的静态驱动程序(Static Driver)和存储于文件系统上的内核模块中的动态驱动程序(Dynamic Driver),由于此时文件系统尚未挂载,所以内核此时只会用静态驱动程序来驱动一些必要的硬件设备;
3.以只读方式挂载根文件系统
& 接着Linux内核会试着以只读的方式挂载根文件系统,根文件系统至少包含以下目录: /etc/ :存储重要的配置文件;
/bin/ :存储常用且开机时必须用到的执行文件;
/sbin/ :存储开机过程中所需要的系统执行文件;
/lib/ :存储/bin/ 与/sbin/ 的执行文件所需的链接库,以及Linux内核模块;
/dev/ :存储设备文件;
& 挂载根文件系统的目的有两个:
其一,安装适当的内核模块,以便驱动某些硬件设备或启用某些功能;
其二,启动存储于根文件系统中的init服务,以便让init服务接手后续的启动工作;
$ 内核启动的最后一个动作就是从根文件系统上找出并执行init服务
Linux内核会根据下列顺序寻找init服务:
1)找/sbin/下是否有init服务
2)/etc/init
3)/bin/init
4)如果前面三个目录里都找不到,最后就会执行/bin/sh
$ 如果内核都找不到init服务,则内核就会显示“Kernel panic not syncing :Attempted to kill init”的错误信息,系统启动终止;
$ 如果内核在以上的目录中找到init,则内核就会启动init服务,让init服务负责后续初始化系统使用环境的工作;
& init启动后,就代表内核已顺利启动,系统启动进入初始化系统环境阶段。
四.启动INIT服务
& 启动init服务时,init服务会读取/etc/inittab文件,根据/etc/inittab文件中的设置数据进行初始化系统环境的工作。/etc/inittab文件定义init服务在RHEL启动过程中必须依序执行以下几个Script:
/etc/rc.d/rc.sysinit
/etc/rc.d/rc
/etc/rc.d/rc.local
1./etc/rc.d/rc.sysinit
& /etc/rc.d/rc.sysinit 主要的功能是设置系统的基本环境,当init服务执行rc.sysinit时,会执行以下几项工作:
1)启动Udev 与SELinux
2)设置内核参数
3)设置系统时间
4)加载键盘对应表
5)启用置换内存空间
6)设置主机名
7)检查并挂载所有文件系统
8)初始化硬件设备
9)启用软件磁盘阵列与LVM
10)如有必要,卸载/initrd/
11)初始化串行端口设备
12)清除过期的锁定文件与IPC文件
13)重新设置磁盘参数
2./etc/rc.d/rc
& /etc/rc.d/rc 用来建立Runlevel的环境,在不同的运行级别中调用相应级别的环境参数。
3./etc/rc.d/rc.local
& 整个系统启动过程中rc.local 是唯一一个可以修改的RC Script,如果你希望在RHEL启动过程中执行某些命令,或者执行某些工作的话,那么你可以将相关命令在这个文件中定义,当RHEL开机并执行到rc.local 时,就可以依照你所定义的内容,完成系统的初始化。
4.建立用户接口
& 在执行完3个主要的RC Script 后,init服务的最后一个工作就是建立RHEL的用户界面。
此时init会执行以下两项工作:
建立虚拟控制台
默认在系统中建立6个虚拟控制台,在TTY1-TTY6中执行/bin/login登录程序;
建立图形使用接口的登录程序
若默认进入级别5,则启动X Window System图形化使用接口的登录程序。
& 至此,RHEL结束整个系统启动过程,进入系统。
五.其它相关
1.Runlevel
& 通常Run level 由以下几种:
Runlevel 0 关机
Runlevel 1 单用户模式仅root用户可登
Runlevel 2 多人模式无网络
Runlevel 3 命令行模式
Runlevel 4 保留
Runlevel 5 图形模式
Runlevel 6 重新启动
& 查看目前的Runlevel
【root@linux ~】# runlevel
N 5
-----前面的数字代表之前运行的级别,这里为N说明开机默认级别为5,后面的数字为当前系统的运行级别。
& 切换至不同的Runlevel,直接在init后空格输入要运行的启动级别数字即可,如:【root@linux ~】# init 3
----表示将系统切换至运行级别3,即命令行运行模式
2.管理init服务
& 在RHEL系统启动过程中,init服务是系统第一个执行的程序,它主要负责以下几项任务: 建立系统使用环境;
确保系统正常运行;
监控串行端口的周边设备;
拦截并处理【Ctrl + Alt + Del】事件;
PID(进程标识符)永远为1;
所有程序都可视为其子进程,因此无法被系统管理者中止。