第8章linux引导流程了解linux系统引导流程了解开机配置文件的基本内容和作用掌握修改配置文件的方法8.1案例分析与解决8.1.1案例一遗忘root用户密码解决方案1.开机启动centos系统至图8-1时,迅速按下空格键。图8-12.进入grub菜单界面,如图8-2所示。菜单下方的模式说明:使用上下箭头键在启动菜单项间进行移动,键入[enter]启动所选的操作系统,键入[e]进入编辑模式,键入[a]进入修改内核参数模式,键入[c]进入命令行模式。教学目标案例介绍图8-23.在引导装载程序菜单上,选择centos(2.6.32-71.el6.i686)菜单项,键入[e]进入编辑模式。如图8-3所示。菜单下方的操作说明:使用上下箭头键在菜单项间进行移动,,键入[b]启动操作系统,键入[e]编辑所选项,键入[c]进入命令行,键入[o]在所选行之后添加新行,键入[d]删除所选行,键入[esc]返回上一个界面。图8-34.用箭头键选择第二项,然后按[e]。如图8-4所示,在文本结尾处空一格再添加1或single,按[Enter]键使修改生效,回到图8-3界面。图8-45.按[b]键,GRUB引导进入单用户Linux模式。该模式不用输入口令即可获得root权限。使用passwd命令修改root口令。如图8-5所示。如果不让修改口令,使用如下命令:[root@fhy/]#setenforce0图8-56.修改密码完成后,重新启动计算机。在提示符输入如下命令。[root@fhy/]#init68.1.2案例二inittab文件丢失的恢复办法1.备份并删除/etc/inittab文件,操作如图8-6所示。并重启计算机。图8-62.重启后以root身份登录。如图8-7所示。图8-73.挂载光盘,从光盘安装inittab文件,安装文件是Packages目录下的initscripts-9.03.17-1.el6.centos.i686.rpm文件,如图8-8所示。命令如下:[root@fhy~]#mount–tiso9660/dev/sr0/media[root@fhy~]#cd/media/Packages[root@fhyPackages]#rpm–ivh–replacepkgsinitscripts-9.03.17-1.el6.centos.i686.rpm图8-83.以图形界面方式启动,启动命令如下:#init54.重新启动后,打开/etc/inittab文件,命令如下:#vi/etc/inittab修改linux的默认启动级别为5级别,即将最后一行id:3:initdefault中的3改为5,如图8-9所示。图8-95.修改/etc/inittab文件后,保存文件。以后即可正常启动linux系统。8.1.3案例三设置grub口令1.在提示符下输入[grub]命令回车,进入grubshell界面,如图8-10所示。图8-102.在[grub]提示符下输入[md5crypt]命令回车,获取abc123的密文,并用鼠标复制得到的密文,然后输入[quit]命令退出grubshell界面,如图8-11所示。图8-113.使用命令#vi/boot/grub/grub.conf打开grub.conf文件,在title行之前增加下一行内容:password--md5$1$D.KFe0$mVM3r99rRVUWXKQIvDnb0.如图8-12所示。图8-124.保存对grub.conf文件的修改。重启电脑进入图8-13所示界面,当再想修改grub参数时,必须先输入p命令,并输入正确的grub口令,然后才能输入命令e进行编辑。图8-138.1.4案例四修改grub启动时的背景图片1.将一图片转化成640*480,14色的XPM文件,命令如下:#convertback.jpg-colors14-geometry640x480back.xpm2用gzip命令压缩back.xpm文件,命令如下:#gzip-9abc.xpm3将abc.xpm.gz拷到/boot/grub下,命令如下(假设back.xpm.gz在当前目录下)#cpback.xpm.gz/boot/grub/4打开/boot/grub/grub.conf文件,命令如下:#vi/boot/grub/grub.conf5.修改grub.conf文件中splashimage=(hd0,0)/boot/grub/splash.xpm.gz的值为splashimage=(hd0,0)/boot/grub/back.xpm.gz,如图8-14所示。图8-146.重启电脑,可以查看到修改后的grub背景。8.2linux系统引导流程正常情况下,Centoslinux系统的启动过程自动完成,启动过程显示启动时加载了哪些进程、服务及设备等的信息。通过了解启动的顺序,可以了解系统运行的状态,并且可以通过某些设置或修改某些文件来定制启动过程。下面通过10个步骤的详细说明来介绍linux的系统引导流程。1.开机自检,加载BIOS(BasicInput/OutputSystem)当启动电源时,计算机首先是加载BIOS信息,bios中包括了cpu的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、pnp特性等等。读取信息后,计算机就知道应该去读取哪个硬件设备了。在bios将系统的控制权交给硬盘的第一个扇区之后,就开始由linux来控制系统了。2读取MBR从硬盘引导会查找MBR,并且执行记录在MBR上的程序,这个程序通常就是系统操作的Loader。Loader的主要功能就是用来指示系统在启动之后要加载哪个系统,目前有许多种类的Loader,如果是Windows上的Loader则是NTLDRL,如果是Linux的Loader则是GRUB或LILO。MRB是英文MasterBootRecord的缩写,中文译为主引导记录。硬盘的0柱面0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为Pre-boot区(欲启动区),占446字节;第二部分是PartitionTable区(分区表),占66字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。如果要查看MBR的内容,用户需要以root用户的身份运行如下命令:#ddif=/dev/hadof=mbr.binbs=512count=1读入了1+0个块输出了1+0个块它从/dev/had(第一个IDE盘)上读取前512个字节的内容,并将其写入mbr.bin文件中。3.进入GRUB/LILO一般的引导装载程序包括GRUB(GrandUnifiedBootloader)和LILO(LinuxLoader)。进入GRUB/LILO程序后,系统会出现多重启动菜单,如果你的计算机已经安装了其他GRUB/LILO操作系统,则在此列表出现现有的操作系统选项,可以通过上下方向键选择要进入的系统。Grub是强大的启动引导程序,不仅可以对各种发行版本的linux进行引导,也能够正常引导计算机上的其他操作系统。由于grub的功能强大,已经取代了linux中过去使用的lilo引导程序,成为各linux发行版本默认的启动引导器。下面更详细地列举一下LILO和GRUB之间的不同之处:LILO没有交互式命令界面,而GRUB提供了真正的命令行交互界面。LILO不支持网络引导,而GRUB支持。LILO将可以引导操作系统的信息存储在MBR中,如果修改了LILO配置文件,必须将LILO第一阶段引导加载程序重写到MBR。而GRUB能够访问EXT2分区,只有当/boot分区的物理位置发生变化时才需要重新安装GRUB到MBR中。使用GRUB时,如果配置文件配置错误,则只是默认转到GRUB命令行界面。4.加载LinuxKernel在GRUB/LILO中选择的是Linux,系统就会开始加载Linux内核程序,此时可以说正式进入Linux的控制。内核被载入内存,开始运行,并已初始化所有的装备驱动程序和数据结构,用户可以通过文本提示信息查看硬件设备是否成功驱动。5.执行init内核被加载后,第一个运行的程序便是/sbin/init,在引导linux系统的过程中,“/sbin/init”是内核第一个加载的程序,所以,init始终是第一进程(其PID始终是1,它是所有进程的父进程)。利用init程序可以方便的制定启动装入哪个程序。6.运行/etc/rc.d/rc.sysinit/etc/rc.d/rc.sysinit是Linux系统启动时运行的第一脚本,负责产生系统运行时需要的环境变量和文件系统。在/etc/rc.d/rc.sysinit/脚本中的mount-a调用/etc/fstab脚本文件。而/etc/fstab脚本文件主要作用就是挂接所有的文件系统。用户登录系统后可以通过修改/etc/fstab文件修改启动时自动挂载的文件系统。通过输入如下命令可以修改/etc/fstab文件内容。如图8-14所示。#vi/etc/fstab图8-157.执行/etc/inittab/sbin/init程序会根据读取/etc/inittab脚本文件内容来选取一个默认的运行级别(Runlevel),以决定执行哪些服务程序。一般最常使用的Runlevel为3或5,可以修改/etc/inittab文件内容来重新制定启动时的执行模式,参见8.3节详解。8.执行默认级别中的所有Script在/etc/inittab文件里指定的级别是init程序寻找的主要文件,最先运行的服务是放在/etc/rc.d目录下的文件。在大多数的Linux发行版本中,启动脚本都是位于/etc/rc.d/init.d中的。这些脚本被用ln命令连接到/etc/rc.d/rcn.d目录(这里的n就是运行级0—6),这里所有的Script都是以S和K开头的连接文件。S表示Startup,也就是在系统启动时要执行的Script,其执行的顺序是根据S后面的数字来决定的,数字越小则越早执行。这些Script有些是有着互相依赖的关系及启动顺序,如果用户随意更改数字而改变启动顺序可能造成系统无法启动;K表示Kill,也就是在退出Runlevel时执行的Script,它也是以数字为执行优先次序的。9.执行/etc/rc.d/rc.localRc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。可以把自己想设置和启动的东西放在这里。10.执行/bin/login程序,进入登陆状态。Login程序会提示用户输入账号及口令,进行编码并确认口令的正确性,如果二者互相符合,则开始为用户进行环境初始化,然后将控制权教给Shell。如果默认的Shell是bash,则bash会先查询/etc/profile文件,并执行其中的命令,然后查询用户目录中是否有,bash-profile,bash-login或.profile文件并执行其中一个,其中出现命令提示符等待输入命令。在以上步骤都正确无误执行后,系统会按照指定的Runlevel来打开X窗口或字符命令的登陆界面。8.3启动配置文件详解8.3.1grub启动配置文件使用vi编辑器打开grub启动配置文件,文件位于/boot/grub/grub.conf。如果以根用户身份登录系统,可以修改该文件来更改系统启动项目,具体含义参照代码后面的解释。代码前有“#”符号的为注释行。#grub.confgeneratedbyanaconda##Notethatyoudonothavetorerungrubaftermakingchangestothisfile#NOTICE:Youhavea/bootpartition.Thismeansthat#allkernelandinitrdpathsarerelativeto/boot/,eg.#root(hd0,0)#kernel/vmlinuz-versionroroot=/dev/sda3#initr