当前位置:文档之家› linux启动顺序讲解

linux启动顺序讲解

一、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备);2、检测完后会进入MBR也就是boot loader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序;init这个程序会根据Run level来执行以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界面管理程序二、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电自检POST (Power on self test);2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要工作1、Boot Loader可以安装在两个地方:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占用就可以将Boot Loader 安装在硬盘中的其中一个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里,(2)Boot Loader第一阶段的程序码是从boot 分区来载入的,就是说Boot Loader 第二阶段程序码存放在/boot 这个分区中;3、下面来看三个Boot Loader 的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;四、介绍GRUB和grub.conf 这个配置文件的内容其实从MBR载入Boot Loader开始,载入Kernel,载入init这些程序之间都是由GRUB这个多重开机管理程序所负责的。

1、GRUB (GR and U nified B ootloader)拥有以下特性:· GRUB的开机管理程序可以在开机提示字元的界面下输入指令;例如在GRUB界面下可以按C键就会来到以grub> 开头的提示符来输入据指令;· GRUB的开机管理程序可以支持以下几种文件系统:ext2/ext3、ReiserFS、JFS、FAT、minix、FFS 等等;·支持MD5的密码来保护GRUB的配置文件;2、/boot/grub/grub.conf这个配置文件是GRUB 的配置文件,在做修改前推荐先做好备份下面来介绍这个配置文件的内容以及里面的语法:·以#开头的行为注解执行时不会使用;·可以以title开头的一行为准,分为上下两部分:(1)基本设定:(2)用于区分多个系统的设定,如果这台主机中还安装了其它系统并设定了多重启动,在这里还可以看到其它系统的设定;4、另外,如果硬盘上的MBR被清除掉了,可使用下面的指令来重新安装boot loader 到MBR中:/sbin/grub-install /dev/hda5、介绍进入GRUB的开机管理程式可以做哪些动作(开机前改Kernel的参数)(1)开机后在进入GRUB界面后,先选择要使用的系统(这里选择Linux)(2)按下a键,可以在开机修改Kernel的参数,也就是可以传一个参数给Kernel;这时可以看到下面这个界面(3)上图中root=LABEL=/ 这部分不可以动,将后面的都去掉后,先输入一个空格再输入一个1,如下图:这个1 就是附加的一个参数,表示要进入单用户模式,不需要输入root密码就可以以root身份登录;(4)当进入到#提示字元时,就可以设定root 密码了。

这时会发现一个问题任何人到主机前都可以通过这种方式修改ROOT密码是很不安全的。

6、为GRUB进入单用户模式设定密码及加密方法:在GRUB的设定档中设定密码,以防止非法者以单用户模式进入。

(1)编辑grub.conf配置文件,在基本设定的部分里,插入一行password 123456来设定密码,这里是将密码设定为123456 。

(2)当重新开机后,在GRUB的菜单中,需要输入P ,再输入密码才可以进行下一步,选择其它的模式。

(3)可以发现上面设定的密码是明文的,在GRUB中是可以对这个密码进行加密的,如下图:注:grub-md5-crypt这个指令在设定一个加密的密码的时候,就算每次输入的密码相同经加密后也是不同的,所以上面的几组密码都不一样,grub-md5-crypt >> /boot/grub/grub.conf 这行指令在执行后不会你上面那样会提示出输入两次密码,虽然没有提示但还是可以输入的,每输入一次密码按一次回车,等设定好密码后,再打开grub.conf文件时,就会发现经过加密的密码就追加到了grub.conf 文件中去了,将追加文件中的前二行去掉,第三行就是要使用的密码了,然后就像上图中那样进行设定,等上面的设定好后,一定要删除掉最后三行的内容,不然会出错的。

password –-md5 这里面的md5 表示后面使用的密码是经过md5加密的。

7、在进入系统前,按E键进入命令编辑模式,来修改引导配置文件在GRUB菜单选择时,按"e"键,就可以看到所对应系统的三行grub.conf中的配置参数,选择有错误的一行,再按"e"键,可修改这一行:如下图:选择了第二行,按E键,就可以修改这行内容了,这里只是未了举例子,将正常启动的一行改为了要使用单用户模式启动,修改完成后按回车,返回上一界面,再按"b"键,使用编辑后的设定开机。

