在许多方面, Solaris 的启动和关机于许多其它系统有相似性,然而,认识和理解 Solaris 操作系统于其它服务器不同的特性也是非常重要的。 SPARC 硬件的一个重要的功能是称为 OpenBoot 的固件监视系统,它负责启动前的一些重要任务:
· 通过键入下面的字符启动 Solaris 操作系统 :
ok boot
在 OpenBoot 提示符下 , 它将启动 Solaris 内核 ( 在 Solaris x86 上, boot 命令必须通过 Primary Boot Subsystem 菜单执行 )
· 设置系统配置参数,如启动设备,它可以是几个硬盘之一(由设备的全路径名确定),或者是网络上的一台其它主机,也可以是一个 CD-ROM 驱动器。
· 通过执行下面这条命令监测网络流量 :
ok watch-net
在 OpenBoot 提示符下运行
· 对系统设备执行简单的诊断和测试 ( 例如,检测 SCSI 总线的终结状态,或者执行称为上电自检的 POST ( Power-On Self Test POST )检测 )
和许多 Linux 版本带的 LILO Linux 加载器不一样, OpenBoot 不只是一个简单的操作系统加载器,它还允许地启动进程开始前写入、加载和运行用基于堆栈的 Forth 编程语言写的程序,当为一个大企业定制服务器时,常要求在启动时显示公司的标志而不是缺省的 Sun 标志,这时, OpenBoot 的这一特性就非常有用了,可以生成一个用合适的象素构成的 Forth 数组,然后运行 oem-logo 命令。另外,在单用户和多用户 init 状态中,也可以在启动后对变量的值进行设定,这可以通过以超级用户的身份运行 eeprom 命令实现。
例如, eeprom 可以用来将启动时自检的 RAM 改成 64M :
L 4-3
server# eeprom selftest-#megs=64
在 Solaris x86 系统中,固件不直接支持 eeprom 这样的功能 : 每个 PC 厂商有不同的 BIOS 系统,使得很难做到这一点, 做用替代,用 bootenv.rc 文件中的变量集仿真内存。
要想看 OpenBoot 为你的系统中的固件发布的信息,可以下面这一命令: :
L 4-4
ok banner
SPARCstation 10, Type 5 Keyboard
ROM Rev. 2.4, 64 MB memory installed, Serial #6745644
Ethernet address 6:3:10:a:cc:4a HostID 5767686
如果 OpenBoot 的提示符不是 ok ( 如,它显业为 >> ) ,那么只需简单地键入 n 回到 ok 提示符:
L 4-5
>>
n
ok
Solaris 操作系统的第二个重要特性是通过高效的内核和用户程序模式设计,达到 up-time 最大化的目的。在一些非 Solaris 服务器的环境中,每次安装一个新应用时必须重起系统,或者需要重新配置内核。对 Solaris 系统来说,只在极少的情况下才需重起系统,因为应用程序从逻辑上与系统配置选项是分开的,许多系统级的配置选项可以在超级用户的 shell 中设置,例如,许多 TCP/IP 选项可以用下面的命令动动修改:
L 4-6
server# ndd /dev/tcp
在一些比较新的硬件配置中,甚至不需要重起就可以安装新的硬件,这些优点可以减轻系统管员的工作,因此受到新的 Solaris 管理员的欢迎。
(1) 系统 V 启动过程
从 OpenBoot 启动后, Solaris 有几个不同的操作模式,称为“运行等级”或“ init 状态”,之所以这么叫是因为常用 init 命令来改变运行等级,当然也可以用 init-wrapper 脚本(如关机)。这些 init 状态可以是单用户的也可以是多用户的,常常每一个状态都代表不同的管理目的,而且是完全不相关的(也就是说,一个系统任何时候只能在一个 init 状态上)。通常,一个设计成需不定期开机的 Solaris 系统将完成一系列预先定义好的步骤,以便启动为提供基本系统服务、主要的用户服务和可选应用服务所需的所有软件程序。这些服务一般只在 Solaris 系统运行在多用户状态时才提供,它们都通过运行控制 ( rc ) shell 脚本初始化。通常,在 Solaris 安装过程中会为管理员自动生成一个运行控制脚本,然而,如果你想安装第三方软件(比如数据库服务器),就需要在 /etc/init.d 目录下生成你自已的运行控制脚本,以便在系统启动时能自动加载这些服务。本章后面将全面介绍这个过程。
如果因为某些原因(例如,定期的电源损耗)系统需要断电或切换到一个特殊的管理模式来执行诊断测试,也可依据一系列预先定义好的控制脚本来杀死各个服务并保存用户数据。保证这些事件的执行顺序非常重要,因为这样才能保证用户数据的完整性。例如,对数据库服务器的操作通常关系到服务器端的写数据进程和后台的监听进程之间的通信,监听进程负责接受新的信息存储请求。如果这个后台进程没有在写数据进程之前关闭,它可能从网络客户端继续接受数据并将它存在一个已经被数据库关闭的缓存里,这将导致数据库以一种不协调的状态关闭,很可能会引起数据损坏或者记录丢失。图 4 - 1 说明了这个过程。 Solaris 管理员应利用他们的 shell 脚本知识严格管理系统的关机过程,就象利用运行控制脚本管理系统启动过程那样,这一点非常重要。
管理员应注意三种类型的启动方式。除了在超级用户 shell 下用下面命令发起的正常重起过程
L 4-7
server# shutdown
重配置启动关系到在 /dev 和 /devices 目录下重新组织设备信息,恢复启动关系到在系统对控制台输入的命令不做响应时对毁坏的文件进行保存和分析。在早年的 SPARC 系统中,当有新的硬盘加入系统时,常需要重新配置启动,在新一些的系统中就可能不需要这么做了,比如 E450 就有 hot-swapping 功能。在超级用户 shell 下,在发出 shuddown 命令前输入同的命令就可以执行重配置启动:
L 4-8
server# boot -r
at the OpenBoot monitor prompt, or by issuing the command:
server# touch /reconfigure
虽然在一个巨型系统中,硬件故障、内核模块冲突和不正确的内核参数时有发生,但恢复启动在 Solaris 系统中极少用到。如果在系统中发生了冲突经常会用堆栈跟踪,它利用内核的诊断器( kadb )可以提供跟踪系统错误原因的重要线索。
运行等级
虽然 Solaris 有八个 init 状态,但在正常操作中管理员只用得到其中的五个,它们是:
· 运行等级 S 这是一个用于系统管理任务和修复被损坏的文件系统的单用户 init 状态,可用这个命令 :
server# /usr/sbin/fsck
· 运行等级 2 除了 NFS exported network resources ,这个运行等级第一次转入多用户状态。
· 运行等级 3 在这个运行等级下,所有的用户都可以登录,并可利用所有系统和 NFS 网络资源。
· 运行等级 6 这个运行等级将停止操作系统运行并开始重起系统。
· 运行等级 0 在这个运行等级下操作系统将关机并确保可安全地关电。
在早一些的 SPARC 系弘中,要想安装新的硬件,比如磁盘驱动器、外设或内存模块,必须先让系统进入运行等级 0 ,但象 E450 这样新一些的系统,当新硬盘“热交换”到特定的驱动上去时可以继续在多用户 init 状态下运行。这也就是说,这些机器可能根本用不着进行运行等级 6 ,而且,连续开机几个月的状况也并不少见。
用户可以很容易地发现系统是在单用户运行等级 0 、 S 和多用户运行等级 3 ,运行等级 S 下将显示 Bourne shell 的缺省提示符 :
L 4-10
#
运行等级 0 将显示 OpenBoot 的提示符 :
L 4-11
ok
运行等级 3 显示如下提示:
L 4-12
server console login:
要想确定系统当前的运行等级,也可用下面的命令:
L 4-13
server# who -r
who 命令的输出也可以通过管道过滤去执行其它命令,具体命令决定与当前的运行等级,例如,如果一个数据库应用要求在本地服务器上有 NFS 空间,如果当前的运行等级不是 3 ,可以在数据库的初始化脚本中快速地查一下当前的运行等级:
L 4-14
#!/bin/sh
# Determine run-level
set ‘/usr/bin/who -r'
# Check third argument for current run-level
if [ $3 != "3" ]
then
echo 'Error: NFS services are not available under run level 3.'
echo 'NFS Volumes must be available to run this application.'
exit
fi
# else execute database initialization here
在表 4 - 1 中列出了所有运行等级,以及它们各自的运行控制脚本目录。
运行等级
描述
用户状态
运行控制脚本目录