当前位置:Linux教程 - Linux - Boot, Init和Shutdown 过程的描述

Boot, Init和Shutdown 过程的描述

本节描述红帽子LINUX在Boot和shutdown时的内部处理过程。我们先丛讨论 /etc/sysconfig下的文件开始。

11.9.1 有关Sysconfig的信息

以下内容将粗略的讲述一下目录/etc/sysconfg下的各种文件,它们的功能和内容。

11.9.1.1 /etc/sysconfig下面的文件

通常/etc/sysconfig目录下面会有以下几个文件:

/etc/sysconfig/clock

/etc/sysconfig/keyboard

/etc/sysconfig/mouse

/etc/sysconfig/network

/etc/sysconfig/pcmcia

/etc/sysconfig/amd

/etc/sysconfig/tape

让我们分别了解一下每个文件的内容。

/etc/sysconfig/clock

-- 文件/etc/sysconfig/clock控制从系统时钟读出数据的解释。红帽子LINUX早先的版本使用以下数值(它们已经过时):

CLOCKMODE=mode, 这里mode有以下各值:

GMT -- 表示时钟被设置为UTC。

ARC--仅用在ALPHA系列机器上,表示ARC主控的每四十二年时间偏移有效

而目前使用的数值如下:

UTC=boolean, 其中boolean取值为:

true--表示时钟被设置为UTC。任何其它值将表示时钟被设置为当地时间。

ARC=boolean, 其中boolean取值为:

true--(仅适用于基于Alpha的系统)表示ARC主控的每四十二年时间偏移有效;任何其它值表示使用UNIX通常的开元计时。



/etc/sysconfig/keyboard


-- 文件/etc/sysconfig/keyboard控制键盘的功能。可以使用以下数值:



KEYTABLE=file,这里file是定义键盘映射表的文件。例如:KEYTABLE=“/usr/lib/kbd/keytables/us.map


/etc/sysconfig/mouse


--文件/etc/sysconfig/mouse用以指定有关可用鼠标的信息,可使用以下数值:

MOUSETYPE=type, 这里type 使用下列之一:

microsoft --Microsoft鼠标

mouseman --MouseMan 鼠标

mousesystems -- Mouse Systems 鼠标

ps/2 -- PS/2 鼠标

msbm -- Microsoft总线鼠标

logibm -- Logitech总线鼠标

atibm -- ATI总线鼠标

logitech -- Logitech 鼠标

mmseries -- 老式的MouseMan鼠标

mmhittab -- mmhittab鼠标


XEMU3=emulation, 这里emulation取下列数值之一:

yes -- 仿真三键鼠标

no -- 三键鼠标


补充一句,文件/dev/mouse是指向真正鼠标设备的符号连接。



/etc/sysconfig/network


-- 该文件用以指定有关网络配置的信息。可以使用以下数值:



NETWORKING=answer, 这里answer取以下值:

yes -- 应当配置网络。

no -- 不要配置网络。


HOSTNAME=hostname, 这里hostname应当被设置为FQDN(完全域名),但可以为任何您想要的主机名。

请注意:为保证与用户以前已安装的软件的兼容性,文件/etc/HOSTNAME应当与这里设置的值相同。



FORWARD_IPV4=answer, 这里answer取以下各值:

yes -- 做IP包转发

no -- 不做IP包转发


(当前的红帽子LINUX在安装时默认设置为“no”(符合RFC规范),如果FORWARD_IPV4 不加以设置的话,系统将允许转发,以保持同红帽子LINUX4.2及其以前版本的兼容性。)



GATEWAY=gw-ip, 这里gw-ip设置为网关地址。

GATEWAYDEV=gw-dev, 这里gw-dev设置为网关设备(如:eth0)。

NISDOMAIN=dom-name, 这里dom-name设置为NIS域名。


/etc/sysconfig/pcmcia


--该文件用来指定PCMCIA配置信息。使用以下数值:



