资料出处:http://linvar.iteye.com/blog/625769
引导和关机
1.引导(bootstrapping)PC
(1).存储在ROM中的初始化引导代码BIOS
它知道主板上一些设备的信息,可以让用户选择从什么设备进行引导. 机器尝试加载磁盘开头512个字节的信息,这512个字节段叫做MBR(Master Boot Record). MBR包含一个程序,该程序告诉计算机从磁盘的哪个分区加载第二个引导程序(boot loader)
默认的MBR是一个简单的程序,它告诉计算机从磁盘的第一个分区获取引导加载程序.
linux提供了一种更为复杂的MBR,它知道怎样去处理多操作系统和多内核.
(2).引导加载程序
在linux的世界中有两种流行的引导加载程序(boot loader):LILO和GRUB
用户通过运行grub-install将GRUB安装到引导驱动器上
# grub-install '(hd0,0)'
引导配置文件/boot/grub/grub.conf
在进入到GRUB的启动界面键入c可以进入命令行模式.
GRUB引导单用户模式:在GRUB启动界面键入a,在原有的内核选项之后加上single即可
# mount -o rw,remount /
(3).引导加载程序(grub)加载并初始化内核(/boot/vmlinuz)
内核执行内存检测确定有多少RAM可用,保留一部分内存供内核使用.
(4).配置硬件
为系统构造内核时,要告诉内核它会找到哪些硬件设备,内核试图找到并初始化每一个设备,但这提供的设备信息经常不够明确.内核通过探测设备总线和向适当的驱动程序寻求信息来尝试确定它所需要的其他信息.
(5).内核线程
一旦完成了基本的初始化任务,内核就在用户空间创建几个"自发"的进程,因为他们不是通过系统正规的fork机制所创建的.这些进程在ps输出中它们的名字会被中括号括起来(如[kswapd]).
在所有这些进程中,只有init是真正完整的用户进程,其他进程实际上都是内核的组成部分,为了调度或者结构上的原因而进行了装扮,使它们看上去像是进程罢了.
一旦创建完毕自发进程,内核在引导阶段的任务就完成了,但是,处理基本操作(比如接受登录)的进程还一个都没有创建.而且大多数linux守护进程也都没有启动,这些任务都是由init负责的(有些情况是间接的)
(6).启动脚本
经常在启动脚本中执行的一些任务:
a.设置计算机名, b.设置时区, c.采用fsck检查磁盘, d.安装文件系统
e.从/tmp目录删除旧文件, f.配置网络接口, g.启动守护进程和网络服务
传统的init定义了7个"运行级(run level)":
a. 0级是完全关闭系统的级别
b. 1级或S级代表单用户模式
c. 2-5级是多用户级别
d. 6级是"重新引导(reboot)"的级别
/etc/inittab文件告诉init在它的每一个运行级别上要做什么事.
在/etc/inittab中使用/etc/init.d/rc来"改变运行级"
基本上我们是不需要直接处理/etc/inittab的,可能需要改动的一个地方是默认启动级别
id:5:initdefault
启动脚本的主拷贝位于/etc/init.d这个目录下,可以直接运行脚本进行启动,关闭某个守护进程.这些脚本通常都能识别start,stop,restart这些参数
但是每个运行级要运行的脚本是放在类似rc0.d,rc1.d, rc3.d这样的目录下,通常这些目录下的文件是对/etc/init.d目录下脚本的链接
这些文件以S或K开头,分别表示运行和关闭,接着是表示运行次序的数字,最后是脚本名
比如S10network, S34named, S55sshd, 因为要先有网络,ssh才有意义吧
每个发行版放置启动脚本,脚本内容都很不相同,出现比较混乱的状况
Redhat,suse,debian系列系统中, init在每个运行级都要把新运行级作为参数来调用
/etc/init.d/rc脚本,针对软件的脚本都在/etc/init.d目录下.
在Redhat,suse中,启动脚本的配置文件则在/etc/sysconfig目录下,而且提供chkconfig命令来管理服务.
但是debian启动脚本的配置文件就比较凌乱了,在/etc /etc/network, /etc/default
都可能存在.而且还有个神秘的启动脚本管理程序/usr/sbin/update-rc.d
$sudo /usr/sbin/update-rc.d sshd start 0123 stop 456
但是man手册却不推荐使用
(7).多用户运行
在初始化脚本完成后,系统就是完全运行的系统了,不过现在用户还不能登录进来. 为了在某个特定终端(包括控制台)上接受用户登录,必须有一个getty进程监听终端或者控制台.
init直接生成这些getty进程,完成引导过程. init还负责生成图形登录系统,例如xdm
或gdm. 请记住,即使在引导完成以后,init还继续担当重要的角色.
2.关机
有许多相关命令shutdown,halt,reboot,poweroff
还可以使用telinit来改变init的运行级别
但是最安全,最好的方式是使用shutdown命令