系统的启动过程
1、加电----CMOS----post(上电自测试程序)----- grub(早期的时候使用的是lilo)
Grub的第一阶段主要起到一个引导MBR中的446B。第二阶段在硬盘上,主要是一个配置。
对于任何一种操作系统,任何一台机器,刚开始的时候,肯定是要进行加电的,加完电之后在主板上有一个叫CMOS的芯片,CMOS里面有一个程序,这个程序叫post上电自测试程序。它能够对硬件来完成一些自检,比如,在机器里面内存有多大,CPU是哪一种型号的,声卡、显卡,所以这个叫上电自测试。
[root@localhost ~]# vim /etc/inittab
1 #
2 # inittab This file describes how the INIT process should set up
3 # the system in a certain run-level.
4 #
5 # Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
6 # Modified for RHS Linux by Marc Ewing and Donnie Barnes
7 #
8
9 # Default runlevel. The runlevels used by RHS are:
10 # 0 - halt (Do NOT set initdefault to this)
11 # 1 - Single user mode
12 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
13 # 3 - Full multiuser mode
14 # 4 - unused
15 # 5 - X11
16 # 6 - reboot (Do NOT set initdefault to this)
17 #
18 id:3:initdefault: 进入3级别执行这个动作,init要进行工作的时候,默认情况下进入3级别
19
20 # System initialization.
21 si::sysinit:/etc/rc.d/rc.sysinit 进入任何级别执行sysinit这个动作,这个动作表示系统要进行初始化。要执行/etc/rc.d/rc.sysinit
22
23 l0:0:wait:/etc/rc.d/rc 0
24 l1:1:wait:/etc/rc.d/rc 1
25 l2:2:wait:/etc/rc.d/rc 2
26 l3:3:wait:/etc/rc.d/rc 3 默认是3级别,因此会执行这一行,把3作为参数传递给rc这个脚本。最后的结果会进入rc3.d这个目录。
27 l4:4:wait:/etc/rc.d/rc 4
28 l5:5:wait:/etc/rc.d/rc 5
29 l6:6:wait:/etc/rc.d/rc 6
30
31 # Trap CTRL-ALT-DELETE
32 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 无论在哪一种级别下用户都可以使用ctrl-alt-del来启动机器,这样很危险,所以在用的时候最好把它禁用掉。
33
34 # When our UPS tells us power has failed, assume we have a few minutes
35 # of power left. Schedule a shutdown for 2 minutes from now.
36 # This does, of course, assume you have powerd installed and your
37 # UPS connected and working correctly.
38 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" 交流电失败后,一般重要的服务器都是用一些后备电源的(UPS)。当服务器检测到交流电没了,后备电源已经通上了,然后开始向主机上登录的所有用户去发送指令:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down
39
40 # If power was restored before the shutdown kicked in, cancel it.
41 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 当电源恢复了,取消关机指令。
42
43
44 # Run gettys in standard runlevels
45 1:2345:respawn:/sbin/mingetty tty1
46 2:2345:respawn:/sbin/mingetty tty2
47 3:2345:respawn:/sbin/mingetty tty3
48 4:2345:respawn:/sbin/mingetty tty4
49 5:2345:respawn:/sbin/mingetty tty5
50 6:2345:respawn:/sbin/mingetty tty6
/sbin/mingetty 产生字符终端,在2345级别都是6个终端。Respawn表示再生的意思,只要终端一注销,还会产生一个终端。
51
52 # Run xdm in runlevel 5
53 x:5:respawn:/etc/X11/prefdm -nodaemon
53,1 Bot
开机脚本: /etc/rc.d/rc.local 希望自动执行的一些指令可以编辑在这个文件里。
启动时故障排除:
启动的时候,故障往往表现在grub的第一阶段和第二阶段。
第一阶段:就是在MBR的446B可能会出现问题,一旦出现问题后面的grub菜单根本看不到。
第二阶段:如果没有grub菜单的话,就无法选择操作系统,所以第二阶段往往是它的配置文件和说明文件。而第一阶段纯粹就是程序,所以这两个阶段是最容易出现问题的。
现在模拟第一阶段出现问题的情况:
将引导程序覆盖掉,重启一下(重启之前断开与光盘的连接)
重启:
硬盘进不了引导,进而用PXE进行网络引导。出现这种情况需要重建MBR,重建MBR
要先使用光盘引导进去:
出现了如上界面,这时不要回车,回车就成了安装了。这时候输入linux rescue 进入急救模式,利用引导光盘来进入急救模式。
如果说能够找到系统的话,将会把系统挂载到/mnt/sysimage目录下。上面提示系统已经被挂载到/mnt/sysimage/目录下,进去之后需要chroot /mnt/sysimage,把/mnt/sysimage这个目录作为根目录
使用grub指令重建MBR里面的446B。
指明引导系统:这里面支持Tab键
root(hd0,0)
之后再执行
setup(hd0):MBR是针对一块盘的,所以写hd0,表示第一块盘。
setup是grub里面的一个子程序,它可以用于帮助重建第一阶段和第二阶段。
执行好之后,输入quit退出,执行两次exit之后将会自动进行启动。
grub引导第二阶段主要生成了很多文件,这些文件在/boot/grub/目录下:
[root@Device-8C324C ~]# ll /boot/grub/
total 234
-rw-r--r-- 1 root root 63 Dec 21 05:06 device.map
-rw-r--r-- 1 root root 7584 Dec 21 05:06 e2fs_stage1_5
-rw-r--r-- 1 root root 7456 Dec 21 05:06 fat_stage1_5
-rw-r--r-- 1 root root 6720 Dec 21 05:06 ffs_stage1_5
-rw------- 1 root root 598 Dec 21 05:06 grub.conf
-rw-r--r-- 1 root root 6720 Dec 21 05:06 iso9660_stage1_5
-rw-r--r-- 1 root root 8192 Dec 21 05:06 jfs_stage1_5
lrwxrwxrwx 1 root root 11 Dec 21 05:06 menu.lst -> ./grub.conf
-rw-r--r-- 1 root root 6880 Dec 21 05:06 minix_stage1_5
-rw-r--r-- 1 root root 9248 Dec 21 05:06 reiserfs_stage1_5
-rw-r--r-- 1 root root 32428 Jan 5 2007 splash.xpm.gz
-rw-r--r-- 1 root root 512 Dec 21 05:06 stage1 第一阶段的描述信息 共512B
-rw-r--r-- 1 root root 104988 Dec 21 05:06 stage2 stage2的描述信息,stage2主要包含了列出来的这些文件。
-rw-r--r-- 1 root root 7072 Dec 21 05:06 ufs2_stage1_5
-rw-r--r-- 1 root root 6272 Dec 21 05:06 vstafs_stage1_5
-rw-r--r-- 1 root root 8904 Dec 21 05:06 xfs_stage1_5
所以第二阶段可以理解为在/boot/grub/目录下生成了很多文件。第一阶段主要是程序,第二阶段主要是一些配置和说明文件。配置文件中最重要的是/etc/grub.conf
模拟/boot/grub/grub.conf文件丢失的情况:
重启时,发现已经启动了grub,当看到这种信息的时候,说明第二阶段失效了,问题就是缺少了说明文件或者是配置文件,所以才造成无法启动。(出现这种情况的时候要使用命令启动第二阶段,使用help可以查看命令)
这就是靠指令将它启动起来,如果不是静默模式,屏幕上会出现一堆信息。
成功启动后,要手工建立这个第二阶段的配置文件,直接靠指令来启动的话会产生第二阶段的其他文件,但是这个配置文件是不会产生的。
重启:
使用指令来产生grub第二阶段的其他文件:
#grub-install -root-directory=/ /dev/sda
建grub第一阶段的步骤:
grub
root (hd0,0)
setup (hd0)
模拟(把/boot/grub/目录删了,意味着第二阶段里面的所有说明文件配置文件都没有了。实验前记得备份)
加载grub1.5,上面表示加载到grub1.5阶段的时候起不来,找不到第二阶段的文件。像这种情况,只能使用急救模式。用光盘引导的时候发现光盘引导不了,说明这个阶段是硬盘在引导。硬盘在引导,说明第一阶段没有问题。可以在虚拟机的CMOS里面设置硬盘引导。设置成光盘引导,接着进入急救模式
/boot/grub/目录下的文件生成成功,但是没有grub.conf这个文件。由于是光盘引导的,所以先把光盘去了再退出。这时就是以硬盘的方式来引导。
起来之后再为它创建一个grub.conf就可以了。接着再重启试一下。
grub是一个引导程序,分为两阶段。第一阶段就在主引导记录的446个字节里面,第二阶段就在grub目录下。一个完整的程序少了一段肯定是不行的。
所以说:一阶段实际上是靠grub里面的一个子命令叫setup来建立。二阶段要使用grub-install来建立。
除了遇到这种一类故障、二类故障之外,有时候还有一种比较常见的故障:
发现管理员口令丢了,只要物理上能接触到机器,这些密码都能够解决,所以安全来看的话,首要的应该是物理安全。解决方法是进入一级别更改口令或者直接删除口令。
还有一种故障是:只要在引导过程当中牵扯到的一些文件,在编译的过程中可能会出现一些故障。
比如/etc/fstab(文件系统表,这里面表明了每一个要挂载的分区,若误操作了,这个文件又是引导的时候要用的文件)
能走到这一步,说明grub一阶段和二阶段都是没有问题的。
提示输入root密码进入维护,或者按Control-D继续来启动,
进入维护模式 修改/etc/fstab 但是提示只读,所以这时候要将根重新挂载一次: