BOOT - Linux手册页

时间:2019-08-20 18:01:52  来源:igfitidea点击:

Linux程序员手册 第7部分
更新日期: 2015-03-11

名称

boot-基于UNIX System V Release 4的系统启动过程

说明

引导过程(或"引导顺序")在系统之间的细节上有所不同,但可以大致分为以下几个部分控制的阶段:

1.
硬件
2.
操作系统(OS)加载器
3.
核心
4.
根用户空间进程(init和inittab)
5.
启动脚本

下面将更详细地描述每个。

Hardware

上电或硬重置后,将控制权存储在只读存储器(通常为PROM)中;由于涉及个人计算机的历史原因,该程序通常称为" BIOS"。

该程序通常对机器执行基本的自检,并访问非易失性存储器以读取更多参数。 PC中的此内存是电池供电的CMOS内存,因此大多数人将其称为" CMOS"。在PC世界之外,通常称为" NVRAM"(非易失性RAM)。

NVRAM中存储的参数随系统的不同而不同,但至少应指定哪些设备可以提供OS加载程序,或者至少可以探测哪些设备。这样的设备称为"启动设备"。硬件引导阶段从引导设备上的固定位置加载OS加载程序,然后将控制权转移给它。

Note:
可以通过网络连接从中读取OS加载程序的设备,在这种情况下,引导的详细信息由诸如DHCP,TFTP,PXE,Etherboot等协议进一步指定。

OS loader

OS加载程序的主要工作是在某个设备上定位内核,然后加载并运行它。大多数OS加载程序都允许交互式使用,以便启用替代内核的规范(如果最后一个编译的内核无法运行,则可以作为备份),并将可选参数传递给内核。

在传统的PC中,OS加载程序位于启动设备的初始512字节块中。该块称为" MBR"(主启动记录)。

在大多数系统中,由于各种限制,OS加载程序非常受限制。即使在非PC系统上,此加载程序的大小和复杂性也存在一些限制,但是PC MBR的大小限制(512字节,包括分区表)使得几乎不可能挤入很多功能。

因此,大多数系统在主要OS加载程序和次要OS加载程序之间分配了加载OS的角色。此辅助OS加载程序可能位于持久性存储(例如磁盘分区)的较大部分内。

在Linux中,操作系统加载程序通常是lilo(8)或grub(8)。

Kernel

加载内核后,它将初始化计算机和操作系统的各种组件;负责该任务的软件的每个部分通常被视为适用组件的"驱动程序"。内核启动虚拟内存交换程序(这是一个内核进程,在现代Linux内核中称为" kswapd"),并在根路径/上挂载一些文件系统。

可能传递给内核的某些参数与这些活动有关(例如,可以覆盖默认的根文件系统);有关Linux内核参数的更多信息,请阅读bootparam(7)。

只有这样,内核才会创建初始用户态进程,该进程的编号为1(作为其PID(进程ID))。传统上,此过程执行程序/ sbin / init,将内核尚未处理的参数传递给该程序。

Root user-space process

Note:
以下描述适用于基于UNIX System V Release 4的OS。但是,许多广泛使用的系统采用了一种相关但基本不同的方法,称为systemd(1),其启动过程在其关联的bootup()中进行了详细说明。 7)。

/ sbin / init启动时,它将读取/ etc / inittab以获取更多说明。该文件定义了在指示/ sbin / init程序进入特定运行级别时应运行的内容,从而为管理员提供了一种易于使用的环境。每个运行级别都与一组服务关联(例如,运行级别S是单用户模式,而运行级别2则需要运行大多数网络服务)。

管理员可以通过init(1)更改当前运行级别,并通过runlevel(8)查询当前运行级别。

但是,由于通过编辑此文件来管理单个服务并不方便,因此/ etc / inittab仅引导实际上启动/停止单个服务的一组脚本。

Boot scripts

Note:
以下描述适用于基于UNIX System V Release 4的OS。但是,许多广泛使用的系统(Slackware Linux,FreeBSD,OpenBSD)对启动脚本的方案略有不同。

对于每个托管服务(邮件,nfs服务器,cron等),在特定目录(大多数Linux版本中为/etc/init.d)中只有一个启动脚本。这些脚本中的每个脚本都将单词" start"(使它启动服务)或单词" stop"(使它停止服务)作为一个单独的参数。脚本可以选择接受其他"便利性"参数(例如,"重新启动"以停止然后启动,"状态"以显示服务状态,等等)。不带参数运行脚本将显示可能的参数。

Sequencing directories

要使特定脚本在特定运行级别按特定顺序启动/停止,请使用顺序目录,通常为/etc/rc[0-6S].d形式。在每个目录中,都有/etc/init.d目录中脚本的链接(通常是符号链接)。

inittab(5)调用主脚本(通常是/ etc / rc);该主脚本通过相关排序目录中的链接调用每个服务的脚本。名称以aqSaq开头的每个链接都使用参数" start"来调用(从而启动服务)。名称以aqKaq开头的每个链接都使用参数" stop"(从而停止服务)进行调用。

要在同一运行级别内定义开始或停止顺序,链接的名称应包含一个顺序号。同样,为清楚起见,链接的名称通常以其引用的服务的名称结尾。例如,链接/etc/rc2.d/S80sendmail在运行级别2上启动sendmail服务。这发生在运行/etc/rc2.d/S12syslog之后但运行/etc/rc2.d/S90xfs之前。

管理这些链接就是管理引导顺序和运行级别。在许多系统中,有一些工具可以帮助完成此任务(例如chkconfig(8))。

Boot configuration

提供服务的程序通常称为"守护程序"。通常,守护程序可能会接收各种命令行选项和参数。为了允许系统管理员在不编辑整个启动脚本的情况下更改这些输入,使用了一些单独的配置文件,该文件位于关联的启动脚本可能在其中找到的特定目录中(在较早的Red Hat系统上为/ etc / sysconfig)。

在较早的UNIX系统中,此类文件包含守护程序的实际命令行选项,但在现代Linux系统中(以及在HP-UX中),它仅包含shell变量。 /etc/init.d中的引导脚本读取并包含其配置文件(即,它"来源"其配置文件),然后使用变量值。

文件

/etc/init.d/、/etc/rc[S0-6].d/、/etc/sysconfig/

另外参见

init(1),systemd(1),inittab(5),bootparam(7),bootup(7),runlevel(8),shutdown(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/