引用:内容摘要 Unix系统具有很长的、不断发展变化的历史,从20世纪70年代初AT&T创造了Unix开始,System V版本的诞生、AT&T与Sun的合作、OSF/1(HP、Digital Equipment Corporation、IBM等厂家组成的开放软件基金会)组织的加入、源于BSD的Mach的成熟,再加上Linux的诞生,Sun Solaris一直都在Unix领域处于市场的领先地位。特有的Sparc版和X86版的支持,到现在Solaris 10的发布和开源,Sun Solaris一直在不断地改进和发展!
Unix系统具有很长的、不断发展变化的历史,从20世纪70年代初AT&T创造了Unix开始,System V版本的诞生、AT&T与Sun的合作、OSF/1(HP、Digital Equipment Corporation、IBM等厂家组成的开放软件基金会)组织的加入、源于BSD的Mach的成熟,再加上Linux的诞生,Sun Solaris一直都在Unix领域处于市场的领先地位。特有的Sparc版和X86版的支持,到现在Solaris 10的发布和开源,Sun Solaris一直在不断地改进和发展!
下面我们共同探讨一下Solaris 2.x的启动和关机。Solaris 2.x采用了基于Unix系统System V Release 4.0标准的灵活的启动过程,这就使得可以很容易地产生和定制在各个主机和系统上都通用的启动和关机过程,这与Solaris 1.x所用的简单的BSD风格的启动过程形成了鲜明的对比,后者缺少针对不同的系统状态启动脚本的不同组织形式。
谈到启动,首先要介绍一下Sun Sparc平台下的EEPROM OpenBoot固件监视系统,它类似于PC BIOS的芯片程序,其职责在于识别分区,文件系统和加载内核。在Solaris系统中,默认的内核文件存放在/platform/arch/kernel/unix位置,根据版本的不同可能略有差别。arch指令是指明系统的硬件结构体系,例如sun4u(sun ultrasparc)、i86pc(intel IA32)等。由于PC厂商有不同的BIOS系统,Sun Solaris X86版很难做到在其系统中有OpenBoot固件监控系统,只是提供了一个模拟EEPROM引导程序来负责内核的定位和加载。下面谈到的OpenBoot固件监视系统功能都是针对Sparc硬件平台而言。
EEPROM OpenBoot固件监视系统(简称OBP),主要功能如下。
调整启动设备和启动参数
通过对命令对boot-device参数的设置,确定启动的设备及启动设备顺序的调整。Sun SDS对根盘进行镜像后的设置和Vertias VxVm等卷管理软件对根盘进行封装之后都需要在OBP进行设置。参数设置如下所示:
printenv:显示参数的当前值以及默认值。
setenv variable value:设定参数variable的值为value(永久性修改,需要重启之后生效)。
set-default variable:将某个参数设定为出厂值。
set-defaults:将所有参数设定为出厂值。
password:设置密码。
检测硬件故障
OBP中提供了简单的硬件检测命令和模式。例如,检测SCSI总线的终结状态,或者执行称为“上电自检”的POST(Power-On Self Test,POST)检测。OBP中提供了一些诊断工具以便测试系统中所安装的硬件,ok help diag命令可以查看可用的test命令,部分命令如下所示:
probe-scsi:检测在scsi总线上的设备。
test device-specifier:执行指定设备的自检。
test net:测试网络连接。
watch-clock:测试时钟。
编写启动程序
和许多Linux版本自带的LILO Linux 、GRUB linux等加载器不一样,OpenBoot不仅仅是一个简单的操作系统加载器,它还允许在启动进程开始前写入、加载和运行使用基于堆栈的Forth编程语言编写的程序。当为一个大企业定制服务器时,通常要求在启动时显示公司的标志而不是缺省的Sun标志,这时,OpenBoot的这一特性就非常有用了。可以生成一个用合适的像素构成的Forth数组,然后运行oem-logo命令。另外,在单用户和多用户init状态中,也可以在启动后对变量的值进行设定,这可以通过以超级用户的身份运行eeprom命令实现。
OBP用户界面(熟称OK态)
可通过如下方式进入OBP界面:
halt系统(init 1,等等)。
利用组合键 STOP+A。
auto-boot?设置为false,开机自动进入。
检测到系统硬件错误。
OBP中提供了几个命令来显示系统的信息,通过这些命令就可以大概了解系统的配置信息,如下所示:
banner:显示电源状态。
show-sbus:显示已安装且检测到的SBus设备列表。
enet-addr:显示当前的以太网地址。
idprom:显示经过格式化的ID PROM的内容。
traps:显示处理器相关的陷阱类型的列表。
version:显示启动PROM的版本和日期。
speed:显示处理器和总线的速度。
设备树与设备别名
设备树的命名规则与Solaris设备的物理命名方式相同。显示设备树所用的命令如下所示:
properties:显示当前所在设备节点的属性。
dev device-path:选择某个设备节点。
dev node-name:在当前设备节点的下级树中查找某个设备节点,且切换到第一个。
dev ..:选择当前设备节点的上一级设备。
dev /:选择设备的根节点。
device-end:离开设备树。
ls:显示当前设备的下级设备。
pwd:显示当前设备的物理连接路径。
show-devs [device-path]:显示设备树(show-devs将显示整个机器的设备树)。
words:显示当前设备的名字。
在日常应用中,设备名的格式(/sbus@1f,0/esp@0,40000/sd@3,0:a)导致其在使用上很不方便,而使用设备别名却是解决方法之一,如下所示的命令可以对设备别名进行操作:
devalias:显示当前的别名设置。
devalias alias:显示特定设备别名对应的物理设备名。
devalias alias:设置别名,如果alias有重复则覆盖掉旧值。
OBP启动顺序
上电自检 (POST) 。
执行系统初始化。
执行nvramrc定义的脚本 (if use-nvramrc? is true) 。
执行probe-all (evaluate FCode) 。
执行install-console 。
显示banner 。
执行二级诊断。
启动操作系统 (if auto-boot? is true)。
获取在线帮助
在ok提示符下可以使用下面的命令获取帮助:
help:显示帮助的分类。
help category:显示特定分类的可用命令,category使用提示的第一个单词。
help command:显示特定命令的帮助。
从OpenBoot启动后,Solaris有几个不同的操作模式,称为“运行等级”或“init状态”。对于大多数系统来说,缺省的运行等级是init 3,它允许多个用户登录,并可运行各种程序,包括NFS。然而,要从OpenBoot转入这个状态,需要经过一系列预先规定的init状态转移,从单用户(1,S)到多用户 (2 , 3)运行状态。
Solaris软件环境提供了一系列详细的运行控制脚本,来控制运行等级的转换,每一个运行等级都在/sbin目录下有一个相关的rc脚本,它们也分别链接到/etc目录: rc0, rc1, rc2, rc3, rc5, rc6, rcS。
Solaris的启动进程是按照SYS V格式控制的,当系统内核运行完毕,加载好所有的驱动之后,就会把控制权移交给/sbin/init进程(PID:1) ----即所有进程的父进程----然后由init读取/etc/inittab,依次执行/etc/rc1(2,3)启动脚本,最终到达inittab中指定的默认运行级别。整个系统启动过程如下:
init 0,openboot模式 -> (引导内核,加载硬件驱动)可以选择从cdrom引导进入维护模式。
init 1,单用户模式 -> (加载/分区) 登陆进入维护模式,或按Ctrl+D进入多用户模式。
init 2, 网络工作站模式 -> (连接网络,运行网络工作站服务) 运行/etc/rc2脚本连接网络。
启动S69inet服务,运行部分inetd网络服务。
init 3, 网络服务器模式 -> (运行各种网络服务) 运行/etc/rc3脚本启动网络服务器。
下面是/etc中所有的启动运行脚本简要说明:
rc0.d: eeprom OpenBoot状态,可以进入硬件维护模式或关闭机器。
rc1.d: 单用户模式,可以对系统进行软件维护。
S01MOUNTFSYS +加载文件系统。
S10lu =当运行live update后清理系统。
rc2.d: 多用户模式,启动网络工作站服务(最后会启动dtlogin允许图形界面工作站)。
S01MOUNTFSYS
S05RMTMPFILES + 清空/tmp文件系统。
/tmp是系统缓存文件目录,和swap分区共享空间,如果分区满的话会对系统性能造成很大影响。
S10lu =
S20sysetup + 设置系统初始参数。
设置hostname等
S21perf = 性能记账服务(无效)
开启accton记账服务,默认无效。
设置系统IP地址
S40llc2 + 启动Class II logical link control driver
逻辑链路控制程序驱动
S42ncakmod = 启动Solaris Network Cache and Accelerator (NCA)
NCA网络缓存加速驱动,可以提高HTTP Server吞吐率。
S47pppd - 启动拨号访问服务器进程
串行线拨号访问服务器
S69inet = 启动inetd进程
s70uucp - 启动uucp
S71rpc + 启动rpcbind服务
rpcbind (RPC Portmap服务),如果需要CDE的话,这个进程是必需的。
S71sysid.sys + 配置一些系统参数
S71ldap.client - 启动LDAP客户端
S72directory - 启动目录服务
S72inetsvc + 启动inet server
包含named/nis启动名字解析服务,包含named和nis两部分。
s72slpd - 启动slpd
打印服务系统的一部分。
S72autoinstall = 启动自动安装守护进程
S73cachefs.daemon - 启动cachefsd
NFS缓存服务,可以提高NFS吞吐率。
S73nfs.client = 启动nfs客户端
S74syslog + 启动syslog
系统日志守护进程。
s74autofs - 启动auto mount fsd
s74xntpd - 启动网络时间同步服务
S75cron + 启动crontab服务
S75savecore +
S76nscd + 启动nscd,名字服务缓存
S80kdmconfig = 启动kdmconfig
S80spc - 启动lpd打印守护进程
s80lp - 启动lpd打印调度守护进程
S85lmgrd + 启动flexlm license服务器
Solaris License管理服务器
S85power + 启动电源守护进程
S88utmpd + 启动utmpd
s88sendmail - 启动sendmail
S89PRESERVE =“保留,无效”
S90wbem = 启动wbem
S93cacheos.finish -
S94ncalogd = 启动Solaris Network Cache and Accelerator LOGd
S95IIim + 启动输入法守护进程
Solaris国际化支持的一部分,启动东亚语言输入法
S95svm.sync + 启动 devfsadm ,devfs同步进程。
S99audit + 启动BSM审计进程
Solaris Base Securiey Modula,启动Solaris C2安全审计(默认未启动)。
S99dtlogin = 启动CDE登录进程
rc3.d: 多用户模式,启动网络服务器模式
S13kdc.master - 启动Kerberos服务器
S14kdc - 启动Kerberos服务器
S34dhcp = 启动dhcp
S50apache - 启动apache服务器
S76snmpdx - 启动snmp服务器
启动snmp,允许远程网络管理
S77dmi - 启动snmp - dmi服务
S89sshd + 启动sshd服务器
S80mipagent - 启动Mobile IP 代理
S90samba - 启动samba服务器
注:+代表必须服务,系统正常运行必须;=代表可选服务,由用户环境决定;-代表无效,不必要或不安全的服务。