本帖最后由 spain.yx 于 2010-1-14 12:48 编辑
操作系统的起动过程可以大致分为PDC、ISL、load kernel、start subsystem、login
几个阶段,下面分别介绍。
PDC(Processor Dependent Code)
简单地说PDC 就好像是PC 上的BIOS,处理一些基本的IO 操作。在起始
屏幕上可以看到firmware 版本、CPU 个数、内存容量等信息。我们在前面讲过,
安装新的操作系统可能需要相应的PDC 版本配合。新的PDC 文件目前通常都打包
为补丁的形式,在安装完补丁重起系统时自动进行升级。
PDC会提示在10 秒钟内按任意键中断启动过程,否则会自动继续到ISL 阶
段。
换任意键中断启动过程后,会看到这样的界面:
Boot terminated.
---- Main Menu ---------------------------------------------------------------
Command Description
------- -----------
BOot [PRI|ALT|] Boot from specified path
PAth [PRI|ALT] [] Display or modify a path
SEArch [DIsplay|IPL] [] Search for boot devices
COnfiguration menu Displays or sets boot values
INformation menu Displays hardware information
SERvice menu Displays service commands
DIsplay Redisplay the current menu
HElp [|] Display help for menu or command
RESET Restart the system
----
Main Menu: Enter command or menu >
在 PDC 菜单里有一些常用的选项。
BO 可以选择从非默认的路径启动。
PA 改变默认启动路径。
SEA 搜索所有可启动设备,在新的比如说RP8400 等服务器上要注意,如果
服务器上有多个MP 卡,在控制台敲SEA 默认只会搜索这块MP 卡控制的
设备,要搜索另一部分设备,要在SEA 后加参数。
o 例如,如果控制台接在MP0 上,按SEA 回车会找到0/*/*/*之类的设
备,要搜索1/*/*/*之类的设备,需要输入SEA 1。反过来说,如果控
制台接在MP1 上,想搜索0/*/*/*之类的设备,要输入SEA 0。
CO 菜单中可以deconfigure/configure 一部分设备,比如说以前的K580,如
果安装了6 个CPU 和较大的内存,重新启动一次扎扎实实的20 分钟是少不
了的。要完全重装系统,就需要多次重起主机。可以在这里deconfigure 五
个CPU,全部安装完成后再configure 回来,每次重起可以省出一根烟的时
间。
IN 中可以看到比较详细的硬件信息,例如在最初的启动屏幕中我们可以看
到内存的总量,具体到这些内存条每一条的容量是多少,应可以在IN 中看
到。
SER 中,PIM命令可以用来查看HPMC 的信息,SCSI 命令可以用来更改内
PCI 接口的SCSI 卡的ID(在存储一章中有更详细的说明)
ISL
在PDC 菜单下,可以选择进入ISL 互动模式
Main Menu: Enter command or menu > bo
Interact with IPL (Y, N, or Cancel)?> y
Booting...
Boot IO Dependent Code (IODC) revision 1
HARD Booted.
ISL Revision A.00.43 Apr 12, 2000
ISL>
在PDC 菜单中,我们决定了从哪一个设备启动,这个设备可以是硬盘、
CDROM或磁带机等。如果这个设备是可引导的,那么这个设备就会有一个LIF
区。在LIF 区中有哪些文件,可以用操作系统的命令lifls 来查看。
#lifls -l /dev/rdsk/c1t15d0
volume ISL10 data size 7984 directory size 8 02/05/10 16:25:44
filename type start size implement created
===============================================================
ODE -12960 584 848 0 02/10/03 17:08:08
MAPFILE -12277 1432 128 0 02/10/03 17:08:08
SYSLIB -12280 1560 353 0 02/10/03 17:08:08
CONFIGDATA -12278 1920 237 0 02/10/03 17:08:08
SLMOD2 -12276 2160 141 0 02/10/03 17:08:08
SLDEV2 -12276 2304 136 0 02/10/03 17:08:08
SLDRV2 -12276 2440 205 0 02/10/03 17:08:08
SLSCSI2 -12276 2648 131 0 02/10/03 17:08:08
MAPPER2 -12279 2784 142 0 02/10/03 17:08:08
IOTEST2 -12279 2928 412 0 02/10/03 17:08:08
PERFVER2 -12279 3344 124 0 02/10/03 17:08:08
PVCU -12801 3472 64 0 02/10/03 17:08:08
SSINFO -12286 3536 2 0 02/10/03 17:08:08
HPUX -12928 3544 848 0 02/05/10 16:25:44
ISL -12800 4392 306 0 00/11/08 20:49:59
AUTO -12289 4704 1 0 00/11/08 20:49:59
LABEL BIN 4712 8 0 03/04/15 18:57:52
如果在这里不选互动模式,那么系统将根据该引导设备的AUTO 文件的内
容自动引导。用lifcp 命令可以查看AUTO 文件的内容。
# lifcp /dev/rdsk/c1t15d0:AUTO –
hpux –lq (;0)/stand/vmunix
命令 hpux 是用来引导核心,可以带不同的参数。
-is 引导到单用户状态。VG00 激活,只mount 了/和/stand 文件系统。其他的
启动脚本也均未执行。
-lq 不进行quorum 检查。当一个VG 只有少于等于50%的硬盘可以正常访问
时,默认情况下就不能被激活。加这个参数以后就可以强行激活,在配置了
根盘镜像的情况下经常会用到这个参数。
-lm 进入维护模式。这时VG00 也未被激活,/文件系统被mount 到
/dev/root。这时可以对VG00 进行vgexport/vgimport 的操作。如果根盘的硬
件路径发生了变化,就可以用这种方式修正过来。要注意的是,进入维护模
式后,切换到其他运行级别需要重起主机,可不是运行init 命令。
还有几个有用的参数
ISL>hpux ll 可以列出/stand 下的文件,在找不到kernel 文件时有用。
ISL>hpux show autofile 可以显示AUTO 文件的内容。
Load Kernel
ISL> hpux
Boot
: disk(0/0/1/1.15.0.0.0.0.0;0)/stand/vmunix
11882496 + 2211840 + 5458472 start 0x1ef3e8
如果 IO 系统有问题,比如说有SCSI 链路没有终结或是SCSI ID 冲突等,在
Load Kernel 时往往会造成system panic。如果有这样的现象,试试将系统中不是必
须的设备暂时隔离开。
Start subsystem
/etc/init
会根据/etc/inittab 的内容初始化相关进程
/sbin/bcheckrc
激活卷组并进行文件系统的检查(fsck)
/etc/rc.config
检查并运行/etc/rc.config.d/下的所有配置文件。
要注意,是所有文件,rc.config 会做一些简单的检查,比如说名为core 的文
件或文件名中有’ .,˜#’等字符的文件不会被执行,但是其他的文件会被执行。
无关的脚本不要存储在这个目录下,或命名时要包含以上的特殊字符.
/sbin/rc
根据系统的运行级别依次执行相应的启动脚本.比如说进入运行级2 时会依
次调用/sbin/rc2.d/下所有’S’开头的脚本,调用的次序根据S 后面的数字大小决定。
进入运行级3 时会执行/sbin/rc3.d 下的’S’脚本。有时候客户有一些命令想在开机后
自动运行,比如说加一条静态路由等。可以在合适的地方建立一个脚本来实现,例
如/sbin/rc3.d/S988route,内容可以是这样:
#Added by Chen Peng for static routing 2003/05/18
exitval=0
case $1 in
'start_msg')
echo "Adding static route "
;;
'stop_msg')
# Should never occur: there is no K-link
echo "Stopping routing table"
;;
'start')
/usr/sbin/route add net 13.14 1.2.3.4 1
exitval=$?
;;
'stop')
print "This script does not remove routing table"
exitval=0
;;
*)
echo "usage: $0 {start|stop}"
exitval=2
;;
esac
exit $exitval
/sbin/rc 会以’start_msg’和’start’为参数分别调用这个脚本,’start_msg’的返回
值会在控制台上显示出来。按照实际需求更改这个脚本的这两个部分即可。这些脚
本的输出结果会保存在/etc/rc.log 中。
如果想表现得更专业一些,将你的脚本放在/sbin/init.d 下,然后在合适的地
方用ln 命令建一个链接。因为原来操作系统自带的脚本都是这样安排的。
Init: Command is Respawning Too Rapidly
可能很多人见过这个错误信息,在系统启动的过程中反复出现,相当讨厌。
造成这种错误的原因比较多,也比较复杂,所以我单独列出来。
通常的原因是在/etc/rc.config.d/下的某一个配置文件(或是/etc/inittab 文件)
中有一些无效的字符,造成脚本运行不正常。有时系统突然掉电后,就会出现这样
的现象。
解决的办法是先启动到单用户,将各文件系统mount 起来。
看一下上次正常重起后有哪些文件被改动了。
# tail -1 /etc/shutdownlog # 找上一次正常重起的时间
# ll -tr /etc/rc.config.d | tail -10
# ll -tr /sbin/init.d | tail -10
# ll /etc/inittab
如果有最近更新过的文件,尝试参照/usr/newconfig/下的模板文件来检查
它。
如果没有明显的进展,可以在/etc/rc.config 文件中最前面加一行
set –x #Enable trace
这样就打开了调试开关。
执行以下命令:
#. /etc/rc.config
观察在哪里有出错信息,进行相应的修改或恢复即可。恢复正常后将/etc/rc.config
文件恢复,然后用init 4 继续启动或reboot –q 重起系统。
Login
终于看到熟悉的登录界面。输用户名和密码就可以访问系统了。顺便提一
下,如果在控制台上登录时,用户名用全大写字母输入了,那么登录进来以后所有
的字符显示都是大写。
操作系统的起动过程可以大致分为PDC、ISL、load kernel、start subsystem、login
几个阶段,下面分别介绍。
PDC(Processor Dependent Code)
简单地说PDC 就好像是PC 上的BIOS,处理一些基本的IO 操作。在起始
屏幕上可以看到firmware 版本、CPU 个数、内存容量等信息。我们在前面讲过,
安装新的操作系统可能需要相应的PDC 版本配合。新的PDC 文件目前通常都打包
为补丁的形式,在安装完补丁重起系统时自动进行升级。
PDC会提示在10 秒钟内按任意键中断启动过程,否则会自动继续到ISL 阶
段。
换任意键中断启动过程后,会看到这样的界面:
Boot terminated.
---- Main Menu ---------------------------------------------------------------
Command Description
------- -----------
BOot [PRI|ALT|] Boot from specified path
PAth [PRI|ALT] [] Display or modify a path
SEArch [DIsplay|IPL] [] Search for boot devices
COnfiguration menu Displays or sets boot values
INformation menu Displays hardware information
SERvice menu Displays service commands
DIsplay Redisplay the current menu
HElp [|] Display help for menu or command
RESET Restart the system
----
Main Menu: Enter command or menu >
在 PDC 菜单里有一些常用的选项。
BO 可以选择从非默认的路径启动。
PA 改变默认启动路径。
SEA 搜索所有可启动设备,在新的比如说RP8400 等服务器上要注意,如果
服务器上有多个MP 卡,在控制台敲SEA 默认只会搜索这块MP 卡控制的
设备,要搜索另一部分设备,要在SEA 后加参数。
o 例如,如果控制台接在MP0 上,按SEA 回车会找到0/*/*/*之类的设
备,要搜索1/*/*/*之类的设备,需要输入SEA 1。反过来说,如果控
制台接在MP1 上,想搜索0/*/*/*之类的设备,要输入SEA 0。
CO 菜单中可以deconfigure/configure 一部分设备,比如说以前的K580,如
果安装了6 个CPU 和较大的内存,重新启动一次扎扎实实的20 分钟是少不
了的。要完全重装系统,就需要多次重起主机。可以在这里deconfigure 五
个CPU,全部安装完成后再configure 回来,每次重起可以省出一根烟的时
间。
IN 中可以看到比较详细的硬件信息,例如在最初的启动屏幕中我们可以看
到内存的总量,具体到这些内存条每一条的容量是多少,应可以在IN 中看
到。
SER 中,PIM命令可以用来查看HPMC 的信息,SCSI 命令可以用来更改内
PCI 接口的SCSI 卡的ID(在存储一章中有更详细的说明)
ISL
在PDC 菜单下,可以选择进入ISL 互动模式
Main Menu: Enter command or menu > bo
Interact with IPL (Y, N, or Cancel)?> y
Booting...
Boot IO Dependent Code (IODC) revision 1
HARD Booted.
ISL Revision A.00.43 Apr 12, 2000
ISL>
在PDC 菜单中,我们决定了从哪一个设备启动,这个设备可以是硬盘、
CDROM或磁带机等。如果这个设备是可引导的,那么这个设备就会有一个LIF
区。在LIF 区中有哪些文件,可以用操作系统的命令lifls 来查看。
#lifls -l /dev/rdsk/c1t15d0
volume ISL10 data size 7984 directory size 8 02/05/10 16:25:44
filename type start size implement created
===============================================================
ODE -12960 584 848 0 02/10/03 17:08:08
MAPFILE -12277 1432 128 0 02/10/03 17:08:08
SYSLIB -12280 1560 353 0 02/10/03 17:08:08
CONFIGDATA -12278 1920 237 0 02/10/03 17:08:08
SLMOD2 -12276 2160 141 0 02/10/03 17:08:08
SLDEV2 -12276 2304 136 0 02/10/03 17:08:08
SLDRV2 -12276 2440 205 0 02/10/03 17:08:08
SLSCSI2 -12276 2648 131 0 02/10/03 17:08:08
MAPPER2 -12279 2784 142 0 02/10/03 17:08:08
IOTEST2 -12279 2928 412 0 02/10/03 17:08:08
PERFVER2 -12279 3344 124 0 02/10/03 17:08:08
PVCU -12801 3472 64 0 02/10/03 17:08:08
SSINFO -12286 3536 2 0 02/10/03 17:08:08
HPUX -12928 3544 848 0 02/05/10 16:25:44
ISL -12800 4392 306 0 00/11/08 20:49:59
AUTO -12289 4704 1 0 00/11/08 20:49:59
LABEL BIN 4712 8 0 03/04/15 18:57:52
如果在这里不选互动模式,那么系统将根据该引导设备的AUTO 文件的内
容自动引导。用lifcp 命令可以查看AUTO 文件的内容。
# lifcp /dev/rdsk/c1t15d0:AUTO –
hpux –lq (;0)/stand/vmunix
命令 hpux 是用来引导核心,可以带不同的参数。
-is 引导到单用户状态。VG00 激活,只mount 了/和/stand 文件系统。其他的
启动脚本也均未执行。
-lq 不进行quorum 检查。当一个VG 只有少于等于50%的硬盘可以正常访问
时,默认情况下就不能被激活。加这个参数以后就可以强行激活,在配置了
根盘镜像的情况下经常会用到这个参数。
-lm 进入维护模式。这时VG00 也未被激活,/文件系统被mount 到
/dev/root。这时可以对VG00 进行vgexport/vgimport 的操作。如果根盘的硬
件路径发生了变化,就可以用这种方式修正过来。要注意的是,进入维护模
式后,切换到其他运行级别需要重起主机,可不是运行init 命令。
还有几个有用的参数
ISL>hpux ll 可以列出/stand 下的文件,在找不到kernel 文件时有用。
ISL>hpux show autofile 可以显示AUTO 文件的内容。
Load Kernel
ISL> hpux
Boot
: disk(0/0/1/1.15.0.0.0.0.0;0)/stand/vmunix
11882496 + 2211840 + 5458472 start 0x1ef3e8
如果 IO 系统有问题,比如说有SCSI 链路没有终结或是SCSI ID 冲突等,在
Load Kernel 时往往会造成system panic。如果有这样的现象,试试将系统中不是必
须的设备暂时隔离开。
Start subsystem
/etc/init
会根据/etc/inittab 的内容初始化相关进程
/sbin/bcheckrc
激活卷组并进行文件系统的检查(fsck)
/etc/rc.config
检查并运行/etc/rc.config.d/下的所有配置文件。
要注意,是所有文件,rc.config 会做一些简单的检查,比如说名为core 的文
件或文件名中有’ .,˜#’等字符的文件不会被执行,但是其他的文件会被执行。
无关的脚本不要存储在这个目录下,或命名时要包含以上的特殊字符.
/sbin/rc
根据系统的运行级别依次执行相应的启动脚本.比如说进入运行级2 时会依
次调用/sbin/rc2.d/下所有’S’开头的脚本,调用的次序根据S 后面的数字大小决定。
进入运行级3 时会执行/sbin/rc3.d 下的’S’脚本。有时候客户有一些命令想在开机后
自动运行,比如说加一条静态路由等。可以在合适的地方建立一个脚本来实现,例
如/sbin/rc3.d/S988route,内容可以是这样:
#Added by Chen Peng for static routing 2003/05/18
exitval=0
case $1 in
'start_msg')
echo "Adding static route "
;;
'stop_msg')
# Should never occur: there is no K-link
echo "Stopping routing table"
;;
'start')
/usr/sbin/route add net 13.14 1.2.3.4 1
exitval=$?
;;
'stop')
print "This script does not remove routing table"
exitval=0
;;
*)
echo "usage: $0 {start|stop}"
exitval=2
;;
esac
exit $exitval
/sbin/rc 会以’start_msg’和’start’为参数分别调用这个脚本,’start_msg’的返回
值会在控制台上显示出来。按照实际需求更改这个脚本的这两个部分即可。这些脚
本的输出结果会保存在/etc/rc.log 中。
如果想表现得更专业一些,将你的脚本放在/sbin/init.d 下,然后在合适的地
方用ln 命令建一个链接。因为原来操作系统自带的脚本都是这样安排的。
Init: Command is Respawning Too Rapidly
可能很多人见过这个错误信息,在系统启动的过程中反复出现,相当讨厌。
造成这种错误的原因比较多,也比较复杂,所以我单独列出来。
通常的原因是在/etc/rc.config.d/下的某一个配置文件(或是/etc/inittab 文件)
中有一些无效的字符,造成脚本运行不正常。有时系统突然掉电后,就会出现这样
的现象。
解决的办法是先启动到单用户,将各文件系统mount 起来。
看一下上次正常重起后有哪些文件被改动了。
# tail -1 /etc/shutdownlog # 找上一次正常重起的时间
# ll -tr /etc/rc.config.d | tail -10
# ll -tr /sbin/init.d | tail -10
# ll /etc/inittab
如果有最近更新过的文件,尝试参照/usr/newconfig/下的模板文件来检查
它。
如果没有明显的进展,可以在/etc/rc.config 文件中最前面加一行
set –x #Enable trace
这样就打开了调试开关。
执行以下命令:
#. /etc/rc.config
观察在哪里有出错信息,进行相应的修改或恢复即可。恢复正常后将/etc/rc.config
文件恢复,然后用init 4 继续启动或reboot –q 重起系统。
Login
终于看到熟悉的登录界面。输用户名和密码就可以访问系统了。顺便提一
下,如果在控制台上登录时,用户名用全大写字母输入了,那么登录进来以后所有
的字符显示都是大写。
编辑回复