系统管理指南:高级管理

第 18 章 各种软件问题的疑难解答(任务)

本章介绍可能偶然发生并且相对易于修复的各种软件问题。对各种软件问题的疑难解答包括解决不与特定软件应用程序或主题相关的问题,如不成功的重新引导或整个文件系统。以下各节中介绍了这些问题的解决方法。

以下是本章中信息的列表。

重新引导失败时应执行的操作


注 –

本节中的一些信息与运行 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 系统(任务)”

磁盘或其他设备存在硬件问题。 

检查硬件连接: 

  • 确保已插入设备。

  • 确保所有交换机都已正确设置。

  • 查看所有连接器和电缆,包括以太网电缆。

  • 如果所有上述操作都失败,请关闭系统电源,等待 10 到 20 秒,然后再次打开电源。

如果采用上述建议仍无法解决问题,请与当地服务提供商联系。

忘记超级用户口令时应执行的操作

如果忘记了超级用户口令并且无法登录系统,必须执行以下操作:

如果忘记了超级用户口令并且无法登录系统,必须执行以下操作:

《系统管理指南:基本管理》中的第 12  章 “引导 Oracle Solaris 系统(任务)”完整介绍了这些过程。


注 –

在此发行版中,基于 SPARC 的系统不能使用基于 GRUB 的引导。


以下示例介绍在基于 SPARC 和 x86 的系统中,如何恢复忘记的超级用户口令。


示例 18–1 SPARC: 忘记超级用户口令时应执行的操作

以下示例说明在忘记超级用户口令时,如何通过从网络引导来进行恢复。此示例假定引导服务器已经可用。请确保在重新引导系统后应用一个新的超级用户口令。


(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


示例 18–2 x86: 忘记超级用户口令时执行基于 GRUB 的引导

此示例假定引导服务器已经可用。请确保在重新引导系统后应用一个新的超级用户口令。


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


示例 18–3 x86: 忘记超级用户口令时引导系统

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

x86: SMF 引导归档文件服务在系统重新引导期间失败时应执行的操作


注 –

此过程适用于运行 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.)

要解决问题,请执行以下操作:

  1. 重新引导系统并从 GRUB 引导菜单中选择故障安全归档文件选项。

  2. 系统提示重新构造引导归档文件时,回答 y

    重新构造引导归档文件后,系统准备引导。

  3. 要继续引导,请使用以下命令清除 SMF 引导归档文件服务。


# svcadm clear boot-archive

请注意,只有超级用户或同等角色才能运行此命令。

有关重新生成 GRUB 引导归档文件的更多信息,请参见《系统管理指南:基本管理》中的“如何在故障安全模式下引导基于 x86 的系统”bootadm(1M) 手册页。

系统挂起时应执行的操作

如果某些软件进程出现问题,系统可以冻结或挂起,而不是完全崩溃。遵循以下步骤可以从挂起的系统中进行恢复。

  1. 确定系统是否正在运行窗口环境并遵循以下建议。如果这些建议无法解决问题,请转到步骤 2。

    • 确保指针位于正在键入命令的窗口中。

    • 如果用户意外按下了可冻结屏幕的 Ctrl-s,请按下 Ctrl-q。Ctrl-s 仅会冻结窗口,而不是整个屏幕。如果一个窗口被冻结,请尝试使用其他窗口。

    • 如果可能,请从网络中的其他系统中远程登录。使用 pgrep 命令查找挂起的进程。如果窗口系统看似已挂起,请标识进程并将其中止。

  2. 按 Ctrl-\ 强制从运行的程序中“退出”,并(可能)写出 core 文件。

  3. 按 Ctrl-c 中断正在运行的程序。

  4. 远程登录并尝试确定和中止使系统挂起的进程。

  5. 远程登录,成为超级用户或同等角色,并重新引导系统。

  6. 如果系统仍然无法响应,请强制进行故障转储并重新引导。有关强制进行故障转储和引导的信息,请参见《系统管理指南:基本管理》中的“强制实施崩溃转储和系统重新引导”

  7. 如果系统仍然无法响应,请关闭电源,等待一分钟左右,然后重新打开电源。

  8. 如果根本无法使系统做出响应,请联系当地服务提供商以获取帮助。

文件系统已满时应执行的操作

当根 (/) 文件系统或任何其他文件系统已满时,您将在控制台窗口中看到以下消息:


.... file system full

系统已满的原因可能有多种。以下各节介绍了从已满文件系统中进行恢复的几种方案。有关定期清除旧文件和未使用的文件以防止文件系统变满的信息,请参见第 6 章

由于创建了大文件或目录导致文件系统已满

出现错误的原因 

解决该问题的办法 

有人意外地将文件或目录复制到错误位置。当应用程序崩溃并将大型 core 文件写入文件系统时,也会出现这种情况。

以超级用户身份登录或成为同等角色,在特定文件系统中使用 ls -tl 命令确定新创建的大文件并将其删除。有关删除 core 文件的信息,请参见如何查找并删除 core 文件

由于系统内存不足导致 TMPFS 文件系统变满

出现错误的原因 

解决该问题的办法 

如果 TMPFS 尝试写入的内容比允许量多或者有些当前进程使用了大量内存,则可能出现此情况。

有关利用与 tmpfs 相关的错误消息进行恢复的信息,请参见 tmpfs(7FS) 手册页。

复制或恢复后文件 ACL 丢失时应执行的操作

出现错误的原因 

解决该问题的办法 

如果将具有 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 > 

Oracle Solaris OS 中 Common Agent Container 问题的疑难解答

本节将解决使用 common agent container 共享组件时可能遇到的问题。在此 Oracle Solaris 发行版中,Common Agent Container Java 程序已包括在 Oracle Solaris OS 中。该程序将为 Java 管理应用程序实现容器。通常,容器对于用户是不可见的。

以下是可能遇到的问题:

端口号冲突

缺省情况下,common agent container 占用以下端口号:


注 –

如果对 Oracle Solaris Cluster 的安装进行疑难解答,端口指定会有所不同。


如果安装已保留其中所有的端口号,则更改 common agent container 占用的端口号,如以下过程所述。

Procedure如何检查端口号

此过程说明如何验证端口。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 停止 common agent container 管理守护进程。


    # /usr/sbin/cacaoadm stop
    
  3. 使用以下语法更改端口号:


    # /usr/sbin/cacaoadm set-param param=value
    

    例如,要将 SNMPAdaptor 占用的端口由缺省的 11161 更改为 11165,请键入:


    # /usr/sbin/cacaoadm set-param snmp-adaptor-port=11165 
    
  4. 重新启动 common agent container 管理守护进程。


    # /usr/sbin/cacaoadm start
    

超级用户口令的安全性被破坏

可能需要在运行 Java ES 的主机上重新生成安全密钥。例如,如果存在超级用户口令被曝露或破坏的风险,则应重新生成安全密钥。common agent container 服务使用的密钥存储在 /etc/cacao/instances/instance-name/security 目录中。以下任务说明如何为 Oracle Solaris OS 生成安全密钥。

Procedure如何为 Oracle Solaris OS 生成安全密钥

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 停止 common agent container 管理守护进程。


    # /usr/sbin/cacaoadm stop
    
  3. 重新生成安全密钥。


    # /usr/sbin/cacaoadm create-keys --force
    
  4. 重新启动 common agent container 管理守护进程。


    # /usr/sbin/cacaoadm start
    

    注 –

    对于 Sun Cluster 软件,必须在群集的所有节点中传播此更改。