问题描述
我的系统挂起 (hang) 的时候,我执行了一个 TOC(Transfer_Of_Control)以强制进行内存转储,但在重新引导之后 savecrash 显示没有可保存的有效转储。或者在系统崩溃时,未保存任何转储。
配置信息
HP UNIX 11.00 和 11.11
解决方法
转储概念
系统硬件检测错误 (HPMC)、操作系统引起的恐慌 (Panic) 以及系统挂起 (hang) 必须提供有关失败原因的信息,这样才能制定出一个解决方案。HPUX 使用的方法需要创建系统内存转储、发生故障时的 Kernel 状态快照,HP 解决方案从这些内容进行分析才能提供根本的原因以及补救措施。 Kernel 产生于 /stand/system 文件,它通常包含一个到转储设备 (默认状态下为 Swap Logical Volume) 的矢量 (指针)。进行引导时,该矢量将拷贝到不可变内存中。假如发生了前面提到的故障,硬件会将来自可疑操作系统的处理重新定向到固件例程 (firmware routine),以保存该转储。这些固件副本会将部分 RAM 拷贝到该转储矢量指向的目标磁盘中。
对于可疑操作系统,转储之后会进行重新引导。
重新引导过程中执行的 /sbin/init.d/savecrash 会导致 savecrash 命令检查该转储设备是否存在有效转储 (注重 1)。假如存在有效转储,savecrash 则会将其拷贝到一个预先确定的文件系统,在此系统中用户可以对这些数据进行操作以提取有用信息,假如不存在,savecrash 则会退出。
转储失败的原因可能是:
o Kernel 中没有转储矢量
o 有缺陷的 PDC 固件,即无法正确执行 TOC
o Kernel 中转储矢量已损坏,即无效堆栈设备
o 有缺陷的转储设备,即磁盘无法接收 RAM 快照
o 电源或其他抢占转储保存例程的其它硬件故障
o 堆栈已损坏,通常是由于硬件故障引起的
Kernel 中没有转储矢量
检查 /stand/system 文件,寻找无转储规则或表明: dump none 的内容。假如不存在这样的内容,则添加转储 lvol 行并重新生成该 Kernel。
有缺陷的 PDC 固件
有缺陷的 PDC 固件需要 CE 对其进行重新编写。PDC 固件版本记录在 /var/tombstones/ts99 中,或者可以通过 STM 查看。
TOC 矢量已损坏
Kernel 中或 HP 应用软件中存在已知的缺陷,这些缺陷可能损坏了 Kernel 内存中的 TOC 矢量,以至 TOC 无法定位转储设备。这种情况的症状是强制的 TOC 似乎会挂起 (hang)。
下列补丁程序已经修正了 TOC 矢量损坏问题。 10.20: PHSS_14978 :PDCINFO:A.02.24:TOC:vector:corruption: 11.00: PHSS_14982 :PDCINFO:A.02.24:TOC:vector:corruption: PHKL_20937 :PANIC:TOC:core dump: 11.04: PHKL_23017 :VVOS:PANIC:TOC:core:dump: 有缺陷的转储设备
转储设备通常为 Swap Logical Volume,该设备与引导 lvol 及 root lvol 位于同一个磁盘中。假如 Kernel 出现如挂起这样的问题,则可能表示磁盘要发生问题。引导问题和转储问题是其他的指示内容。
硬件、电源故障
有时候,系统崩溃的根本原因是由于电源系统问题而导致的电源短缺。这自然不会进行转储。
转储已损坏
savecrash 命令检查转储是否存在有效转储时,它会寻找一个转储 magic number (注重 1)。假如由于硬件故障而无法生成有效的 magic number,则该转储本身可能已经损坏了。
注重 1: UNIX 文件 (包括 Kernel 及转储映象) 在文件开始都有一个 "magic number" 来识别它们所代表的文件类型。当 PDC 将其拷贝到转储设备时,它会在 RAM 快照的开始放置一个 "dump magic number"。假如 TOC 没有成功,则该 "dump magic number" 不会出现在转储设备的预期位置上。
注重 2: 转储设备默认为 Swap Logical Volume。系统治理员可以根据需要添加更多的 Swap 设备。为了确定转储设备,请执行下面的命令:
# lvlnboot -v /dev/vg00
Boot Definitions for Volume Group /dev/vg00:
Physical Volumes belonging in Root Volume Group:
/dev/dsk/c1t5d0 (52.5.0) -- Boot Disk
/dev/dsk/c1t6d0 (52.6.0) -- Boot Disk
Boot: lvol1 on: /dev/dsk/c1t6d0
Root: lvol3 on: /dev/dsk/c1t6d0
Swap: lvol2 on: /dev/dsk/c1t6d0
Dump: lvol2 on: /dev/dsk/c1t6d0, 0
注重 3: savecrash (11.X) = savecore (10.X HPUX)
另请参阅 man crashconf(2)、/usr/share/doc/sys_crash.txt、 /etc/rc.config.d/savecrash /etc/rc.config.d/crashconf