系统管理指南:基本管理

第 14 章 Oracle Solaris 系统引导的故障排除(任务)

本章介绍在基于 SPARC 和基于 x86 的系统上引导 Oracle Solaris 发行版的过程。

以下列出本章所介绍的信息:

排除在 SPARC 平台上引导时的故障(任务图)

任务 

说明 

参考 

停止系统以便进行恢复。  

如果损坏的文件阻止系统正常引导,请首先停止系统以尝试恢复。 

SPARC: 如何为恢复目的停止系统

强制实施系统故障转储和重新引导。 

作为一种故障排除措施,您可以强制实施系统故障转储和重新引导。 

SPARC: 如何强制实施崩溃转储和系统重新引导

引导基于 SPARC 的系统以便进行恢复。 

引导以便修复阻止系统成功引导的重要系统文件。 

SPARC: 如何为恢复目的而引导系统

引导具有 Oracle Solaris ZFS 根的基于 SPARC 的系统进行恢复。 

引导系统以恢复 root 口令或妨碍您成功登录 Oracle Solaris ZFS 根环境的类似问题,根据错误的严重性,您需要引导故障安全模式或从备用介质引导。

SPARC: 如何引导至 ZFS 根环境以便从口令遗忘或类似问题中恢复

使用内核调试器引导系统。 

您可以使用内核调试器引导系统,以排除引导问题。使用 kmdb 命令引导系统。

SPARC: 如何使用内核调试器 (kmdb) 引导系统

您可能需要使用以下一种或多种方法来排除阻止系统成功引导的问题。

ProcedureSPARC: 如何为恢复目的停止系统

  1. 为系统键入 Stop 组合键。

    显示器将显示 ok PROM 提示符。


    ok

    具体的 Stop 组合键取决于您的键盘类型。例如,您可以按 Stop-A 或 L1-A。终止时,请按 Break 键。

  2. 同步文件系统。


    ok sync
    
  3. 看到 syncing file systems...(正在同步文件系统)消息时,请再次按 Stop 组合键。

  4. 键入相应的 boot 命令以启动引导过程。

    有关更多信息,请参见 boot(1M) 手册页。

  5. 确认已将系统引导至指定的运行级别。


    # who -r
     .       run-level s  May  2 07:39     3      0  S

示例 14–1 SPARC: 为恢复目的而停止系统


Press Stop-A
ok sync
syncing file systems...
Press Stop-A
ok boot

SPARC: 强制实施崩溃转储和系统重新引导

有时,为了排除故障,必须强制实施崩溃转储并重新引导系统。缺省情况下将启用 savecore 功能。

有关系统故障转储的更多信息,请参见《系统管理指南:高级管理》中的第 17  章 “管理系统故障转储信息(任务)”

ProcedureSPARC: 如何强制实施崩溃转储和系统重新引导

使用以下过程可以强制实施系统崩溃转储。该示例遵循以下过程,说明如何使用 halt -d 命令强制实施系统崩溃转储。运行此命令后,您需要以手动方式重新引导系统。

  1. 为系统键入 Stop 组合键。

    特定的 Stop 组合键取决于您的键盘类型。例如,您可以按 Stop-A 或 L1-A。终止时,请按 Break 键。

    PROM 将显示 ok 提示符。

  2. 同步文件系统并写入故障转储。


    > n
    ok sync
    

    将崩溃转储写入磁盘后,系统将继续重新引导。

  3. 确认系统引导至运行级别 3。

    引导过程成功完成后,将显示登录提示。


    hostname console login:

示例 14–2 SPARC: 使用 halt -d 命令强制实施崩溃转储和系统重新引导

本示例说明如何使用 halt -dboot 命令强制实施崩溃转储和 jupiter 系统重新引导。使用此方法可以强制实施崩溃转储和系统重新引导。


# halt -d
Jul 21 14:13:37 jupiter halt: halted by root

panic[cpu0]/thread=30001193b20: forced crash dump initiated at user request

