本章介绍可能偶然发生并且相对易于修复的各种软件问题。对各种软件问题的疑难解答包括解决不与特定软件应用程序或主题相关的问题,如不成功的重新引导或整个文件系统。以下各节中介绍了这些问题的解决方法。
以下是本章中信息的列表。
本节中的一些信息与仅运行 Oracle Solaris 10 发行版的系统有关。
如果系统未完全重新引导,或者重新引导后再次崩溃,则可能存在使系统无法成功引导的软件或硬件问题。
系统未引导的原因 |
解决该问题的办法 |
---|---|
系统找不到 /platform/`uname -m`/kernel/unix。 |
您可能需要在基于 SPARC 的系统上更改 PROM 中的 boot-device 设置。有关更改缺省引导设备的信息,请参见《系统管理指南:基本管理》中的“如何使用引导 PROM 更改缺省引导设备”。 |
Oracle Solaris 10:基于 x86 的系统中没有缺省引导设备。该消息显示为: Not a UFS filesystem. |
Oracle Solaris 10:使用配置辅助/引导软盘引导系统,并选择要进行引导的磁盘。 |
Solaris 10 1/06:GRUB 引导归档文件已损坏。或者,SMF 引导归档文件服务失败。如果运行 svcs -x 命令,则会显示一条错误消息。 |
Solaris 10 1/06:引导故障安全归档文件。 |
/etc/passwd 文件中存在无效项。 |
有关从无效 passwd 文件恢复的信息,请参见《系统管理指南:基本管理》中的第 12 章 “引导 Oracle Solaris 系统(任务)”。 |
磁盘或其他设备存在硬件问题。 |
检查硬件连接:
|
如果采用上述建议仍无法解决问题,请与当地服务提供商联系。
如果忘记了超级用户口令并且无法登录系统,必须执行以下操作:
使用键盘停止序列停止系统。
Oracle Solaris 10:从引导服务器或安装服务器或者本地 CD-ROM 引导系统。
挂载根 (/) 文件系统。
从 /etc/shadow 文件中删除超级用户口令。
重新引导系统。
登录并设置超级用户的口令。
如果忘记了超级用户口令并且无法登录系统,必须执行以下操作:
使用键盘停止序列停止系统。
从 Solaris 10 1/06 发行版开始:在基于 x86 的系统上,在 Solaris 故障安全归档文件中引导系统。
Oracle Solaris 10:从引导服务器或安装服务器或者本地 CD-ROM 引导系统。
挂载根 (/) 文件系统。
从 /etc/shadow 文件中删除超级用户口令。
重新引导系统。
登录并设置超级用户的口令。
《系统管理指南:基本管理》中的第 12 章 “引导 Oracle Solaris 系统(任务)”完整介绍了这些过程。
在此发行版中,基于 SPARC 的系统不能使用基于 GRUB 的引导。
以下示例介绍在基于 SPARC 和 x86 的系统中,如何恢复忘记的超级用户口令。
以下示例说明在忘记超级用户口令时,如何通过从网络引导来进行恢复。此示例假定引导服务器已经可用。请确保在重新引导系统后应用一个新的超级用户口令。
(Use keyboard abort sequence--Press Stop A keys to stop the system) ok boot net -s # mount /dev/dsk/c0t3d0s0 /a # cd /a/etc # TERM=vt100 # export TERM # vi shadow (Remove root's encrypted password string) # cd / # umount /a # init 6 |
此示例假定引导服务器已经可用。请确保在重新引导系统后应用一个新的超级用户口令。
GNU GRUB version 0.95 (637K lower / 3144640K upper memory) +-------------------------------------------------------------------+ | be1 | be1 failsafe | be3 | be3 failsafe | be2 | be2 failfafe +------------------------------------------------------------------+ Use the ^ and v keys to select which entry is highlighted. Press enter to boot the selected OS, 'e' to edit the commands before booting, or 'c' for a command-line. |
Searching for installed OS instances... An out of sync boot archive was detected on /dev/dsk/c0t0d0s0. The boot archive is a cache of files used during boot and should be kept in sync to ensure proper system operation. Do you wish to automatically update this boot archive? [y,n,?] n Searching for installed OS instances... Multiple OS instances were found. To check and mount one of them read-write under /a, select it from the following list. To not mount any, select 'q'. 1 pool10:13292304648356142148 ROOT/be10 2 rpool:14465159259155950256 ROOT/be01 Please select a device to be mounted (q for none) [?,??,q]: 1 mounting /dev/dsk/c0t0d0s0 on /a starting shell. . . . # cd /a/etc # vi shadow (Remove root's encrypted password string) # cd / # umount /a # reboot |
Oracle Solaris 10:以下示例说明在忘记超级用户口令时,如何通过从网络引导来进行恢复。此示例假定引导服务器已经可用。请确保在重新引导系统后应用一个新的超级用户口令。
Press any key to reboot. Resetting... . . . Initializing system Please wait... <<< Current Boot Parameters >>> Boot path: /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0:a Boot args: Type b [file-name] [boot-flags] <ENTER> to boot with options or i <ENTER> to enter boot interpreter or <ENTER> to boot with defaults <<< timeout in 5 seconds >>> Select (b)oot or (i)nterpreter: b -s SunOS Release 5.10 Version amd64-gate-2004-09-30 32-bit Copyright 1983-2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. DEBUG enabled Booting to milestone "milestone/single-user:default". Hostname: venus NIS domain name is example.com Requesting System Maintenance Mode SINGLE USER MODE Root password for system maintenance (control-d to bypass): xxxxxx Entering System Maintenance Mode . . . # mount /dev/dsk/c0t0d0s0 /a . . . # cd /a/etc # vi shadow (Remove root's encrypted password string) # cd / # umount /a # init 6 |
此过程适用于仅运行 Oracle Solaris 10 发行版的系统。
Solaris 10 1/06:如果系统崩溃,引导归档文件 SMF 服务 svc:/system/boot-archive:default 可能会在系统重新引导时失败。如果引导归档文件服务已失败,则运行 svcs -x 命令时将显示以下类似消息:
svc:/system/boot-archive:default (check boot archive content) State: maintenance since Fri Jun 03 10:24:52 2005 Reason: Start method exited with $SMF_EXIT_ERR_FATAL. See: http://sun.com/msg/SMF-8000-KS See: /etc/svc/volatile/system-boot-archive:default.log Impact: 48 dependent services are not running. (Use -v for list.) svc:/network/rpc/gss:default (Generic Security Service) State: uninitialized since Fri Jun 03 10:24:51 2005 Reason: Restarter svc:/network/inetd:default is not running. See: http://sun.com/msg/SMF-8000-5H See: gssd(1M) Impact: 10 dependent services are not running. (Use -v for list.) svc:/application/print/server:default (LP print server) State: disabled since Fri Jun 03 10:24:51 2005 Reason: Disabled by an administrator. See: http://sun.com/msg/SMF-8000-05 See: lpsched(1M) Impact: 1 dependent service is not running. (Use -v for list.) |
要解决问题,请执行以下操作:
重新引导系统并从 GRUB 引导菜单中选择故障安全归档文件选项。
系统提示重新构造引导归档文件时,回答 y。
重新构造引导归档文件后,系统准备引导。
要继续引导,请使用以下命令清除 SMF 引导归档文件服务。
# svcadm clear boot-archive |
请注意,只有超级用户或同等角色才能运行此命令。
有关重新生成 GRUB 引导归档文件的更多信息,请参见《系统管理指南:基本管理》中的“如何在故障安全模式下引导基于 x86 的系统”和 bootadm(1M) 手册页。
如果某些软件进程出现问题,系统可以冻结或挂起,而不是完全崩溃。遵循以下步骤可以从挂起的系统中进行恢复。
确定系统是否正在运行窗口环境并遵循以下建议。如果这些建议无法解决问题,请转到步骤 2。
确保指针位于正在键入命令的窗口中。
如果用户意外按下了可冻结屏幕的 Ctrl-s,请按下 Ctrl-q。Ctrl-s 仅会冻结窗口,而不是整个屏幕。如果一个窗口被冻结,请尝试使用其他窗口。
如果可能,请从网络中的其他系统中远程登录。使用 pgrep 命令查找挂起的进程。如果窗口系统看似已挂起,请标识进程并将其中止。
远程登录并尝试确定和中止使系统挂起的进程。
远程登录,成为超级用户或同等角色,并重新引导系统。
如果系统仍然无法响应,请强制进行故障转储并重新引导。有关强制进行故障转储和引导的信息,请参见《系统管理指南:基本管理》中的“强制实施崩溃转储和系统重新引导”。
当根 (/) 文件系统或任何其他文件系统已满时,您将在控制台窗口中看到以下消息:
.... file system full |
系统已满的原因可能有多种。以下各节介绍了从已满文件系统中进行恢复的几种方案。有关定期清除旧文件和未使用的文件以防止文件系统变满的信息,请参见第 6 章。
出现错误的原因 |
解决该问题的办法 |
---|---|
有人意外地将文件或目录复制到错误位置。当应用程序崩溃并将大型 core 文件写入文件系统时,也会出现这种情况。 |
以超级用户身份登录或成为同等角色,在特定文件系统中使用 ls -tl 命令确定新创建的大文件并将其删除。有关删除 core 文件的信息,请参见如何查找并删除 core 文件。 |
出现错误的原因 |
解决该问题的办法 |
---|---|
如果 TMPFS 尝试写入的内容比允许量多或者有些当前进程使用了大量内存,则可能出现此情况。 |
有关利用与 tmpfs 相关的错误消息进行恢复的信息,请参见 tmpfs(7FS) 手册页。 |
出现错误的原因 |
解决该问题的办法 |
---|---|
如果将具有 ACL 的文件或目录复制或恢复到 /tmp 目录,则会丢失 ACL 属性。/tmp 目录通常作为临时文件系统挂载,而临时文件系统不支持 ACL 等 UFS 文件系统属性。 |
将文件复制或恢复到 /var/tmp 目录中。 |
本节介绍在备份和恢复数据时使用的一些基本的疑难解答方法。
备份一个文件系统,然后根 (/) 文件系统变满。未向介质中写入任何内容,ufsdump 命令会提示您插入介质的第二个卷。
出现错误的原因 |
解决该问题的办法 |
---|---|
如果将无效的目标设备名用于 -f 选项,ufsdump 命令将向根 (/) 文件系统中的 /dev 目录写入内容,将其填满。例如,如果键入的是 /dev/rmt/st0 而不是 /dev/rmt/0,则会在磁盘中创建备份文件 /dev/rmt/st0,而不将其发送至磁带机。 |
在 /dev 目录中使用 ls -tl 命令确定新创建的特别大的文件并将其删除。 |
仅能使用 ufsrestore 命令恢复通过 ufsdump 命令备份的文件。如果使用 tar 命令备份,则可使用 tar 命令进行恢复。如果使用 ufsrestore命令恢复通过其他命令写入的磁带,则会显示一条错误消息,指明磁带格式不是 ufsdump。
很容易将文件恢复到错误位置。由于 ufsdump 命令复制文件时总是使用相对于文件系统根目录的全路径名,因此在运行 ufsrestore 命令之前,通常应转到文件系统的根目录。如果转到较低级别的目录,则在恢复文件后,将看到在该目录下创建的一棵完整的文件树。
使用交互命令时,将显示 ufsrestore> 提示符,如下例所示:
# ufsrestore ivf /dev/rmt/0 Verify volume and initialize maps Media block size is 126 Dump date: Fri Jan 30 10:13:46 2004 Dumped from: the epoch Level 0 dump of /export/home on starbug:/dev/dsk/c0t0d0s7 Label: none Extract directories from tape Initialize symbol table. ufsrestore > |
本节将解决使用 common agent container 共享组件时可能遇到的问题。在此 Oracle Solaris 发行版中,Common Agent Container Java 程序已包括在 Oracle Solaris OS 中。该程序将为 Java 管理应用程序实现容器。通常,容器对于用户是不可见的。
以下是可能遇到的问题:
端口号冲突
超级用户口令的安全性被破坏
缺省情况下,common agent container 占用以下端口号:
JMX 端口 (TCP) = 11162
SNMPAdaptor 端口 (UDP) = 11161
SNMPAdaptor 陷阱端口 (UDP) = 11162
Commandstream 适配器端口 (TCP) = 11163
RMI 连接器端口 (TCP) = 11164
如果对 Oracle Solaris Cluster 的安装进行疑难解答,端口指定会有所不同。
如果安装已保留其中所有的端口号,则更改 common agent container 占用的端口号,如以下过程所述。
此过程说明如何验证端口。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
停止 common agent container 管理守护进程。
# /usr/sbin/cacaoadm stop |
使用以下语法更改端口号:
# /usr/sbin/cacaoadm set-param param=value |
例如,要将 SNMPAdaptor 占用的端口由缺省的 11161 更改为 11165,请键入:
# /usr/sbin/cacaoadm set-param snmp-adaptor-port=11165 |
重新启动 common agent container 管理守护进程。
# /usr/sbin/cacaoadm start |
可能需要在运行 Java ES 的主机上重新生成安全密钥。例如,如果存在超级用户口令被曝露或破坏的风险,则应重新生成安全密钥。common agent container 服务使用的密钥存储在 /etc/cacao/instances/instance-name/security 目录中。以下任务说明如何为 Oracle Solaris OS 生成安全密钥。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
停止 common agent container 管理守护进程。
# /usr/sbin/cacaoadm stop |
重新生成安全密钥。
# /usr/sbin/cacaoadm create-keys --force |
重新启动 common agent container 管理守护进程。
# /usr/sbin/cacaoadm start |
对于 Sun Cluster 软件,必须在群集的所有节点中传播此更改。