引导和关机
时间:2006-11-21 来源:cnscn2008
.引导(bootstrapping)是启动计算机(starting up a computer)的专业说法
.操作系统所提供的正常功能在启动过程中还不能使用,因此,计算机必须“通过引导程序让自己启动起来”。
.在引导过程中,内核被加载到内存中并开始执行。各种初始化任务得以执行,然后用户就能够使用系统了。
.当打开计算机时,计算机执行存储在ROM中的引导代码,这些代码反过来试图确定如何加载并启动内核。
.内核检测系统的硬件,然后产生系统的init进程。这个进程总是PID1,即进程号PID为1
.在出现登陆提示符以前,系统必须检查并安装文件系统,而且系统的守护进程必须启动起来,这些步骤是由init进程按顺序运行的一系列shell脚本来管理的。启动脚本由于它们的命名方式而常被称作"rc文件", rc代表runcom或run command, 这是大约出现于1965年的CTSS操作系统的历史遗迹。 启动脚本的确切布局以及它们的执行方式随操作系统的不同而异
.自动引导和手工引导
Linux系统可以以自动和手工两种方式进行引导
自动引导方式下,系统自己执行全部引导过程,而不需要任何外部的帮助
手工引导方式下,系统先自动执行一些过程,然后到某一时刻后,在运行大多数初始化脚本以前,把控制权交给操作员,这时候,计算机处于“单机用户模式”, 大多数系统进行还没有运行,其他用户还不能登陆系统
在日常运行中,几乎总是使用自动引导。对于用户来说,在现代机器上典型的引导过程就是打开计算机的电源并等待(再等待)系统准备就绪。尽管如此,懂得自动引导过程并知道怎么执行手工引导还是很重要的。当出现某些故障而打断了自动引导过程时,例如,出现损坏的文件系统或者出现没有正确配置的网络接口时,通常不得不采用手工引导
.引导过程的步骤
典型的引导过程由下面6个不同的阶段组成:
加载并初始化内核
检测和配置设备
创建自发的系统进程
操作员干预(仅用于手工引导)
执行系统启动脚本
多用户操作
1)内核初始化
Linux内核本身就是一个程序,第一个引导任务就是把这个程序载入内存,以便能够执行它。
内核的路径名通常是/vmlinuz或者/boot/vmlinuz
Linux系统实现了一个两阶段加载过程。
在第一个阶段,系统ROM从磁盘加载一个小的引导程序到内存中,然后,这个程序安排内核的载入。这个过程发生在Linux领域之外,所以各个系统之间并没有标准的过程。
内核执行内存检测来确定有多少RAM可用。内核的一些内部数据结构是被静态分配其内存大小的,因此当内核启动时,它就为自己划分出一块固定数量的实际内存空间。这块空间保留给内核使用,而不能够为用户级进程使用。内核在控制台上打印一条消息,报告物理内存的问题以及用户进程可用的内存量。
2)硬件配置
内核的第一项任务是检查机器的环境以确定机器有什么硬件。当你为自己的系统构建内核时要告诉内核,它应期望找到哪些硬件设备
当内核开始执行时,它试图找到并初始化已经告诉它的每一个设备。大多数内核为它们所找到的每个设备打印出一行专门信息。
3)系统进程
一旦完成了基本的初始化任务,内核就在用户空间创建几个“自发”的进程。它们之所以被称作是自发进程,是因为这些进程通常不是由系统的fork机制所创建的。
自发进程的数量和特性随系统的不同而不同。在Linux上,看不到有PID为0的进程。和进程init一起的是几个内存和内核处理进程,一般包括kflushd、kupdate、kpiod和kswapd. 在所有这些进程中,只有init是真正完整的用户进程。 其他进程实际上都是内核的一部分,为了调度或结构上的原因而进行了装扮,使它们看上去像是进程罢了。
一旦创建完毕自发进程,内核在引导阶段的任务就完成了。不过,处理基本操作(比如接受登陆)的进程还一个都没创建呢,而且大多数Linux守护进程也都没有启动。这些任务都是由init来负责的
4)操作员干预(仅限手工引导)
如果系统以单用户模式进行引导,那么在init启动时,内核所给出的命令行标志会通知init实际要引导的是单用户模式。
进程init最后会把控制权交给sulogin,后者是login的一个"中立而热心"的特殊版本,它提示用户输入root口令。如果输入口令正确,系统将生成一个root shell。 用户可以按下<Ctrl+D>而不是输入口令来绕过单用户模式而继续进入到多用户模式。
在单用户shell中执行命令的方式和登陆到已完引导的系统上执行命令的方式类似。不过在SuSE和Debian系统上,这时通常只安装了root分区;为了使用不在/bin /sbin 或 /etc下的程序,用户必须手工安装其它文件系统。在单用户模式下守护进程通常并不运行,因此依赖于服务器进程的那些命令将不能正常地工作。
在正常情况下,会在自动引导的过程中运行fsck命令,以检查并修复文件系统。当您以单用户模式启动系统时,可能要手工运行fsck.
当退出单用户shell时系统将试图继续引导以进行多用户模式。
5)执行启动脚本
到了系统准备运行其启动脚本的时候,我们就能看出它是Linux系统了。启动脚本是普通的shell脚本,它们由init根据一定的算法来选择并运行,尽管算法有时候有些复杂,但还是相当容易理解的。
6)多用户操作
在初始化脚本运行过以后,系统就是完全可操作的了,不过现在用户还不能登陆进来。为了在某个特定终端(包括控制台)上接受用户登陆,必须有一个getty进程监听终端或者控制台。init直接生成这些getty进程,完成引导过程。init还负责生成图形登陆系统,如xdm或gdm
...................................................................
PC引导过程
一旦机器确定从什么设备来启动,那么它将试图加载磁盘的头512个字节的信息。 这512字节的段叫做MBR(Master Boot Record, 主引导记录)MBR包含一个程序,该程序告诉计算机从磁盘的哪个分区加载第二个引导程序(引导加载程序,boot loader). 默认的MBR是一个简单的程序,它告诉计算机从磁盘上的第一个分区获取引导加载程序。Linux提供了更加复杂的MBR,它知道怎样去处理多操作系统和多内核。 一旦MBR已经选定从什么分区进行引导,它就试图加载针对那个分区的引导加载程序。之后,引导加载程序负责加载内核。
....................................................................
GRUB (Grand Unified Boot Loader) 全面统一的引导加载程序
用户通过运行grub-install把GRUB安装到引导驱动器上。这条命令的参数是要引导的设备名。遗憾的是,GRUB自己有一套给物理磁盘设备命名的方法,和标准的Linux约定不一样。 GRUB设备名看上去类似:
(hd0,0)
hd0表示物理驱动器号(从0开始)
,0 表示分区号(也是从0开始)
合起来等同于Linux设备/dev/hda1
如果用户想要在主(primary)设备上安装GRUB, 那么应使用命令:
grub-install '(hd0,0)'
默认情况下,GRUB从/boot/grub/grub.conf读取它的默认引导配置
GRUB示例:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=3
splashimage=(hd0,0) /grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.17-1.2187_FC5smp)
root (hd0,0)
kernel /vmlinuz-2.6.17-1.2187_FC5smp ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.17-1.2187_FC5smp.img
title Fedora Core (2.6.17-1.2157_FC5smp)
root (hd0,0)
kernel /vmlinuz-2.6.17-1.2157_FC5smp ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.17-1.2157_FC5smp.img
解释:
1. default=0 如果系统在timeout=3秒时间内没有接收到来自键盘的任何输入,则自动引导
2. splashimage=(hd0,0) /grub/splash.xpm.gz
表示/boot/grub/splash.xpm.gz 即通常所说的启动画面,下面列出图像文件
#gzip -lf /boot/grub/splash.xpm.gz
/boot/grub/splash.xpm
.....................................................................
多重引导的技巧
NT/2000引导加载程序非常非常想要被安装在MBR中,并成为系统的唯一真正的引导加载程序。
为了让NT/2000的引导加载程序能引导Linux的分区,请安装Linux, 然后用软盘或CD-ROM来引导它。用户需要提取Linux分区的头512个字节(这是分区引导记录), 并把它们写入到一个文件中。可以用dd命令来完成。
#dd if=/dev/hda2 of=linux.bin bs=512 count=1
然后把这个文件复制到NT/2000的分区, 并在NT的引导加载程序配置中增加一条目,告诉它怎样使用这个文件引导系统。即在c:\boot.ini中加一行, 这一行包含了这个文件路径, 还有一个标签(mtools 软件的命令对于Linux和Windows环境之间移动文件来说很方便)。 对于Linux来说, 这一行看起来像下面这样子:
c:\linux.bin="Linux"
.操作系统所提供的正常功能在启动过程中还不能使用,因此,计算机必须“通过引导程序让自己启动起来”。
.在引导过程中,内核被加载到内存中并开始执行。各种初始化任务得以执行,然后用户就能够使用系统了。
.当打开计算机时,计算机执行存储在ROM中的引导代码,这些代码反过来试图确定如何加载并启动内核。
.内核检测系统的硬件,然后产生系统的init进程。这个进程总是PID1,即进程号PID为1
.在出现登陆提示符以前,系统必须检查并安装文件系统,而且系统的守护进程必须启动起来,这些步骤是由init进程按顺序运行的一系列shell脚本来管理的。启动脚本由于它们的命名方式而常被称作"rc文件", rc代表runcom或run command, 这是大约出现于1965年的CTSS操作系统的历史遗迹。 启动脚本的确切布局以及它们的执行方式随操作系统的不同而异
.自动引导和手工引导
Linux系统可以以自动和手工两种方式进行引导
自动引导方式下,系统自己执行全部引导过程,而不需要任何外部的帮助
手工引导方式下,系统先自动执行一些过程,然后到某一时刻后,在运行大多数初始化脚本以前,把控制权交给操作员,这时候,计算机处于“单机用户模式”, 大多数系统进行还没有运行,其他用户还不能登陆系统
在日常运行中,几乎总是使用自动引导。对于用户来说,在现代机器上典型的引导过程就是打开计算机的电源并等待(再等待)系统准备就绪。尽管如此,懂得自动引导过程并知道怎么执行手工引导还是很重要的。当出现某些故障而打断了自动引导过程时,例如,出现损坏的文件系统或者出现没有正确配置的网络接口时,通常不得不采用手工引导
.引导过程的步骤
典型的引导过程由下面6个不同的阶段组成:
加载并初始化内核
检测和配置设备
创建自发的系统进程
操作员干预(仅用于手工引导)
执行系统启动脚本
多用户操作
1)内核初始化
Linux内核本身就是一个程序,第一个引导任务就是把这个程序载入内存,以便能够执行它。
内核的路径名通常是/vmlinuz或者/boot/vmlinuz
Linux系统实现了一个两阶段加载过程。
在第一个阶段,系统ROM从磁盘加载一个小的引导程序到内存中,然后,这个程序安排内核的载入。这个过程发生在Linux领域之外,所以各个系统之间并没有标准的过程。
内核执行内存检测来确定有多少RAM可用。内核的一些内部数据结构是被静态分配其内存大小的,因此当内核启动时,它就为自己划分出一块固定数量的实际内存空间。这块空间保留给内核使用,而不能够为用户级进程使用。内核在控制台上打印一条消息,报告物理内存的问题以及用户进程可用的内存量。
2)硬件配置
内核的第一项任务是检查机器的环境以确定机器有什么硬件。当你为自己的系统构建内核时要告诉内核,它应期望找到哪些硬件设备
当内核开始执行时,它试图找到并初始化已经告诉它的每一个设备。大多数内核为它们所找到的每个设备打印出一行专门信息。
3)系统进程
一旦完成了基本的初始化任务,内核就在用户空间创建几个“自发”的进程。它们之所以被称作是自发进程,是因为这些进程通常不是由系统的fork机制所创建的。
自发进程的数量和特性随系统的不同而不同。在Linux上,看不到有PID为0的进程。和进程init一起的是几个内存和内核处理进程,一般包括kflushd、kupdate、kpiod和kswapd. 在所有这些进程中,只有init是真正完整的用户进程。 其他进程实际上都是内核的一部分,为了调度或结构上的原因而进行了装扮,使它们看上去像是进程罢了。
一旦创建完毕自发进程,内核在引导阶段的任务就完成了。不过,处理基本操作(比如接受登陆)的进程还一个都没创建呢,而且大多数Linux守护进程也都没有启动。这些任务都是由init来负责的
4)操作员干预(仅限手工引导)
如果系统以单用户模式进行引导,那么在init启动时,内核所给出的命令行标志会通知init实际要引导的是单用户模式。
进程init最后会把控制权交给sulogin,后者是login的一个"中立而热心"的特殊版本,它提示用户输入root口令。如果输入口令正确,系统将生成一个root shell。 用户可以按下<Ctrl+D>而不是输入口令来绕过单用户模式而继续进入到多用户模式。
在单用户shell中执行命令的方式和登陆到已完引导的系统上执行命令的方式类似。不过在SuSE和Debian系统上,这时通常只安装了root分区;为了使用不在/bin /sbin 或 /etc下的程序,用户必须手工安装其它文件系统。在单用户模式下守护进程通常并不运行,因此依赖于服务器进程的那些命令将不能正常地工作。
在正常情况下,会在自动引导的过程中运行fsck命令,以检查并修复文件系统。当您以单用户模式启动系统时,可能要手工运行fsck.
当退出单用户shell时系统将试图继续引导以进行多用户模式。
5)执行启动脚本
到了系统准备运行其启动脚本的时候,我们就能看出它是Linux系统了。启动脚本是普通的shell脚本,它们由init根据一定的算法来选择并运行,尽管算法有时候有些复杂,但还是相当容易理解的。
6)多用户操作
在初始化脚本运行过以后,系统就是完全可操作的了,不过现在用户还不能登陆进来。为了在某个特定终端(包括控制台)上接受用户登陆,必须有一个getty进程监听终端或者控制台。init直接生成这些getty进程,完成引导过程。init还负责生成图形登陆系统,如xdm或gdm
...................................................................
PC引导过程
一旦机器确定从什么设备来启动,那么它将试图加载磁盘的头512个字节的信息。 这512字节的段叫做MBR(Master Boot Record, 主引导记录)MBR包含一个程序,该程序告诉计算机从磁盘的哪个分区加载第二个引导程序(引导加载程序,boot loader). 默认的MBR是一个简单的程序,它告诉计算机从磁盘上的第一个分区获取引导加载程序。Linux提供了更加复杂的MBR,它知道怎样去处理多操作系统和多内核。 一旦MBR已经选定从什么分区进行引导,它就试图加载针对那个分区的引导加载程序。之后,引导加载程序负责加载内核。
....................................................................
GRUB (Grand Unified Boot Loader) 全面统一的引导加载程序
用户通过运行grub-install把GRUB安装到引导驱动器上。这条命令的参数是要引导的设备名。遗憾的是,GRUB自己有一套给物理磁盘设备命名的方法,和标准的Linux约定不一样。 GRUB设备名看上去类似:
(hd0,0)
hd0表示物理驱动器号(从0开始)
,0 表示分区号(也是从0开始)
合起来等同于Linux设备/dev/hda1
如果用户想要在主(primary)设备上安装GRUB, 那么应使用命令:
grub-install '(hd0,0)'
默认情况下,GRUB从/boot/grub/grub.conf读取它的默认引导配置
GRUB示例:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=3
splashimage=(hd0,0) /grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.17-1.2187_FC5smp)
root (hd0,0)
kernel /vmlinuz-2.6.17-1.2187_FC5smp ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.17-1.2187_FC5smp.img
title Fedora Core (2.6.17-1.2157_FC5smp)
root (hd0,0)
kernel /vmlinuz-2.6.17-1.2157_FC5smp ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.17-1.2157_FC5smp.img
解释:
1. default=0 如果系统在timeout=3秒时间内没有接收到来自键盘的任何输入,则自动引导
2. splashimage=(hd0,0) /grub/splash.xpm.gz
表示/boot/grub/splash.xpm.gz 即通常所说的启动画面,下面列出图像文件
#gzip -lf /boot/grub/splash.xpm.gz
/boot/grub/splash.xpm
.....................................................................
多重引导的技巧
NT/2000引导加载程序非常非常想要被安装在MBR中,并成为系统的唯一真正的引导加载程序。
为了让NT/2000的引导加载程序能引导Linux的分区,请安装Linux, 然后用软盘或CD-ROM来引导它。用户需要提取Linux分区的头512个字节(这是分区引导记录), 并把它们写入到一个文件中。可以用dd命令来完成。
#dd if=/dev/hda2 of=linux.bin bs=512 count=1
然后把这个文件复制到NT/2000的分区, 并在NT的引导加载程序配置中增加一条目,告诉它怎样使用这个文件引导系统。即在c:\boot.ini中加一行, 这一行包含了这个文件路径, 还有一个标签(mtools 软件的命令对于Linux和Windows环境之间移动文件来说很方便)。 对于Linux来说, 这一行看起来像下面这样子:
c:\linux.bin="Linux"
相关阅读 更多 +