一. 启动过程
启动过程包含下面的一些步骤:
1.1启动一个系统的初始步骤是上电自检(Power On Self Test,POST)。其目的是验证基本硬件是否处于正常的工作状态。同时初始化内存、键盘、通信,以及音频设备。您可以看到在屏幕上显示了所有的这些设备。在这个步骤中,您可以按下功能键,以选择不同的启动列表。这个阶段中所显示的 LED 值是模型特定的。硬件和软件方面的问题都可能使得系统无法启动。
注意:基于 MCI 体系结构的旧系统在这个步骤之前还将执行一个附加的步骤,即所谓的内建自检(Built In Self Test,BIST)。对于基于 PCI 体系结构的系统,不再需要执行这个步骤。
1.2 系统只读存储器(System Read Only Storage,ROS)对于每种类型的系统来说都是特定的。它是启动 AIX 5L Version 5.3 所必需的,但是它并不为启动工作构建所需的数据结构。它将定位和加载引导 (bootstrap) 代码。系统 ROS 中包含通用的启动信息,并且是独立于操作系统的。
1.3 软件 ROS(也称为引导程序)构成了 IPL 控制块,它与 AIX 5L Version 5.3 是兼容的,用于接收控制和构建 AIX 5L 的特定启动信息。将在内存中定位一种特殊的文件系统,并创建一种名为 RAMFS 的文件系统。然后,软件 ROS 定位、加载、并将控制权交给 AIX 5L 启动逻辑卷 (BLV)。软件 ROS 是基于计算机类型的 AIX 5L 信息,并且负责完成计算机准备工作,以使得它能够启动 AIX 5L 内核。
1.4 可以从 /usr/lib/boot 目录中获得 BLV 中所包含的文件的完整列表。其中最重要的组件包含以下内容:
(1)AIX 5L 内核
(2)在启动过程中调用的启动命令,如 bootinfo 和 cfgmgr
(3)ODM 的一个简化的版本。在 hd4 可供使用之前,需要对许多设备进行配置,所以它们的相应方法必须存储在 BLV 中。这些设备都被标记为预定义设备 (PdDv) 中的基础设备。
(4)rc.boot 脚本
1.5 加载 AIX 5L 内核,并接管控制权。系统将在 LED 面板上显示 0299。前面所有的代码都是与硬件相关的。通过配置设备和启动 init 进程,内核将完成启动过程。在这个阶段中所显示的 LED 代码都是通用的 AIX 5L 代码。
1.6 到此为止,系统对硬件进行了检测、找到了 BLV、创建了 RAMFS,并且从 BLV 中启动了 init 进程。但是尚未激活 rootvg。从现在开始,将调用三次 rc.boot 脚本,并且每次都传递不同的参数。
1.6.1 启动阶段 1
在这个阶段中,将执行下面的步骤:
(1)从 RAMFS 启动的 init 进程将执行启动脚本 rc.boot 1。如果出于某种原因,init 进程执行失败,那么将在 LED 显示屏上显示代码 c06。
(2)在这个阶段中,将调用 restbase 命令,以便将 ODM 的部分镜像从 BLV 复制到 RAMFS。如果这个操作成功完成,那么 LED 显示屏将显示 510;否则,将显示 LED 代码 548。
(3)在执行了该操作之后,cfgmgr -f 命令将从简化的 ODM 中读取 Config_Rules 类。在这个类中,将属性 phase=1 的设备认为是基础设备。基础设备是访问 rootvg 所需的所有设备。例如,如果 rootvg 位于某块磁盘中,那么必须对从主板到磁盘之间的所有设备进行初始化。调用相应的方法,以便能够在启动阶段 2 中激活 rootvg。
(4)在启动阶段 1 结束后,将调用 bootinfo -b 命令以确定最后的启动设备。在这个阶段中,LED 将显示 511。
1.6.2 启动阶段 2
在启动阶段 2 中,向 rc.boot 脚本传递的参数为 2。在这个阶段中,将执行下面的这些步骤:
(1)可以使用 varyonvg 命令(名为 ipl_varyon 命令)的特殊版本来激活 rootvg 卷组。如果这个命令执行成功,那么系统将显示 517;否则,将显示下面 LED 代码中的某一个:552、554、或者 556,并且停止启动过程。
(2)使用 fsck -f 命令来检查根文件系统 hd4。该操作将验证在上一次关机之前是否已经干净地卸载了这个文件系统。如果这个命令执行失败,那么系统将显示代码 555。
(3)将根文件系统 (/dev/hd4) 装入到 RAMFS 中的临时装入点 (/mnt)。如果这个操作执行失败,那么在 LED 显示屏中将显示 557。
(4)使用 fsck -f 命令检查 /usr 文件系统,然后进行装入。如果这个操作执行失败,那么 LED 将显示 518。
(5) 使用 fsck -f 命令检查 /var 文件系统,然后进行装入。使用 copycore 命令检查是否发生了转储。如果发生了转储,那么从缺省转储设备 /dev/hd6 复制到缺省复制目录 /var/adm/ras。然后,卸载 /var。
(6)激活 rootvg 的主分页空间 /dev/hd6。
(7)调用 mergedev 进程,并将 RAM 文件系统的所有 /dev 文件复制到磁盘。
(8)将 RAM 文件系统中所有自定义的 ODM 文件复制到磁盘。对于 hd4 和 hd5 中的两个 ODM 版本,现在进行同步。
(9)最后,将 rootvg(磁盘)中的根文件系统装入到 RAMFS 的根文件系统。rootvg 文件系统的装入点已变得可用。现在,再次将 rootvg 的 /var 和 /usr 文件系统装入到它们的正常装入点。
在这个阶段中,不能使用控制台,所以所有的启动消息都将复制到 alog。alog 命令可以对日志进行维护和管理。
1.6.3 启动阶段 3
在阶段 2 完成之后,激活了 rootvg,并将执行下面的步骤:
(1)启动 /etc/init 进程。它将读取 /etc/inittab 文件,并使用参数 3 调用 rc.boot。
(2)装入 /tmp 文件系统。
(3)通过调用 syncvg 命令(将该命令启动作为一个后台进程)对 rootvg 进行同步。因此,将对 rootvg 中所有过时的分区进行更新。在这个阶段中,将显示 LED 代码 553。
(4)在这个阶段中,将调用 cfgmgr 命令;如果系统以正常模式进行启动,那么将使用选项 -p2 来调用 cfgmgr 命令;如果系统以服务模式进行启动,那么将使用选项 -p3 来调用 cfgmgr 命令。cfgmgr 命令将从 ODM 读取 Config_rules 文件,并且调用与 phase=2 或者 phase=3 相对应的所有方法。所有其他非基础设备的设备,并不在这里进行配置。
(4)接下来,通过调用 cfgcon 命令对控制台进行配置。在配置了控制台之后,如果没有设置 STDOUT 重定向,那么启动消息将发送到控制台。然而,可以在 /var/adm/ras/conslog 中找到所有遗漏的消息。此时,可能显示的 LED 代码包括:
1)c31:控制台尚未配置。提供相应的指令以选择控制台。
2)c32:控制台是 LFT 终端。
3)c33:控制台为 TTY。
4)c34:控制台为磁盘中的文件。
(5)最后,使用 savebase 命令对 BLV 中的 ODM 与 / (root) 文件系统中的 ODM 进行同步。
(6)启动 syncd 守护进程和 errdemon。
(7)LED 显示屏将关闭。
(8)如果文件 /etc/nologin 存在,则将其删除。
(9)如果 CuDv 中有设备被标记为缺失,那么将在控制台中显示一条消息。
(10)消息“System initialization completed”发送到控制台。rc.boot 执行完成。进程 init 将继续处理 /etc/inittab 中的下一条命令。
二. 系统初始化
在系统启动过程中,在预初始化过程中装入根文件系统之后,将发生下面这些事件:
(1)作为启动过程中的最后一个步骤,运行 init 命令。
(2)init 命令尝试读取 /etc/inittab 文件。
(3)如果 /etc/inittab 文件存在,那么 init 命令将尝试在 /etc/inittab 文件中查找 initdefault 条目。
1)如果 initdefault 条目存在,那么 init 命令使用指定的运行级别作为初始的系统运行级别。
2)如果 initdefault 条目不存在,那么 init 命令将请求用户从系统控制台 (/dev/console) 输入一个运行级别。
3)如果用户输入 S、s、M、或者 m 运行级别,那么 init 命令将进入维护运行级别。只有这些运行级别不需要经过正确格式化的 /etc/inittab 文件。
(4)如果 /etc/inittab 文件不存在,那么 init 命令在缺省情况下将使系统进入维护运行级别。
(5)init 命令每隔 60 秒将再次读取 /etc/inittab 文件。如果在 init 命令上一次读取 /etc/inittab 文件之后,其中的内容发生了更改,那么将执行 /etc/inittab 文件中的新命令。
2.1 /etc/inittab 文件
/etc/inittab 文件用于控制初始化过程。
/etc/inittab 文件提供了相应的脚本,以使得 init 命令的角色成为通用的进程调度器。init 命令的进程调度活动中的主要进程是 /etc/getty 线路进程,它将启动单独终端线路。通常由 init 命令进行调度的其他进程包括守护进程和 Shell。
/etc/inittab 文件由一些与位置无关的条目组成,它们的格式如下所示:
Identifier:RunLevel:Action:Command
每个条目之间由一个换行符进行分隔。换行符前面加上一个反斜杠 (/) 表示继续该条目。在 /etc/inittab 文件中,对于条目的数目没有任何限制(但不能超过最大的条目大小)。最大的条目大小为 1024 个字符。
条目字段包括:
(1)Identifier,由一到十四个字符组成的字段,唯一地标识一个对象。
(2)RunLevel,可以对该条目进行处理的运行级别。
运行级别具有下面的属性:
1)运行级别有效地对应于系统中的进程配置。
2)可以为每个由 init 命令启动的进程分配一个或者多个运行级别(该进程可以存在于其中)。
3)运行级别使用数字 0 到 9 进行表示。例如,如果系统处于运行级别 1,那么只有那些在运行级别字段中包含 1 的条目才会启动。
4)当您请求 init 命令更改运行级别时,在运行级别字段中不包含匹配条目(对于目标运行级别)的所有进程都将接收到一个警告信号 (SIGTERM)。在使用删除信号 (SIGKILL) 强行结束这些进程之前,有 20 秒钟的过渡期。
5)通过使用从 0 到 9 的任意组合,可以选择多个运行级别,从而在运行级别字段中为一个进程定义多个运行级别。如果没有指定运行级别,那么就假定该进程在所有的运行级别中都是有效的。
6)在运行级别字段中,还可能出现其他四种取值,即使它们并不是真正的运行级别:a、b、c 和 h。仅当使用 telinit 命令请求它们运行时(无论系统当前运行级别如何),才会处理那些运行级别字段中包含这些字符的条目。它们与运行级别的不同之处在于,init 命令不可能进入到运行级别 a、b、c 或者 h。另外,任何这些进程的执行请求都不会更改当前运行级别。而且,在 init 命令更改级别时,不会终止以 a、b 或者 c 命令开头的进程。只有在下面三种情况下才会终止它们:在 /etc/inittab 文件中,它们所在行的操作字段被标记为 off,从 /etc/inittab 中完全删除它们所在的行,或者 init 命令进入到单用户模式。
(3)Action,用于告诉 init 命令如何处理在进程字段中指定的进程。init 命令能识别下列的操作:
1)respawn:如果进程不存在,则启动该进程。不需要等待它的结束(继续扫描 /etc/inittab 文件)。当进程中止时,重新启动该进程。如果该进程已经存在,则什么也不做,继续扫描 /etc/inittab 文件。
2)wait:当 init 命令进入到与该条目的运行级别相匹配的运行级别时,启动该进程,并等待它的结束。当 init 命令处于相同的运行级别时,所有后续对 /etc/inittab 文件的读取操作都将导致 init 命令忽略这个条目。
3)once:当 init 命令进入到与该条目的运行级别相匹配的运行级别时,启动该进程,并且不需要等待它的结束。当它中止时,不重新启动该进程。当系统进入一个新的运行级别,并且该进程的运行来自前一个运行级别更改时,不重新启动该程序。
4)boot:仅在系统启动时(即在系统启动的过程中当 init 命令读取 /etc/inittab 文件的时候)处理该条目。启动该进程,不需要等待它的结束,并且当它中止时,不重新启动该进程。为了使得该指令有意义,运行级别应该为缺省值,或者它必须与启动时 init 命令的运行级别相匹配。对于系统硬件重新启动之后的初始化功能来说,这种操作是非常有价值的。
5)bootwait:在系统启动之后,当 init 命令第一次从单用户进入到多用户状态时,处理该条目。启动该进程,等待它的结束;并且当它中止时,不重新启动该进程。如果 initdefault 为 2,那么在启动之后运行该进程。
6)powerfail:仅当 init 命令接收到电源故障信号 (SIGPWR) 时,才执行与这个条目相关联的进程。
7)powerwait:仅当 init 命令接收到电源故障信号 (SIGPWR) 时,才执行与这个条目相关联的进程,并且在继续处理 /etc/inittab 文件之前,必须等待它结束。
8)off:如果与这个条目相关联的进程目前正在运行,那么发送警告信号 (SIGTERM),等待 20 秒钟,然后使用删除信号 (SIGKILL) 终止该进程。如果该进程没有运行,则忽略这个条目。
9)ondemand:从功能上看,与 respawn 是相同的,但是这个操作适用于 a、b 或者 c 值,而不是运行级别。
10)initdefault:仅在 init 命令最初被调用时,才扫描包含这个操作的条目。init 命令使用这个条目(如果它存在的话)来确定最初要进入的运行级别。通过使用运行级别字段中所指定的最高运行级别,就可以实现这一点,并使用它作为其初始状态。如果运行级别字段为空,那么将其解释为“0123456789”:因此,init 命令将进入运行级别 9。另外,如果 init 命令在 /etc/inittab 文件中没有找到 initdefault 条目,那么将要求用户在启动时指定一个最初的运行级别。
11)sysinit:当 init 命令在登录之前尝试访问控制台时,将执行这种类型的条目。在正常情况下,这个条目仅用于初始化设备(init 命令可能会对这些设备询问有关运行级别的问题)。执行这些条目,并等待它们结束,然后再继续。
(4)Command:要执行的 Shell 命令。整个命令字段以 exec 作为前缀,然后以 sh -c exec command 的形式传递给一个使用 fork 系统调用生成的 sh。任何合法的 sh 命令语法都可以出现在这个字段中。可以使用 # comment 语法插入注释。
getty 命令将覆盖 /etc/inittab 文件中出现在它之前的任何命令的输出。要将这些命令的输出记录到启动日志,可以使用管道将它们的输出传递给 alog -tboot 命令。
在 init 命令处理 inittab 条目时,stdin、stdout 和 stderr 文件描述符可能是不可用的。向 stdout 或者 stderr 进行写入操作的任何条目都可能无法按照预期的方式工作,除非它们将自己的输出重定向到一个文件或者 /dev/console。
对于修改 /etc/inittab 文件中的记录,仅支持下列的命令:
(1)mkitab:将记录添加到 /etc/inittab 文件。
(2)lsitab:列出 /etc/inittab 文件中的记录。
(3)chitab:更改 /etc/inittab 文件中的记录。
(4)rmitab:删除 /etc/inittab 文件中的记录。
例如,向 /etc/inittab 文件添加一条记录,以便在运行级别 2 中运行 find 命令,并且在它结束后再次启动它:
1. 运行 ps 命令,并显示那些仅包含单词 find 的进程:
# ps -ef | grep find root 19750 13964 0 10:47:23 pts/0 0:00 grep find # |
2. 使用 mkitab 命令向 /etc/inittab 添加一条名为 xcmd 的记录:
# mkitab "xcmd:2:respawn:find / -type f > /dev/null 2>&1" |
3. 使用 lsitab 命令显示新的记录:
# lsitab xcmd xcmd:2:respawn:find / -type f > /dev/null 2>&1 |
4. 显示进程:
# ps -ef | grep find root 28972 13964 0 11:07:33 pts/0 0:00 grep find |
5. 结束 find 进程:
# kill 25462 |
6. 显示进程:
# ps -ef | grep find root 23538 13964 0 10:58:24 pts/0 0:00 grep find root 28966 1 4 10:58:21 - 0:00 find / -type f |
由于 action 项被设置成为了 respawn,所以一个新的 find 进程(上面显示的 28966)在前一个进程结束后又被系统启动了。
这个进程会被不断的重新启动,除非把 action 项的设置修改,如:
1. 把 xcmd 这条记录的 action 项的值从 respawn 修改为 once:
# chitab "xcmd:2:once:find / -type f > /dev/null 2>&1" |
2. 显示进程:
# ps -ef | grep find root 20378 13964 0 11:07:20 pts/0 0:00 grep find root 28970 1 4 11:05:46 - 0:03 find / -type f |
3. 结束 find 进程:
# kill 28970 |
4. 显示进程:
# ps -ef | grep find root 28972 13964 0 11:07:33 pts/0 0:00 grep find |
可以看到 find 进程没有再被系统启动。
要从 /etc/inittab 文件中删除这条记录,您可以使用 rmitab 命令。例如:
# rmitab xcmd # lsitab xcmd # |
2.2 /etc/inittab 条目的顺序
在 /etc/inittab 文件中,基本条目按照如下所示的方式进行排序:
(1)initdefault
(2)sysinit
(3)Powerfailure Detection (powerfail)
(4)Multiuser check (rc)
(5)/etc/firstboot (fbcheck)
(6)System Resource Controller (srcmstr)
(7)Start TCP/IP daemons (rctcpip)
(8)Start NFS daemons (rcnfs)
(9)cron
(10)pb cleanup (piobe)
(11)getty for the console (cons)
必须在 etc/inittab 文件的开始处附近启动系统资源控制器(System Resource Controller,SRC),因为需要 SRC 守护进程来启动其他进程。因为 NFS 需要 TCP/IP 守护进程正确地运行,所以应该在启动 NFS 守护进程之前启动 TCP/IP 守护进程。/etc/inittab 文件中的条目根据依赖关系进行排序,这意味着,如果一个进程 (process2) 的正常运行需要另一个进程 (process1) 的存在,那么在 /etc/inittab 文件中,process1 的条目应该出现在 process2 的条目之前。
三. 如何对无响应的启动过程进行恢复
如果您的系统无法启动,AIX 5L 提供了一些工具和方法以便对挂起的启动过程进行恢复。
这个部分将介绍可能导致系统在启动过程中出现挂起的情况。
3.1 bootlist 命令
可以更改系统查找相关设备(以获得其启动代码)的顺序。bootlist 命令显示并改变可用于系统的启动设备列表。该命令的一般语法规则如下所示:
bootlist [ { -m Mode } [ -r ] [ -o ] [ [ -i ] | [ [ -f File ]
[ Device [ Attr=Value ... ] ... ] ] ]
bootlist 命令最常使用的一些标志。
标志 | 说明 |
-m mode | 指定所要显示或改变的启动列表。模式变量的可能取值为 normal、service、both 或者 prevboot。 |
-f File | 表示从指定的文件名读取设备信息。 |
-i | 表示由 -m 标志指定的设备列表应该失效。 |
-o | 表示执行了任何指定的改变之后,将显示指定的启动列表。输出是设备名称列表。 |
-r | 表示执行了任何指定的改变之后,将显示指定的启动列表。输出取决于硬件平台。 |
bootlist 命令允许用户显示和改变要启动的系统中可能的启动设备的列表。这个命令支持下面的更新:
(1)常规启动列表:当系统以常规方式启动时,常规列表为此指定可能的启动设备。
(2)服务启动列表:当系统以服务方式启动时,服务列表为此指定可能的启动设备。
(3)前一启动设备条目:该条目指定了最近一次启动系统的设备。一些硬件平台可能试图在查找其他列表中的启动设备之前先从前一启动设备进行启动。
对这些启动列表的支持,可能随着平台的不同而不同,并且在某些平台中可能没有启动列表。当系统启动时,它将在启动列表中搜索启动设备,系统将选择列表中的第一个设备,并确定它是否可以启动。如果在第一个设备上没有检测到启动文件系统,该系统将转移至列表中的下一个设备。因此,设备在设备列表中的排序是非常重要的。
要显示启动列表(AIX Version 4.2 或更高版本),可以使用下面的命令:
# bootlist -m normal -o cd0 hdisk0 blv=hd5 rmt0 |
对正常的启动列表进行更改,并且删除 rmt0(举例来说),可以使用下面的命令:
# bootlist -m normal cd0 hdisk0 |
或者创建一个包含 cd0 hdisk0 的列表的文件(由空格进行分隔,或者每个设备占一行),并且使用下面的命令:
# bootlist -m normal -f filename |
这将更改常规启动列表,以表示在启动系统时,它将首先尝试从 cd0 进行启动。如果在 cd0 中无法找到启动镜像,那么它将转向 hdisk0。如果搜索失败,那么它将显示一个 LED 代码,并等待用户进行干预。它不会继续搜索 rmt0。
在更改了启动列表之后,对其进行验证,如下所示:
# bootlist -m normal -o hdisk0 blv=hd5 cd0 |
对这些启动列表的支持可能随着平台的不同而不同,并且在某些平台中可能没有启动列表。当搜索启动设备时,系统将选择列表中的第一个设备,并确定它是否可以启动。如果在第一个设备中没有检测到 BLV,那么系统将转移至列表中的下一个设备。因此,设备在设备列表中的排序是非常重要的。
3.2 启动设备选择
下表提供了可以在您的启动列表中使用的命名规范。向启动列表所添加的每个设备都必须处于 AVAILABLE 状态。否则,bootlist 命令将失败,并且您将碰到与以下所示类似的错误:
0514-210 bootlist: Device xxxxx is not in the AVAILABLE state |
设备 | 说明 |
hdiskxx | 物理卷设备逻辑名 |
cdxx | SCSI 和 IDE CD-ROM 设备逻辑名 |
rmtxx | 磁带设备逻辑名 |
entxx | 以太网适配器逻辑名 |
tokxx | 令牌环适配器逻辑名 |
3.3 访问无法启动的系统
如果您无法启动系统,那么第一步是访问该系统,并查看导致该故障的可能原因。这个过程允许您获得系统提示符,以便您可以尝试从系统恢复数据,或者执行纠正性的操作以使得系统能够从硬盘启动。
要访问该系统,需要执行以下步骤:
(1)将系统功能键(如果有的话)旋至 Service 位置,或者在基于 PCI 的系统中按 F5,以便使系统从磁带/CD-ROM/DVD-ROM 驱动器进行启动(在步骤 4 的执行过程中)。
(2)在打开系统单元的电源之前,先打开所有外部设备的电源,如终端、CDROM 或 DVD-ROM 驱动器、磁带驱动器、监视器和外部磁盘驱动器。然后,打开系统单元以便从安装媒体进行启动。
(3)将安装媒体 Volume 1 插入到磁带驱动器、CDROM 或 DVD-ROM 驱动器,关闭系统单元的电源。
(4)将系统单元的电源开关切换到打开位置。在启动时,将会显示这样一个屏幕(在图 1 的屏幕之前),其中要求您按 F1 功能键以选择合适的显示器作为系统控制台。系统中每个显示器都将接收一个功能键数值,以便将其标识为系统控制台。系统从安装媒体启动。几分钟之后,LED 中将显示 c31(如果您的系统有 LED;否则,将会显示与图 1 所示类似的屏幕)。
图 1. BOS 安装和维护屏幕
(5)选择选项 3“Start Maintenance Mode for System Recovery”,并按回车。这时将显示与图 2 所示类似的屏幕。
图 2. 维护菜单
(6)输入 1,即“Access a Root Volume Group”。这时将显示与图 3 所示类似的屏幕。
图 3. 警告屏幕
(7)请记下警告信息。如果您希望返回到前一个菜单,请输入 99;否则,输入 0 以进行确认。这将显示图 4 中的屏幕。
图 4. 所找到的卷组的列表
(8)选择您希望显示逻辑卷信息的卷组。这是非常重要的,因为 rootvg 中将包含 hd5,即启动逻辑卷。输入卷组编号,并按回车。这时将显示与图 5 所示类似的屏幕。
图 5. 在所选择的卷组中找到的逻辑卷的列表
(9)从“Volume Group Information”屏幕中选择一个选项,并按回车。其中每一项将进行以下操作:
1)选项 1:选择这个选项,将在系统为您提供 Shell 和系统提示符之前,先导入并激活 rootvg 卷组,并为根卷组装入文件系统。
2)选项 2:选择这个选项,将在为根卷组装入文件系统之前,先导入并激活 rootvg 卷组,并为您提供 Shell 和系统提示符。
3)选项 99:输入 99 将使您返回到“Access a Root Volume Group”屏幕。
(10)使用适当的方法来恢复数据,或者采用动作(如使用 bosboot 命令)使系统可以正常地启动。
3.4 常见的启动 LED 代码
在系统初始化过程中,提供了操作员面板显示屏的服务器将显示一些 LED 代码,这些代码可以提供有关启动过程状态的信息。一些代码是指示服务器运行到启动过程哪一步的检查点。对于不同的服务器类型,这些代码也有所不同。 例如,在一个提供了 4 个字符的显示屏的服务器上,E1F1 表示系统定义的控制台已经激活,而在提供了 3 个字符的显示屏的服务器上,则使用 FF1 进行表示。Fxx(其中 xx 为十六进制数字)格式的代码一般是与固件有关的。 其他代码用来表示所检测到的错误。表 3 中给出了一些最常见的 LED 代码,它们用于表示启动问题,以及如何解决它们以使得您的系统能够再次启动并运行。
表 3
LED 201 - 启动镜像损坏 |
1. 按照“访问无法启动的系统”中所描述的过程来访问您的 rootvg。 |
LED 223-229 - 无效的启动列表 |
1. 将键模式切换到 Service(或者 F5,对于那些没有键盘锁的系统),并打开计算机的电源。 |
LED 551、555 和 557 - 损坏的文件系统、损坏的 JFS 日志等等 |
1. 在装入任何文件系统(“Volume Group Information”屏幕中的选项 2)之前,按照“访问无法启动的系统”中所描述的过程来访问 rootvg。 |
LED 552、554 和 556 - 损坏的超级块和损坏的自定义 ODM 数据库 |
1. 重复 LED 551、555 和 557 中的步骤 1 到 2。 |
常见的启动 LED 和解决方案
LED 553 - 损坏的 /etc/inittab 文件 |
1. 按照“访问无法启动的系统”中所描述的过程来访问所有已装入的文件系统的 rootvg。 |
四. 运行级别
在操作系统中执行维护任务,或在更改运行级别之前,您应该深入地研究各种运行级别。运行级别是只允许选定的一组进程存在的一种软件配置。
4.1 确定系统运行级别
这个部分描述如何确定系统当前所处的运行级别,以及如何显示以前的运行级别的历史。表 4 中列出了系统可用的运行级别。
表 4
运行级别 | 说明 |
0-1 | 保留为操作系统将来使用。 |
2 | 包含多用户环境下的所有终端进程和守护进程。这是缺省的运行级别。 |
3-9 | 可以根据用户的首选项进行定义。 |
a、b、c、h | 这些并不是真正的运行级别;它们与运行级别的不同之处在于,init 命令无法请求整个系统进入这些运行级别。请参见上半部分的“/etc/inittab 文件”,以获得更详细的信息。 |
S、s、M、m | 维护模式。当系统从其他运行级别进入维护模式时,只有系统控制台可以作为终端使用。 |
4.2 确定当前运行级别
在命令行中,输入下面的命令:
# cat /etc/.init.state 2 |
系统将显示一个数字,即当前运行级别。
4.3 显示以前的运行级别的历史
使用 fwtmp 命令,您可以显示以前的运行级别的历史,如下所示:
(1). 以 root 用户的身份登录。
(2). 输入下面的命令,系统将显示与下面所示类似的信息:
# /usr/lib/acct/fwtmp < /var/adm/wtmp |grep run-level run-level 2 1 0 0062 0123 1132072406 Tue Nov 15 10:33:26 CST 2005 run-level 2 1 0 0062 0123 1132075614 Tue Nov 15 11:26:54 CST 2005 run-level 2 1 0 0062 0123 1132092491 Tue Nov 15 16:08:11 CST 2005 run-level 2 1 0 0062 0123 1132094756 Tue Nov 15 16:45:56 CST 2005 |
4.4 更改系统运行级别
系当系统第一次启动时,它会进入 /etc/inittab 文件中的 initdefault 项所定义的缺省运行级别。系统会一直在该运行级别中运行,直到它收到一个更改运行级别的信号。您可以执行 lsitab 命令,以查看您的系统的缺省运行级别:
# lsitab init init:2:initdefault: |
要更改运行级别,请执行下面的过程:
1. 检查 /etc/inittab 文件,以确认您将要改变到的运行级别是否支持您正在运行的进程。进程 getty 是很重要的,因为它可以控制系统控制台和其他登录的终端线路访问。确保 getty 进程在所有的运行级别中都可以运行。
2. 使用 wall 命令通知所有的用户,您将要改变系统运行级别,并要求这些用户退出系统。
3. 使用 telinit 命令(以您将要切换到的运行级别作为该命令的参数),例如:
# telinit M
|
telinit 命令
通过接受单个字符的参数,并发送信号以告知 init 进程执行适当的动作,telinit 命令可以直接控制 init 进程(进程 ID 为 1)的操作。通常情况下,telinit 命令将使系统进入到指定的运行级别。telinit 命令可以向 init 进程传递下列参数作为指令:
(1)0-9:告知 init 进程将系统置于运行级别 0-9。
(2)S、s、M、m:告知 init 进程将系统置于维护模式。
(3)a、b、c:告知 init 进程仅检查 /etc/inittab 文件中在运行级别字段中包含 a、b、c 的那些记录。
(4)Q、q:告知 init 进程重新检查整个 /etc/inittab 文件。
(5)N:向重新生成的进程发送中止进程的信号。
例如,要进入到维护模式,可以输入:
# telinit M |
注意:您还可以使用 shutdown -m 命令进入到维护模式。
4.5 执行运行级别脚本
运行级别脚本允许用户在更改运行级别时启动和停止所选择的应用程序。以 K 开头的脚本是停止脚本,以 S 开头的脚本是启动脚本。
这些脚本保存于它们所从属的运行级别的特定子目录中,每个子目录的格式为 rcn.d,其中 n 表示运行级别:
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
/etc/rc.d/rc7.d
/etc/rc.d/rc8.d
/etc/rc.d/rc9.d
/etc/rc.d/rc 脚本将运行它在指定目录中发现的启动脚本,并在运行级别更改时执行该启动脚本。脚本将首先运行停止应用程序的脚本,然后运行启动应用程序的脚本。
五. rc.* 文件的介绍
rc 文件作为初始化过程中的一部分加以执行;它们为系统做好配置的准备,并做好运行的准备。
5.1 rc.boot 文件
/sbin/rc.boot 文件是一个可以由简单的 Shell init和标准 init 命令调用的、用来使系统启动的脚本。它可以控制计算机的启动进程。当系统启动时,在每个启动阶段都会调用 /sbin/rc.boot 文件,每次都使用一个不同的参数。
根据启动设备的类型,rc.boot 文件对设备进行配置,并调用合适的应用程序。合适的应用程序包括:
(1)从磁盘进行启动(启动阶段 1)
(2)激活根卷组(启动阶段 2)
(3)启用文件系统(启动阶段 2)
(4)调用 BOS 安装程序或者诊断程序
注意:rc.boot 程序只能由 init 进程调用;在一个正在运行的系统上执行 rc.boot 脚本会产生不可预知的结果。
5.2 /etc/rc 文件
/etc/rc 文件执行正常的启动初始化;在 /etc/inittab 文件中,它的条目位于 rc.boot 条目之后。init 命令将读取 /etc/inittab 文件,并为 /etc/rc 文件创建一个进程。对于不同的安装,/etc/rc 文件的内容也有所不同。如果所有必需的操作都已成功完成,那么文件会出现一个返回码 0,以便允许 init 命令启动登录程序来完成正常的初始化和启动。
/etc/rc 文件可以完成许多启动功能,如:
(1)激活所有标记为自动激活的卷组。
(2)激活 /etc/swapspaces 文件中列出的所有分页空间(使用 swapon -a 命令)。
(3)配置所有的转储设备(使用 sysdumpdev -q 命令)。
(4)执行文件系统检查(使用 fsck -fp 命令)。
(5)装入在 /etc/filesystems 文件中列出的标记为 mount=true 的文件系统(使用 mount all 命令)。
注意:/、/usr、/var 和 /tmp 文件系统会在启动过程(阶段 2)中自动地装入。/etc/rc 文件在运行 mount all 命令时不会尝试再次装入这些文件系统。
5.3 rc.net 文件
/etc/rc.net 文件是一个包含网络配置信息的 Shell 脚本。其中的一些节允许您启用网络接口和设置主机名、缺省网关以及当前主机的静态路由信息。这个文件可用于进行单步配置,作为单独配置主机所需的一组命令和文件的替代方法。 rc.net Shell 脚本在配置过程的第二阶段中通过配置管理器程序运行。如果 TCP/IP 已经安装,那么在配置过程的第二阶段完成,并且 init 命令启动了 SRC 之后,由 init 命令运行第二个脚本 rc.tcp。
应该显示该文件中的节,以便提示用户目前的运行状态。
如果在系统配置完成之后运行 cfgmgr 命令,/etc/rc.net Shell 脚本还可以由配置管理器程序 (cfgmgr) 运行。它经常在系统添加新设备后,在系统启动时运行。如果 cfgmgr 命令运行 rc.net,那么配置方法和 rc.net 文件本身都要检查网络设备是否已经处于可用状态。如果是,那么就不改变设备的属性值,以避免覆盖启动之后的任何配置更改。
如果在运行 /etc/rc.net 时没有调用 cfgmgr 命令,那么将设备属性重设为在 ODM 库中的属性值,而不管它当前的状态如何。这就允许系统配置恢复为 ODM 库中指定的属性值。
5.4 rc.tcpip 文件
/etc/rc.tcpip 文件是一个 Shell 脚本,当它执行时,使用 SRC 命令初始化所选择的守护进程。在系统每次重新启动时,rc.tcpip 脚本文件都会自动地执行。它也可以在任何时间从命令行加以执行。
大多数守护进程可以由 TCP/IP 特定的 rc.tcpip 文件进行初始化。这些守护进程包括:
(1)inetd(在缺省情况下会启动)
(2)gated
(3)routed
(4)named
(5)timed
(6)rwhod
注意:在一台主机上同时运行 routed 和 gated 会引起不可预知的结果。
还有一些特定于基本操作系统或其他应用程序的守护进程,也可以在 rc.tcpip 文件中启动。这些守护进程包括:
(1)lpd
(2)portmap
(3)sendmail
(4)syslogd(在缺省情况下会启动)
以下的示例可以作为参考:
(1)下面的命令将启动 syslogd 守护进程:
#启动 syslog 守护进程(用于错误和事件日志记录)
start /usr/sbin/syslogd "$src_running"
(2)下面的节将启动 lpd 守护进程:
#启动 print 守护进程
start /usr/sbin/lpd "$src_running"
(3)下面的节将启动 routed 守护进程,但是不启动 gated 守护进程:
#启动 routing 守护进程(仅启动一个)
start /usr/sbin/routed "$src_running" -g
#start /usr/sbin/gated "$src_running"
整理自:
启动过程(上)
http://www.ibm.com/developerworks/cn/aix/redbooks/test222/boot-process/test222-bootprocess1.html
启动过程(下)
http://www.ibm.com/developerworks/cn/aix/redbooks/test222/boot-process/test222-bootprocess2.html
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977(满)
DBA3 群:62697850 DBA 超级群:63306533;
聊天 群:40132017
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请