000002a1008f7860 genunix:kadmin+438 (b4, 0, 0, 0, 5, 0)
  %l0-3: 0000000000000000 0000000000000000 0000000000000004 0000000000000004
  %l4-7: 00000000000003cc 0000000000000010 0000000000000004 0000000000000004
000002a1008f7920 genunix:uadmin+110 (5, 0, 0, 6d7000, ff00, 4)
  %l0-3: 0000030002216938 0000000000000000 0000000000000001 0000004237922872
  %l4-7: 000000423791e770 0000000000004102 0000030000449308 0000000000000005

syncing file systems... 1 1 done
dumping to /dev/dsk/c0t0d0s1, offset 107413504, content: kernel
100% done: 5339 pages dumped, compression ratio 2.68, dump succeeded
Program terminated
ok boot
Resetting ... 

Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 333MHz), No Keyboard
OpenBoot 3.15, 128 MB memory installed, Serial #10933339.
Ethernet address 8:0:20:a6:d4:5b, Host ID: 80a6d45b.

Rebooting with command: boot
Boot device: /pci@1f,0/pci@1,1/ide@3/disk@0,0:a
File and args: kernel/sparcv9/unix
SunOS Release 5.10 Version s10_60 64-bit
Copyright 1983-2004 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
configuring IPv4 interfaces: hme0.
add net default: gateway 172.20.27.248
Hostname: jupiter
The system is coming up.  Please wait.
NIS domain name is example.com
.
.
.
System dump time: Wed Jul 21 14:13:41 2004
Jul 21 14:15:23 jupiter savecore: saving system crash dump
in /var/crash/jupiter/*.0
Constructing namelist /var/crash/jupiter/unix.0
Constructing corefile /var/crash/jupiter/vmcore.0
100% done: 5339 of 5339 pages saved

Starting Sun(TM) Web Console Version 2.1-dev...
.
.
.

ProcedureSPARC: 如何为恢复目的而引导系统

如果重要文件(如 /etc/passwd)包含无效项并导致引导过程失败,请使用此过程。

如果不知道 root 口令,或者如果无法登录系统,请使用此过程中介绍的 Stop 组合键。有关更多信息,请参见SPARC: 如何为恢复目的停止系统

替换以下过程中的 device-name 变量所需文件系统的设备名称。要识别系统的设备名称,请参阅《系统管理指南:设备和文件系统》中的“显示设备配置信息”

  1. 使用系统的 Stop 组合键停止系统。

  2. 在单用户模式中引导系统。

    • 从 Oracle Solaris 安装介质引导系统:

      • 在驱动器中插入 Oracle Solaris 安装介质。

      • 在单用户模式中,从安装介质引导。


        ok boot cdrom -s
        
    • 如果安装服务器或远程 CD 或 DVD 驱动器不可用,请从网络引导系统。


      ok boot net -s
      
  3. 安装包含特定文件(带有无效项)的文件系统。


    # mount /dev/dsk/device-name /a
    
  4. 更改为新安装的文件系统。


    # cd /a/file-system
    
  5. 设置终端类型。


    # TERM=sun
    # export TERM
    
  6. 使用编辑器从文件中删除无效项。


    # vi filename
    
  7. 转到根目录 (/)。


    # cd /
    
  8. 卸载 /a 目录。


    # umount /a
    
  9. 重新引导系统。


    # init 6
    
  10. 确认系统已引导至运行级别 3。

    引导过程成功完成后,将显示登录提示。


    hostname console login:

示例 14–3 SPARC: 为恢复目的而引导系统(损坏的口令文件)

以下示例说明在从本地 CD-ROM 引导之后如何修复重要的系统文件(在本例中为 /etc/passwd)。


ok boot cdrom -s
# mount /dev/dsk/c0t3d0s0 /a
# cd /a/etc
# TERM=vt100
# export TERM
# vi passwd
(Remove invalid entry)
# cd /
# umount /a
# init 6


示例 14–4 SPARC: 如果忘记了 root 口令,则请引导系统

以下示例说明在您忘记了 root 口令时如何从网络引导系统。此示例假设已具备网络引导服务器。确保在系统重新引导后应用新的 root 口令。


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

ProcedureSPARC: 如何引导至 ZFS 根环境以便从口令遗忘或类似问题中恢复

  1. 以故障安全模式引导系统。


    ok boot -F failsafe
    
  2. 出现系统提示时,在 /a 上挂载 ZFS BE。


    .
    .
    ROOT/zfsBE was found on rpool.
    Do you wish to have it mounted read-write on /a? [y,n,?] y
    mounting rpool on /a
    Starting shell.
  3. 成为超级用户。

  4. 转到 /a/etc 目录。


    # cd /a/etc
    
  5. 更正 passwdshadow 文件。


    # vi passwd
    
  6. 重新引导系统。


    # init 6
    

ProcedureSPARC: 如何使用内核调试器 (kmdb) 引导系统

此过程说明装入内核调试器 (kmdb) 的基本原理。有关更多详细信息,请参见 Solaris Modular Debugger Guide


注 –

如果您没有时间交互式地调试系统,请使用带有 -d 选项的 reboothalt 命令。运行带有 -d 选项的 halt 命令后需要以手动方式重新引导系统。但是,如果使用 reboot 命令,系统会自动进行引导。有关更多信息,请参见 reboot(1M)


  1. 停止系统,使其显示 ok 提示符。

    要正常停止系统,请使用 /usr/sbin/halt 命令。

  2. 要请求装入内核调试器,请键入 boot kmdbboot -k。按回车键。

  3. 输入内核调试器。

    用于输入调试程序的方法因访问系统所使用的控制台类型而异:

    • 如果正在使用本地连接的键盘,请根据键盘类型按 Stop-A 或 L1–A 组合键。

    • 如果正在使用串行控制台,请使用适合于该控制台类型的方法来发送中断信号。

    首次输入内核调试器时,将显示欢迎消息。


    Rebooting with command: kadb
    Boot device: /iommu/sbus/espdma@4,800000/esp@4,8800000/sd@3,0
    .
    .
    .

示例 14–5 SPARC: 使用内核调试器 (kmdb) 引导系统


ok boot kmdb
Resetting...

Executing last command: boot kmdb -d
Boot device: /pci@1f,0/ide@d/disk@0,0:a File and args: kmdb -d
Loading kmdb...

排除在 x86 平台上引导时的故障(任务图)

任务 

说明 

参考 

停止系统以便进行恢复。  

如果损坏的文件阻止系统正常引导,请首先停止系统以尝试恢复。 

x86: 如何为恢复目的而停止系统

强制实施系统故障转储和重新引导。 

作为一种故障排除措施,您可以强制实施系统故障转储和重新引导。 

x86: 如何强制实施崩溃转储和系统重新引导

使用内核调试器引导系统。 

您可以使用内核调试器引导系统,以排除引导问题。使用 kmdb 命令引导系统。

x86: 如何在 GRUB 引导环境中使用内核调试器 (kmdb) 引导系统

Procedurex86: 如何为恢复目的而停止系统

  1. 使用以下命令之一停止系统(如果可能):

    • 如果键盘和鼠标功能正常,请成为超级用户。然后,键入 init 0 以停止系统。出现 Press any key to reboot 提示后,请按任意键以重新引导系统。

    • 如果键盘和鼠标可正常运行,则成为超级用户然后键入 init 6 以重新引导系统。

  2. 如果系统未响应从鼠标或键盘输入的任何内容,请按“重置”键(如果存在)重新引导系统。

    或者,可以使用电源开关重新引导系统。

x86: 强制实施崩溃转储和系统重新引导

有时,为了排除故障,必须强制实施崩溃转储并重新引导系统。缺省情况下将启用 savecore 功能。

有关系统故障转储的更多信息,请参见《系统管理指南:高级管理》中的第 17  章 “管理系统故障转储信息(任务)”

Procedurex86: 如何强制实施崩溃转储和系统重新引导

如果您不能使用 reboot -dhalt -d 命令,则可以使用内核调试器 kmdb 来强制实施故障转储。必须已在引导时或使用 mdb -k 命令装入了内核调试器,以下过程才能正常进行。


注 –

必须处于文本模式下,才能访问内核调试器 (kmdb)。因此,首先要退出任何窗口系统。


  1. 访问内核调试器。

    用于访问调试器的方法因访问系统所使用的控制台类型而异。

    • 如果使用本地连接的键盘,请按 F1–A 组合键。

    • 如果使用串行控制台,请使用适合于该类型的串行控制台的方法来发送中断信号。

    此时将显示 kmdb 提示符。

  2. 要引发崩溃,请使用 systemdump 宏。


    [0]> $<systemdump
    

    此时将显示应急消息,保存崩溃转储,随后系统将重新引导。

  3. 通过在控制台登录提示符下登录来确认系统已重新引导。


示例 14–6 x86: 使用 halt -d 强制实施崩溃转储和系统重新引导

本示例说明如何使用 halt -dboot 命令强制实施基于 x86 的系统 neptune 的崩溃转储和重新引导。使用此方法强制实施系统崩溃转储。随后以手动方式重新引导系统。


# halt -d
4ay 30 15:35:15 wacked.Central.Sun.COM halt: halted by user

panic[cpu0]/thread=ffffffff83246ec0: forced crash dump initiated at user request

fffffe80006bbd60 genunix:kadmin+4c1 ()
fffffe80006bbec0 genunix:uadmin+93 ()
fffffe80006bbf10 unix:sys_syscall32+101 ()

syncing file systems... done
dumping to /dev/dsk/c1t0d0s1, offset 107675648, content: kernel
NOTICE: adpu320: bus reset
100% done: 38438 pages dumped, compression ratio 4.29, dump succeeded

Welcome to kmdb
Loaded modules: [ audiosup crypto ufs unix krtld s1394 sppp nca uhci lofs 
genunix ip usba specfs nfs md random sctp ]
[0]> 
kmdb: Do you really want to reboot? (y/n) y

Procedurex86: 如何在 GRUB 引导环境中使用内核调试器 (kmdb) 引导系统

此过程说明装入内核调试器 (kmdb) 的基本原理。缺省情况下将启用 savecore 功能。有关使用内核调试器的更多详细信息,请参见 《Solaris 模块调试器指南》

  1. 引导系统。

    引导系统时将显示 GRUB 菜单。

  2. 显示 GRUB 菜单时,请键入 e 以访问 GRUB 编辑菜单。

  3. 使用方向键选择 kernel$ 行。

    如果不能使用方向键,请使用 ^ 键向上滚动,并使用 v 键向下滚动。

  4. 键入 e 以编辑该行。

    此时将显示引导项菜单。在此菜单中,您可以通过向 kernel$ 行的结尾处添加其他引导参数来修改引导行为。

  5. 在该行的结尾处键入 -k

  6. 按 Enter 键以返回到 GRUB 主菜单。

  7. 键入 b 以便在启用内核调试器的情况下引导系统。

  8. 访问内核调试器。

    用于访问调试器的方法因访问系统所使用的控制台类型而异:

    • 如果使用本地连接的键盘,请按 F1–A 组合键。

    • 如果使用串行控制台,请使用适合于该类型的串行控制台的方法来发送中断信号。

    首次访问内核调试器时,将显示欢迎消息。


示例 14–7 x86: 使用内核调试器引导系统(GRUB 多引导实现)

本示例说明如何在启用了内核调试器的情况下手动引导具有 64 位计算能力的基于 x86 的系统。


kernel$ /platform/i86pc/multiboot kernel/amd64/unix -k -B $ZFS-BOOTFS

本示例说明如何在启用了内核调试器的情况下将具有 64 位计算能力的基于 x86 的系统引导至 32 位模式。


kernel$ /platform/i86pc/multiboot kernel/unix -k -B $ZFS-BOOTFS