您的位置:首页 > 其它

Solaris boot过程详解

2013-07-06 16:35 141 查看
正确理解操作系统的boot过程对系统管理员非常有帮助,在系统出现问题无法完成boot过程中,我们通过对正常boot过程的理解能大致判断问题所在。但是由于故障现象的错综复杂往往需要加以仔细分析才能找到症结所在,本文通过Solaris boot过程的详细介绍,以帮助系统管理员正确理解系统和判断故障并派出故障。一、boot过程详解以下具体讲解系统引导的整个过程,主要以SPARC平台为例:lPoweron 过程为服务器打开电源开关需要注意以下几个部分,几乎所有服务器都带有锁来固定几个状态:电源开关正常位置、锁住电源开关、开机诊断、关闭电源开关,开电之前一定要确认钥匙的位置。lPOST过程服务器电源打开后,系统将首先进入一个上电自检的过程。diag-switch?开关参数如果设置为true,那么将可以从服务器的串口看到详细的输出。diag-level参数决定着POST的过程,缺省设置为min,设置为max时候,串口能看到更多的信息输出,但是系统进入OBP而引导OS的时间也将大大推延了!在POST过程中,系统将对所有硬件一一作测试诊断,对于系统管理员来说,有可疑的硬件故障就有可能从POST过程中诊断出来。l系统初始化Init SYSTEMPOST结束后,系统将进一步进行初始化,该过程又可以具体分为以下几个部分:oOBP:OpenBoot PROM定制了系统的一些信息,自检结束后,系统进入OBP,同时将MMU(memory management unit)设为有效(enable)oNVRAM:use-nvramrc?参数设置为true的话,系统将读取NVRAMRC,并执行之,这里面可能包括一些引导设备的信息,比如说如果系统盘使用vxvm或者DiskSuite封装的,将需要修改这些脚本来指明引导设备。oProbe All:这将检测所有的SCSI或者其它类型的磁盘和设备oInstall Consle:系统在此状态下,如果安装了键盘和鼠标以及显示器的话,显示器将有输出并点亮,如果只有串口的话,那么此时串口已经作为console台可以进行访问了。oBanner:决定console台后,系统将在console台输出Banner信息oCreate Devices Tree:所有硬件设备的设备树将在此时由OBP程序创建,这个非常重要,这对后面的引导OS起着非常重要的作用。auto-boot?

OBP程序创建了设备树后,系统将进入引导OS的过程,PROM参数auto-boot?参数设置为true,boot过程将自动进行,如果为false,boot过程将中止而进入OBP的ok〉提示符下,由用户手工来完成boot。注意:在auto-boot?设置为true的情况下,引导过程将自动执行,引导设备是由boot-device指定的,但是在diag-switch?被设置为true的时候,引导自动进行时的引导设备将由diag-device来决定。bootblk

OBP程序找到引导设备后,就直接将引导设备上所存储的bootblk调入内存进行执行,如果该引导块不存在或者已经损坏,系统将无法完成boot,Solaris 8会返回一条信息,The file just loaded can not to be executed。这说明需要重新创建bootblk,方法非常简单,用光驱引导系统,将原盘系统根mount起来,使用installboot命令来重新生成bootblk。ufsboot:

执行完bootblk后系统将执行第二个程序/platform/`arch –k`/ufsboot ,该程序将UNIX的kernel的image文件调入内存,如果该文件损坏的话,系统将无法继续引导,返回一条类似的信息,a bootlbk:Can’t find the boot program。kernel:

系统的影像image文件调用和运行,在32位和64位系统将调用不同的文件,32位系统将涉及以下两个文件:1./platform/`arch –k`/kernel/unix2./kernel/genunix64位系统将涉及以下两个文件1. /platform/`arch –k`/kernel/sparcV9/unix2. /kernel/genunixkernel的image文件调用进内存并作进一步的初始化,而且将加载各种模块,使用ufsboot读取各文件,在mount根系统之前将所需模块全部调用进内存。在这点,ufsboot不在起作用,而kernel将使用自己的驱动,此时如果根文件系统存在问题,系统将无法继续引导。/etc/system:

/etc/system文件将由kernel从根系统从读取,该文件定制了系统参数:以下是几种定制系统参数的option:moddir: 用来指定和改变系统kernel模块的路径

forceload: 强制将系kernel模块调用进OS

exclude:用以执行一个特定的系统模块

rootfs:用以指定系统根系统类型,ufs文件系统为缺省值

rootdev: 指定根系统设备物理路径

set: 设置kernel可调节的系统参数

如果需要修改/etc/system文件,强烈建议先做拷贝然后再编辑,否则该文件错误严重的情况下将导致系统无法完成boot,而有了备份,那么在系统引导时候可以使用-a的boot option来进行选择/etc/system.bak来引导系统,如果没有做备份就必须使用boot cdrom –s的方式将系统根系统mount起来再手工修改错误的/etc/system文件。kernel initialized:

kernel按照系统文件参数完成所有的module的调用后,首先创建系统的第一进程sched,其进程号为0,而该进程有时候被叫做“swapper”。init:

init进程是第二个被创建的,该进程创建后读取/etc/inittab文件和/etc/default/init文件,这两个文件对系统的定制作了一些规定,比如说系统的缺省运行级别,系统时区和语言环境等等,该进程是系统以后所有进程的父进程。rc scripts:

init进程创建以后,系统就根据/etc/inittab文件中指定的运行级别来执行相关的启动脚本,所有的启动rc脚本都存放在/etc/rc#.d目录下,不同级别执行不同的脚本以启动与级别相对应的进程。需要注意的是/etc/rc#.d目录下的脚本都将被执行,首先执行K打头的脚本,然后执行S打头的脚本,并安装ASCII码的顺序执行。以下是我在豆丁发布的该文档全文,请帮我刷一刷,这样我能赚点豆元,就可以多下点文档了:http://www.docin.com/p-550964558.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: