标示系统的运行级别:
0:关闭Solaris操作环境和显示boot PROM ok提示符用于安全的关闭系统电源。
S or s:运行所有文件系统都被装配和可理解的单用户模式
1:要求系统运行在单用户管理状态,并且所有文件系统都可用
2:要求系统运行多用户操作。多个用户可以访问系统。所有系统守护进程都运行,除了NFS服务器的守护进程
3:要求系统运行多用户操作,并且NFS资源共享可用。这是在/etc/inittab中指定的默认运行级
4:这一级别还没有起用
5:停掉Solaris操作环境,并且关闭系统电源
6:停掉系统到0运行级,然后重新启动多用户操作,或者在/etc/inittab中指定默认的运行级。
决定系统当前的运行级
要决定一个系统当前的运行级,使用命令:
# who –r
. run level 3 Jun 9 08:30 3 0 S
更改运行级别:
运行级别是参考init状态的因为init命令能够转换运行级别。Init命令能够达到svc.startd要求的运行级别。
你能使用init命令手工的初始化运行级别的转化。你也能够通过命令shutdown halt reboot poweroff来改变运行级别。也可以通过svcadm命令,在系统启动的时候选择合适的里程碑达到运行级别的转化。
标示系统的启动阶段
总的来说当系统启动的时候,PROM监视着POST的运行检测系统的硬件和内存。如果没有错误发生,则开始auto-boot?参数,如果设置为true则,系统开始启动过程。
全部的启动过程包括下面描述的四个阶段:
Boot PROM阶段
启动程序阶段
内核初始化阶段
init阶段
Svc.startd阶段
boot PROM 阶段
PROM运行POST
boot PROM固件运行开机自检程序去检测系统的硬件和内存。
PROM显示系统识别标题,(比如模式类型,内存数量,PROM版本号,PROM序列号,网卡的mac地址和hostID)
boot决定启动设备读系统参数boot-device
boot PROM读默认启动设备上磁盘label定位的0扇区。
boot PROM发现boot程序在默认启动设备的PORM中
boot定位在启动设备上的bootblk上
boot从位于启动设备上的bootblk读入内存
启动程序阶段
bootblk读入第二启动程序,ufsboot从启动设备进入内存
ufsboot是通过Solaris实用程序installboot安装记录在bootblk中的
ufsboot定位和读入适当的两个部分的内核
内核是由两个片静态核心叫做genunix和unix组成的。Genunix是无约束平台的内核文件,而unix是指定指定平台的内核文件。
当ufsboot读入他们这两个文件到内存的时候,他们在正在运行的内核中是组合着的。
在32位系统上,两个部分的内核是位于目录/platform/’uname –m’/kernel中的
在64位系统上,两个部分的内核是位于目录/platform/’uname –m’/kernel/sparcv9中的
solaris10 sparc只运行64位。
Kernel初始化阶段
Kernel读配置文件/etc/system
Kernel初始化自己然后开始加载modules
kernel使用ufsboot去读文件。当他读入足够的模块去装配root文件系统,他不镜像ufsboot程序。并且继续
kernel启动/etc/init进程。
SunOS kernel由小的,静态的core(genunix和unix)和许多动态可承载的内核模块组成。
modules以由设备驱动,文件系统,流,也有其他类型的用于在系统中的指定任务。
包含kernel代表性的内核模块位于目录/kernel和/usr/kernel。依赖于平台的模块则位于/platform/’uname –m’/kernel和/platform/’uname –I’/kernel目录
下列描述模块子目录的类型包含在/kernel,/usr/kernel,/platform/’uname –m’/kernel或者/platform/’uname –I’/kernel目录
Drv/sparcv9 设备驱动
Exec/sparcv9 处理文件格式
Fs/sparcv9 文件系统类型
Misc/ sparcv9混合模块 比如:usb
Sched/ sparcv9 计划类
Stromd/ sparcv9 字符流模式
Sys/ sparcv9 系统呼叫
/kernel/drv/sparcv9包含系统启动时候所需要的所有设备驱动。/usr/kernel/drv/sparcv9用于其他设备的驱动。
模块是自动读入的。如果需要通过一个应用程序,同样需要每一个在启动时间或者在需求上自动读入模块。当模块不再使用的时候,就从基本内存中释放出来以用于其他需要的任务。
当启动完成以后,设备驱动是被加载的。这个进程是被自动配置的。因为一些设备驱动是在需要的时候被自动加载的。
/etc/system和kernel的配置
/etc/system文件
/etc/system文件为修改控制系统启动的时候kernel加载的参数和module。默认情况下,文件所有的行是以命令方式输出的。
修改和配置kernel的方式要求编辑/etc/system。修改这些参数是为了系统能够更优化的运行。
Ufsboot包含了默认的kernel启动的设置,但是可以通过修改/etc/system来进行修改。
所有的关于/etc/system的修改必须在重新启动以后生效。
/etc/system文件控制以下几个方面:
在启动的时候,为默认的模块搜索路径。
root类型和设备
在启动的时候,被自动读入的模块
在第一次访问的时候,模块可以在启动时间强制的读入。
以新数值代替默认内核的参数值
/etc/system文件被分成5个部分:
moddir
设置默认读入内核模块的搜索路径。用户可以列出搜索的共同的目录,通过空格和冒号进行区分。
root设备和root文件系统设置:
设置root文件系统类型去列出数值。默认的是rootfs:ufs
设置root设备。启动程序所在的默认的是设备的物理路径名。物理路径名是平台和依赖的设置。比如:rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a
exclude
在内核初始化期间不允许读的内核模块。比如exclude:sys/shmsys
forceload
在内核初始化期间强制读入的内核模块。比如forceload:drv/vx
当他在运行时间第一次访问服务的时候,默认的动作是自动的读内核模块
set
改变内核参数变更系统的运做。比如:set maxusers=40
在编辑/etc/system文件之前,用户需要建立备份的拷贝。如果用户在文件中输入错误的数值,系统将不能启动。
下面显示如何拷贝最初的/etc/system文件到一个备份文件。然后编辑/etc/system文件。
# cp /etc/system /etc/system.orig
# vi /etc/system
如果一个启动过程因为/etc/system文件出错,就输入交互式启动命令:boot –a。当需要输入系统文件名时,输入备份的文件名或者输入dev/null。一个空的设置文件。
Init阶段
启动的最后阶段就是init阶段了。在这个阶段init启动svc.startd来负责启动和停止指定的服务。/sbin/init阶段使用的信息存储在/etc/inittab中。
/etc/inittab文件
/etc/inittab文件的任何一行都是以这样的方式出现的:
Id:rstate:action:process
Id 为条目定义的2个字符
Rstate 条目应用的运行级别
Action 定义进程是如何运行的,关于action更多的描述,请参考man inittab
Process 定义命令的运行
下面举一个inittab文件中一行的列子:
Ap::sysinit:/sbin/autopush –f /etc/iu.ap
Svc.startd进程
Svc.startd进程是为smf控制进程的启动和重新启动的。这个进程的主要角色就是为了达到相应的运行级别而启动相应的进程。在以前的版本中这个工作是由init来完成的。
Svc.startd使用的决定里程碑和决定要启动的进程的信息存储于/var/svc/manifest目录下。
/var/svc/manifest/milestone目录下的文件为:
Single-user.xml
Multi-user.xml
Multi-user-server.xml
Network.xml
Name-services.xml
Sysconfig.xml
这些.xml文件可以参考其他的xml文件在/var/svc/manifest的子目录下包含的运行的命令,比如:
/sbin/rc2
/lib/svc/method/fs-local
控制legacy启动进程
Solaris OS提供了一系列legacy脚本停止和启动进程,代表性的是结合运行级别或者里程碑
/sbin目录
任何级别的运行脚本存在与/sbin目录,一些脚本的硬连接也在这个目录下。
这些脚本的处理是通过svc.startd进程设置变量,测试环境,为运行级别呼叫其他脚本的启动和停止。
Rc0,rc5,rc6脚本都是一些其他的硬连接。注意任何一个脚本被安排为同样的接点号。比如:
Ls –li /sbin/rc*
可以看到rc0 ,rc5,rc6是同样的接点号。
Solaris OS提供同样的一系列RC脚本在/etc目录下。这些脚本是连接到/sbin下的。
/sbin/rc0:/etc/rc0.d/K* /etc/rc0.d/S*的运行。
/sbin/rc1:运行/etc/rc1.d/S*脚本。
/sbin/rc2:运行/etc/rc2.d/K* /etc/rc2.d/S*
/sbin/rc3:运行/etc/rc3.d/K* /etc/rc3.d/S*
/sbin/rc5:/etc/rc0.d/K* /etc/rc0.d/S*的运行
/sbin/rc6:/etc/rc0.d/K* /etc/rc0.d/S*的运行
/sbin/rcS:运行/etc/rcS.d
在/etc/rc#.d中以S开头的为启动脚本,以K开头的为停止脚本。
/etc/init.d目录
运行控制脚本位于/etc/init.d目录中。
运行控制脚本/etc/init.d/samba是一个对应于/etc/rc3.d/S90samba的硬连接。
你也可以启动和关闭进程。
/etc/init.d/samba stop
/etc/init.d/samba start
使用SMF来停止和启动服务
使用svcs命令来监视SMF服务的运行情况。它的使用是为了测试服务的状态和服务之间相互之间的关系。
#svcs
Svcs命令也可以指定服务来观察服务的状态。
#svcs svc:/system/console-login:default
Svcs也可以显示服务之间的依存关系,使用-d和-D参数来查看。-d:本服务所依靠的其他服务。-D:其他服务依靠本服务。
使用svcadm改变服务的运行状态。
下面举一个列子:
#pgrep –fl cron
180 /usr/sbin/cron
#svcs cron
STATE STIME FRMI
Online 14:38;20 svc:/system/cron:default
#svcadm –v disable system/cron:default
#svcs cron
STATE STIME FRMI
disable 14:38;20 svc:/system/cron:default
#svcadm –v enable system/cron:default
#svcs cron
STATE STIME FRMI
Online 14:38;20 svc:/system/cron:default
#pgrep –fl cron
180 /usr/sbin/cron
在使用svcadm在修改参数状态的时候,也可以使用-t参数来进行临时调整。
#svcadm –v disable -t system/cron:default
使用svcs命令决定服务为什么不能运行。
使用svcs命令还能进行服务的troubleshoot,检测服务为什么不能运行。
#svcs –x cron
可以通过查看/var/svc/log/system-cron:default.log这个文件来了解更加详细的信息。
操作非SMF管理的服务
如果FMRI的前缀是lrc的服务,这钟服务不在SMF管理中。在这样的情况下启动和停止服务,并不需要改变运行级别。这种脚本服务需要手工运行。运行脚本非SMF管理的在/etc/init.d目录下。
比如:
#svcs |grep vol
Legacy_run 14:38:57 lrc:/etc/rc3_d/S81volmgt
#pgrep –lf vold
#ls –l /etc/init.d/volmgt
#pgrep –lf vold
#/etc/init.d/volmgt start
#pgrep –lf vold
#svcs |grep vol
创建新的服务脚本
你能够创建新的服务脚本来开始和停止附加进程或者自定义的系统服务。
举例来说,不如数据库服务是需要手工进行起停的。你可以创建一个数据库启动脚本进行数据库服务的自动启动和停止。
把正确的进程加到合适的SMF脚本中。这个过程相当的复杂。通常的步骤要求列出下面详细的内容:
为你的服务决定进程的开始和停止。
建立服务名和服务属于的类型。
决定你的服务运行的多种实例。
标示着这个服务和其他服务之间的依存关系。
如果脚本要求停止和启动进程,创建的脚本应该位于local目录比如:/usr/local/svc/method
为你的服务创建确切的文件。这个文件描述着这个服务和其他服务之间的依存关系。服务确切的存储是通过svccfg命令和启动时间来决定的。
通过svccfg命令来结合SMF服务。
下面是一个显示的例子:
#vi /usr/local/svc/method/newservice
#chmod 544 /usr/local/svc/method/newservice
#cd /var/svc/manifest/site
#vi newsevice.xml
#svccfg import /var/svc/manifest/site/newsevice.xml
#svcs newservice
#svcadm –v disable site/newsevice
#svcs newservice
#svcadm –v enable site/newsevice
#svcs newservice
#svcs –d milestone/multi-user:default
增加非SMF管理的脚本服务的启动和停止。
增加非SMF控制的脚本只需要在/etc/init.d创建脚本然后在连接到合适的/etc/rc#.d下就可以了。
举例来说:
#vi /etc/init.d/filename
#chmod 744 /etc/init.d/filename
#chgrp sys /etc/init.d/filename
#cd /etc/init.d
#ln filename /etc/rc#.d/S##filename
# ln filename /etc/rc#.d/K##filename
#ls –li /etc/init.d/filename
#ls –li /etc/rc#.d/S##filename
#ls –li /etc/rc#.d/K##filename
# /etc/init.d/filename start
执行系统关闭
用户在已知电源会关闭或者移动系统到一个新的位置的时候,可以关闭Solaris操作环境以执行管理员任务或者维护活动。
Solaris操作环境需要有秩序的关闭程序,用来停止进程,将内存的数据保存到磁盘和卸载文件系统。
根据工作的类别,用户可以决定如何关闭系统
下面是不同类别的系统关闭
关闭系统到单用户模式
关闭Solaris操作环境,显示ok提示符
关闭系统到电源关闭
关闭系统并且自动重新启动到多用户模式
用于关闭系统的可用命令包括:
/sbin/init
/usr/sbin/shutdown
/usr/sbin/init命令
用户可以使用init命令去关闭,掉电或者重新启动系统。它通知svc.startd进程更改到相应的运行级别。Svc.startd进程达到相应的里程碑,最终处理rc0的kill脚本。
关闭系统到单用户状态下,使用运行级别S或者1。
# init S
停止Solaris操作环境并显示ok提示符
# init 0
关闭系统电源
# init 5
关闭系统并且重新启动到多用户模式
# init 6
/usr/sbin/shutdown命令
shutdown命令是一个调用init去关闭,掉电或者重新启动的脚本。他不能执行rc0的kill脚本去关闭进程。不象init命令,shutdown命令做下列操作:
。通报登陆进系统的用户即将关机
。默认延迟60秒
。给你可以向用户描述理由的能力
命令格式
shutdown [-y] [-g 延迟时间] [-I init状态] [描述信息]
-y选项是用于提前回答全部shutdown问题。
-g 延迟时间允许root改变默认60秒的数字
-i init状态指定init状态,默认是S
强行关闭系统的命令
下列命令执行系统的强行关闭,而并不处理rc0的kill脚本。
#halt
#poweroff
#reboot
设置默认的启动时间里程碑
使用svcadm命令来控制svc.statrd进程控制的启动里程碑。默认的里程碑全部都是指定all方式的话,系统中所有的服务都是启动的。
确定svc.startd进程下次启动到多用户状态里程碑,在启动前执行下面的命令:
#svcadm –v milestone –d multi-user-server:default
使用svcadm可以的启动级别包括:
All
None
Svc:/milestone/single-user:default
Svc:/milestone/multi-user:default
Svc:/ milestone/ multi-user-server:default
服务存储的数据库
数据库是存储在/etc/svc目录下。/lib/svc/bin/restore_repository工具能够修复和恢复损坏的数据库。
阅读(3274) | 评论(1) | 转发(0) |