PCMCIA=answer, 这里answer取以下各值:

yes -- 支持PCMCIA设备。 no -- 无须支持PCMCIA设备?



PCIC=pcic-type, 这里pcip-type取以下各值:

i82365 -- 计算机拥有i82365类型的PCMCIA扩展槽芯片组。

tcic -- 计算机拥有tcic类型的PCMCIA扩展槽芯片组。


PCIC_OPTS=option, 这里option为插槽驱动程序(i82365或tcic)的时钟参数。

CORE_OPTS=option, 这里option为pcmcia_core的设置选项。

CARDMGR_OPTS=option, 这里option为PCMCIA cardmgr的选项。


/etc/sysconfig/amd


-- 该文件用以为amd指定操作参数。可以使用以下数值:



ADIR=path, 这里path指向amd目录。它应当是“/.automount”,通常不要改变。

MOUNTPTS=mountpts, 这里mountpts设置如:“/net /etc/amt.conf”

AMDOPTS=options, 这里options是针对AMD的附加设置。


/etc/sysconfig/tape


-- 该文件用以指定磁带相关的配置信息。可以使用下列信息:



DEV=devnam, 这里devnam为磁带设备文件(例如:“/dev/nst0”)。这里要使用无反卷设备。对于SCSI磁带来说是“/dev/nst#”,#表示磁带驱动器的代号,如果您只有一台,那么就使用“/dev/nst0”。对IDE磁带机来说您使用“/dev/ht#”,而#表示您要使用的磁带机的代号。如果您只有一台,那就用“/dev/ht0”。对于磁盘磁带设备就使用“/dev/ftape”。

ADMIN=account,这里account是用来在备份失败时向该用户发送邮件。通常设置为root。

SLEEP=time,这里time是指两个磁带操作之间的睡眠时间。有些驱动器需要的时间更长一些,但是设置为“5”好象对8mm,4mm和DLT磁带机都没问题。

BLOCKSIZE=size, 这里size是指磁带驱动器的最佳块大小。设置为“32768”对 8mm,4mm和DLT磁带机来说均能工作。最优的设置大概是磁带机一次可以写入的最大数据量。

SHORTDATE=date,这里date是指一个字符串,用以计算出简短的日期,被用在备份文件时的日志文件名中。其默认的设置为:“$(date +%y:%m:%d:%H:%M)”

DAY=date,这里date是指一个字符串,用以计算出日期,被用以作为日志文件目录。默认设置为:“$(date +log-%y:%m:%d)”

DATE=date, 这里date是指一个字符串,用以计算出日期,用于日志文件中。默认的设置为````$(date)‘‘。

LOGROOT=path, 这里path是指日志存放的根目录。

LIST=file,这里file是由增量备份用来存放增量清单的文件名。它后面缀以序号。

DOTCOUNT=count,这里count是指一个用作计数的文件名,用以决定增量备份时使用哪个增量清单。

COUNTER=count-file, 这里count-file被用于备份完成后的回卷(可能不用)。

BACKUPTAB=file, 这里是指我们要备份清单名。


11.9.1.2 Files in /etc/sysconfig/network-scripts/


/etc/sysconfig/network-scripts下通常存在以下文件:



/etc/sysconfig/network-scripts/ifup

/etc/sysconfig/network-scripts/ifdown

/etc/sysconfig/network-scripts/network-functions

/etc/sysconfig/network-scripts/ifcfg-

/etc/sysconfig/network-scripts/ifcfg--

/etc/sysconfig/network-scripts/chat-

/etc/sysconfig/network-scripts/dip-

/etc/sysconfig/network-scripts/ifup-post

/etc/sysconfig/network-scripts/ifdhcpc-done


让我们分别加以讨论。



/etc/sysconfig/network-scripts/ifup, /etc/sysconfig/network-scripts/ifdown