五、介绍Kernel初始化时所做的工作Kernel在开机时,有以下四项工作:1、检测电脑上的硬件设备;2、将检测到的硬件驱动程序载入Kernel;3、如果必要的驱动载入后Kernel 将根目录以只读方式挂载进来;4、Kernel载入第一个程序init 这个程序;六、介绍init 这个程序在初始化时做了哪些工作init 程序读取的是/etc/inittab 这个配置文件来决定要做哪些操作1、决定预设要使用哪个Run Level 下面介绍几个常用的(Run Level 将在下节做详细介绍)Run Level 可以从0 到6 分为7种· run level 1 :单用户模式,主要用来维护系统,这在前面已经使用过了;· run level 3 :会启用完整的服务但登录后进入文字模式;· run level 5 :启用完整的服务登录后进入图形界面模式;注:在inittab 的配置文件里id:5:initdefault: 这项initdefault 的前面设定为5 表示预设会用run level 5,也就是默认启用完整服务并进入图形界面模式。

2、init 会执行初始作业系统的程序3、init会根据执行的run level 来执行run level 对应目录里面的程序,如果inittab 配置文件里预设的run level 是5,那么就会把5的参数传给/etc/rc.d/rc 这个程序执行,在/etc/rc.d目录下就可以看到rc0.d 至rc6.d 七个目录run level 所对应的目录,所以init 程序会根据执行的run level 来执行run level 对应目录里面的程序,来决定要启用哪些服务。

4、设某个组合键,如下图:定义快捷键,按这三个组合键3秒后重启系统6、在定义UPS不断电系统,当电源发生问题时,以及电源恢复时都要执行哪些程序。

6、产生六个virtual consoles (虚拟控制台)(tty1~tty6)7、如果启动的是run level 5 ,初始化工作就会启动X11(图形界面)七、iniit初始化流程图以下小节将依据上面的流程图为准逐一介绍八、介绍Run Level (init初始化流程第一步)其中在Run Level 里除了0~6这七种外,还有S 和emergency 这两种· 1 :执行init程序后,会接着执行/etc/rc.sysinit程序来初始化系统,再执行/etc/rc1.d/目录下的所有程序;· S:执行init程序后,只会执行/etc/rc.sysinit 程序来初始化系统;· emergency:执行init程序后,只会执行/etc/rc.sysinit 程序中某些必要的程序,并不会全部执行;1、介绍一些Run level 的特性Run level 是使用init 这个指令来定义要使用哪个run level。

2、下面有三种方式可以选择要使用哪个Run level(1)在开机时,预设run level会设定在/etc/inittab 这个文件中,例如:initdefault 前面的值;(2)可以从boot loader 传一个参数给kernel (例如:在GRUB的引导菜单按“a”键,在开机前可以给kernel传一个参数以单用户模式登录系统)(3)在开机进入Linux 系统后,可以使用init 指令,再输入要进入哪个run level ;(例如:init 5 进入run level 5)3、使用runlevel 指令执行后,就可以在下面显示当前在哪个级别下;/sbin/runlevel九、介绍/etc/rc.d/rc.sysinit 这个程序主要做哪些工作(init初始化流程第二步)rc.sysinit 这个文件是一个脚本文件,主要是一些判断程序,还有一些设定变数的程式;rc.sysinit 这个文件的工作如下:1、启动udev ,也就是启用热插拔的设备,例如:USB,并且也会启动SELinux;2、会把kernel的参数设定在/etc/sysctl.conf配置文件里;这个配置文件下下单元详细说明;3、设定系统时间;4、载入keymaps 设定,keymap设定是在定义键盘,这样电脑开机时才能找到相对应的键盘设定;5、启用swap这个虚拟内存的分区;6、设定主机名称,主机名称设定在/etc/sysconfig/network 配置文件中的HOSTNAME= 项下;7、检查根目录有没有问题,并且重新挂载成为可读可写的状态;8、启用RAID磁盘阵列,以及LVM的设备;9、启用磁盘配额的功能,就是限制使用者最多可以使用多少硬盘空间;10、检查其它的文件系统,并且把它们挂载进来;11、最后会清除被修改过的locks及PID files,其实就是清除一些开机时的缓存文件,以及一些没有用的信息及文件;十、介绍/etc/rc.d/rc 这个程式的作用1、这个步骤就是根据载入的Run Level 来执行Run Level 对应目当里面的程序来决定要启用哪些服务,例如,如果Run level 的值是5,就会去执行/etc/rc.d/rc5.d/* 这个目录下的所有程序,来停用或启动这个运行级别下应该有的服务,如下图:就用rc5.d这个目录来作说明,可以看到这个目录下都是一些链接文件,所有的链接文件都链接到了../init.d/*这个目录下的某个执行文件,其实init.d和rc5.d后面的d是代表Daemon(【unix】新进程;端口监督[控]程序)的意思。

相关主题