--它们是分别指向/sbin/ifup和/sbin/ifdown的符号连接,这是该目录下唯一可以直接调用执行的脚本,由这两个脚本来调用其它的脚本程序。这里的这两个符号连接仅为了一致才放在这里。它们可能从未来的版本中删去,因此当前应当仅使用/sbin/ifup,/sbin/ifdown 命令。它们需要使用一个命令行参数:设备的名称(如:eth0)。它们在boot时还指定第二个参数“boot“,这样可以忽略被设置成无需在boot时激活的的设备(ONBOOT=no)。



/etc/sysconfig/network-scripts/network-functions


--这并不是一个真正公开的命令文件。它包括了用于激活和关停接口设备的脚本函数。特别的,其中大多数代码被用来处理第二种接口配置和以网络报告的形式进行接口配置变化通知。



/etc/sysconfig/network-scripts/ifcfg-, /etc/sysconfig/network-scripts/ifcfg--


--第一个文件定义了一接口信息,第二个文件用以定义与一个“克隆”(也就是第二可用的)接口配置不同的信息。举个例子,除了网络号不同外,也许别的都一样,于是“克隆”的文件中只包含有网络号,而所有的设备信息都被放在基本的ifcfg 文件中。

ifcfg文件中可以定义的条目与接口类型有关。

以下各值常见于所有的基本配置文件中:

DEVICE=name,这里name是物理设备的名字(动态分配的PPP设备应当除外,它的名字是“逻辑名”。

IPADDR=addr, 这里addr是IP地址。

NETMASK=mask, 这里mask是网络掩码。

NETWORK=addr, 这里addr是网络地址。

BROADCAST=addr, 这里addr是广播地址。

GATEWAY=addr, 这里addr是网关地址。

ONBOOT=answer, 这里answer取下列值之一:

yes -- 该设备将在boot时被激活。

no -- 该设备不在boot时激活。


USERCTL=answer, 这里answer取下列值之一:

yes --非root用户可以控制该设备。

no -- 非root用户不允许控制该设备。


BOOTPROTO=proto, 这里proto取下列值之一:

none -- 不使用boot时协议。

bootp -- 使用bootp协议。

dhcp --使用dhcp协议。


以下是所有PPP和SLIP文件所使用的数值:



PERSIST=answer, 这里answer取下列值之一:

yes --该设备将一直维持激活态,即便是modem被挂断而导致非激活态。

no -- 该设备不一直维持激活态。


MODEMPORT=port, 这里port是modem端口的设备名称(如“/dev/modem”)。

LINESPEED=baud, baud是modem的线速率(例如,“115200“)。

DEFABORT=answer, 这里answer取下列值之一:

yes -- 在创建或编辑该接口的脚本时插入默认的终止字符串。

no -- 在创建或编辑该接口的脚本时不要插入默认的终止字符串。


以下数值适用于所有的PPP文件:



DEFROUTE=answer, 这里answer取下列值之一:

yes -- 将该接口设置为默认路由。

no -- 不要将该接口设置为默认路由。


ESCAPECHARS=answer, 这里answer取下列值之一:

yes -- 使用预定义的asyncmap。

no -- 不要使用预定义的asyncmap。


(这里代表了一种简化的接口;它不让用户指定使用escape字符。然而,几乎任何情况下都可以使用一个00000000的asyncmap,而且如果需要的话,可以通过设置 PPPOPTIONS来使用任意的asyncmap.)

HARDFLOWCTL=answer, 这里answer取下列值之一:

yes -- 使用硬件流控制。

no -- 不使用硬件流控制。


PPPOPTIONS=options,这里options是任意的选项字符串。它被放置在命令行的末尾,以覆盖前面的选项(如asyncmap)。

PAPNAME=name,这里name是pppd命令行中“name $PAPNAME”的一部分。

注意选项“remotename”总是指定为逻辑ppp设备名,如“ppp0”(如果先前有其它ppp设备被激活的话,这就可能是物理设备ppp1)这样做便于管理pap/chap 文件--name/passwd对与逻辑ppp设备名关联,因此它们可以被一起管理。理论上说,为逻辑PPP设备起除“ppp0”--“pppN”之外的如“worldnet”或”myISP“ 的名字是可行的。



REMIP=addr, 这里addr设置为远端的ip地址(通常不加以指定)

MTU=value, 这里value是MTU的数值。

MRU=value, 这里value设置为MRU的值。

DISCONNECTTIMEOUT=value,这里value表示当一个成功的连接被终止后要等多少秒后再进行连接。

RETRYTIMEOUT=value, 这里value指企图连接失败后要等多少秒之后以进行下一次连接。


/etc/sysconfig/network-scripts/chat-


-- 该文件是建立PPP或SLIP连接的chat脚本。对于SLIP设备,要据chat脚本写出一个DIP 脚本,而对于PPP设备chat脚本将被直接使用。



/etc/sysconfig/network-scripts/dip-


--这个只写的脚本是由netcfg从chat脚本建立的。请不要改动这个文件。在未来的版本中该文件将消失,代之以“运行时构造”于chat的脚本。



/etc/sysconfig/network-scripts/ifup-post


--当任何网络设备(SLIP设备除外)被激活时就会调用该文件。调用 /etc/sysconfig/network-scripts/ifup-routes以根据该设备装载静态路由。装载该设备的别名。如果未设置主机名时,设置主机名。该设备的每个ip将会有一主机名。向任何要求网络事件通知的程序发送SIGIO信号。还可以按照需要被括展为用以修正名字服务配置,调用任意脚本等等。



/etc/sysconfig/network-scripts/ifdhcpc-done


--当dhcp配置一旦完成,dhcpd将调用该文件;根据dhcpd放置于/etc/dhcpc/resolv.conf的版本设置/etc/resolv.conf.。

11.9.2 系统V的Init过程

这一节简要讲述boot的内部过程。基本上详细描述了Sys V init的boot过程及与以往版本的LINUX init的差别。Init是由核心在系统boot时运行的程序。由它负责启动所有的需要在boot时运行的进程。其中包括供您登入的getty,NFS守护进程,FTP守护进程,以及任何需要机器在boot时启动的进程。

Sys V init迅速成为LINUX世界中boot时启动进程的标准。因为它比BSDinit更容易使用也更为强大和灵活。

Sys V init与BSD init不同,其配置文件位于/etc下面的一个名为rc.d子目录中,而不是直接放在/etc下。在rc.d下您会发现rc.sysinit以及以下目录:

init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d



init.d下面有许多脚本程序。一般来说,针对每一项需要在boot或转变运行级时启动的服务均需要一个脚本程序。这些服务包括网络,NFS,sendmail,httpd等等。服务中不包括那些象setserial一样只运行一次就退出的命令。而那些东西应当放在 rc.local或rc.serial中。如果您需要rc.local的话,就把它放在/etc/rc.d下。大多数系统都包括这样一个脚本,即便也没什么用。您需要的话还可以在/etc/rc.d下放置一个rc.serial,用于boot时做与串口相关的操作。事件的执行过程是这样的:



系统核心在几个地方查找init并开始执行第一个发现的init。

由init来执行/etc/rc.d/rc.sysinit

rc.sysinit执行了一系列的操作后接着运行rc.serial(如果存在的话)

由init执行所有默认运行级下的脚本程序

init执行rc.local

默认的运行级由/etc/inittab控制。在该文件前面应有一行:

id:3:initdefault:

对于大多数系统,您将会发现第二列的值被设置为3,也就是默认运行级为3。如果您想改变默认运行级,就编辑/etc/inittab,将3改为其它数值。对于这种操作一定要小心。如果您搞糟了,可以重新启动机器并执行如下操作:

LILO boot: linux single

这可以使您以单用户方式boot,以修正inittab文件。

那么,那些脚本是如何运行的呢?您在rc3.d下键入ls -l 会看到下列文件:

lrwxrwxrwx 1 root root 17 3:11 S10network -> ../init.d/network lrwxrwxrwx 1 root root 16 3:11 S30syslog -> ../init.d/syslog lrwxrwxrwx 1 root root 14 3:32 S40cron -> ../init.d/cron lrwxrwxrwx 1 root root 14 3:11 S50inet -> ../init.d/inet lrwxrwxrwx 1 root root 13 3:11 S60nfs -> ../init.d/nfs lrwxrwxrwx 1 root root 15 3:11 S70nfsfs -> ../init.d/nfsfs lrwxrwxrwx 1 root root 18 3:11 S90lpd -> ../init.d/lpd.init lrwxrwxrwx 1 root root 11 3:11 S99local -> ../rc.local

您会发现这个目录下没有“真正”的文件。全都是一些指向init.d目录下脚本的符号连接。符号连接由字母“S”或“K”和字母组成,S表示启动某个脚本而K表示停止。这里的数字仅用来安排执行的先后次序。Init将依次启动所有的服务。数字可以重复,但这只会把自己给搞糊涂。您只需使用两位数字连同大写的“S”或“K”来指示启动或停止服务。

Init是如何启动和停止服务的呢?很简单,每个脚本被书写成接受一个“start”或 “stop”的参数。实际上您可以以手工的执行以下的命令:

/etc/rc.d/init.d/httpd.init stop

来停止httpd服务器。Init仅仅读出文件名,如果它有字母“K”就以stop为参数调用该脚本,而有字母“S”时就以stop为参数调用该脚本。那么为什么设置那么多的运行级呢?一些人是想将机器设置成为多种目的服务。比如我可以有一个仅运行httpd,sendmail, 网络服务等的运行级,还可以有一个只运行xdm,网络服务等的运行级。

11.9.3 Init 的运行级

Generally, Red Hat Linux runs in run level 3---full multiuser mode. The following runlevels are used in Red Hat Linux:

0

停机t.

1

单用户模式

2

多用户模式,但不提供NFS服务

3

全功能多用户模式

6

重新启动机器


如果您的机器进入了这样一种状态,系统由于损坏的/etc/inittab而不能boot,由于受损的/etc/passwd而不能登入,或者干脆就是忘记了口令。在LILO boot 提示符下键入 linux 1 而boot进入单用户模式,这是一个几乎没有装载任何服务的状态,您可以在提供的shell下执行修复命令。


11.9.4Initscript 工具

chkconfig命令提供了一个简单的命令行方式来维护/etc/rc.d下的文件树。它减轻系统管理员直接以手工方式维护/etc/rc.d下的符号连接的劳动。作为补充还有一个名为 ntsysv的基于屏幕交互的工具。请查看chkconfig和ntsysv的man手册以获得详细信息。

11.9.5 在Boot时执行程序

脚本/etc/rc.d/rc.local是在boot时,于一切其它初始化操作之后或改变运行级别时执行的。例如,您可能要启动其它的守护进程或者初始化打印机。补充一点,如果您需要进行串口的设置,可以编辑加入/etc/rc.d/rc.serial,系统会在boot时自动执行。

默认的/etc/rc.d/rc.local仅仅创建了一个显示有核心版本号和机器类型的登入画面。

11.9.6 Shutting Down

执行shutdown以关闭红帽子LINUX。您可以阅读shutdown的man手册以获得详细信息。下面给出两个常用的命令形式:

shutdown -h now shutdown -r now

任何一个命令都可以安全的关闭系统,前一个关闭系统后停机,后一个关闭系统后将重新启动机器。

尽管reboot和halt命令现在可以在系统运行于运行级1-5时“聪明”的调用shutdown来关闭系统,但是这么做并不是一个好的习惯,因为并不是所有的LINUX都支持这一功能。