如果由于意外事件导致系统崩溃,则会发生核心转储。事实上,并非总在出现系统崩溃时才发生核心转储。然而,在本文中,假定系统崩溃是由于严重事件或用户强制性动作所引起的。转储包含了达到崩溃时内存的内容。就其本质而言,崩溃总是不期而至,因而当崩溃发生时,系统管理员还是应当事先做好防范措施。能够确定崩溃的发生是否是由系统重启引起,此时在错误日志里存在具有标签为 SYSDUMP 的条目。
在本演示中,我使用的是 AIX 7.1。不过,我所讨论的原理也适用于 AIX 5.3 和 6.1。
要想防范意外的系统崩溃,需要确保具有转储设备逻辑卷 (LV),用于在系统恢复时存放转储。然而,如果转储设备不可用,那么应该指定第二转储设备来存放转储。可能人们并不关心系统崩溃何时发生,因而也对进一步研究转储文件不感兴趣。这完全取决于系统所有者。但是,为保障系统正常运行,在 rootvg 中包含主转储设备是很好的做法,也是很有必要的。可为转储设备执行镜像,但是,IBM AIX 支持对此发出警告。这是因为崩溃可能会被执行镜像或同步相关,这会导致转储设备上的镜像无效。在某些情况下,转储文件仅会被复制到镜像转储设备(位于镜像磁盘中)的其中一个副本,当系统重启时,很可能仅恢复转储文件副本一半的内容,最好的做法是,将主转储设备放到一个非镜像的磁盘中,将第二设备放到另一个非镜像磁盘中。然而,对 rootvg 转储设备执行镜像比较常见。只要第二转储设备不在分页空间中,或不在磁带设备之类的外部设备中,则它可以位于 rootvg 内部,也可位于其外部。
通常,用于系统转储的默认转储设备是:/dev/hd6(分页空间),且仍然存在于多个系统中。当系统崩溃时,如果没有足够的空间来复制转储文件,那么将提示管理员重启,以便将转储文件复制到磁带或 DVD 等可移动介质中。这将会很耗时,而且有时您很可能希望系统可以快速备份。我很同情那些起初由于业务压力忽略了系统备份提示,从而删除了转储,因而无法了解崩溃原因的系统管理员。如果转储设备上没有足够的空间来复制转储,那么在启动过程中,会调用 copydumpmenu 菜单工具来允许系统管理员将转储复制到磁带设备(如果存在)之类的可移动介质中。在系统启动后,还可通过命令行来调用 copydumpmenu 工具。默认复制目录是 /var/adm/ras,文件名为:vmcore.<X>.BZ,其中 X 是序列号。转储文件是 BZ (BZIP),且不是 Z 压缩文件格式。
现在,随着系统的可用内存空间越来越大,这使得主转储设备的放置位置更加灵活。通常,对于具有超过 4 GB 内存的系统,有专用的转储设备,称为:lg_dumplv
# lsvg -l rootvg |grep sysdump lg_dumplv sysdump 8 8 open/syncd N/A |
利用 sysdumpdev 命令,可决定系统转储所采用的设备。
以下输出展示了使用 AIX 7.1 的系统,该系统将 lg_dumplv 作为其主转储设备:
# sysdumpdev -l primary /dev/lg_dumplv secondary /dev/sysdumpnull copy directory /var/adm/ras forced copy flag TRUE always allow dump TRUE dump compression ON type of dump traditional |
仔细研究以上输出字段。请注意此刻出现了有关 AIX 6.1 前面的额外字段:type of dump。当前设置为 traditional,如果硬件支持,还可在 (firmware) fw-assisted 进行设置。对于第二字段,没有转储设备。这通过利用 sysdumpnull 设备来表示。这意味着如果采用该设备,则所有系统转储将丢失。复制目录是 /var/adm/ras,这是系统转储将要复制到的位置,以便可以进行进一步检查,也可以复制其来转移到 IBM 支持。注意,'always allow dump' 设置为真,如果想要成功启动转储,就必须这样设置。默认对转储文件进行压缩。
使用 sysdumpdev 的常用设置:
- 更改主设备使用:
sysdumpdev -P -p <device_name> - 更改第二设备使用:
sysdumpdev -P -s <device_name> - 更改复制目录使用:
sysdumpdev -D <path_name> - 更改转储条件使用:
sysdumpdev -kfor false,sysdumpdev -Kfor true - 更改转储类型使用:
sysdumpdev -t <fw-assisted | traditional>
要想启动转储,(在其过程中重新启动系统)可采用 sysdumpstart 命令,以下命令采用主设备来存放转储:
# sysdumpstart -p |
该流程启动后,系统 LED 面板或者 HMC 屏幕,在 my Power 5 方框中显示 00c2。这标志着转储正在进行。bootystem 重启后,错误日志中会包含如下条目:
# errpt |more IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION A6DF45AA 1027180611 I O RMCdaemon The daemon is started. 67145A39 1027180411 U S SYSDUMP SYSTEM DUMP F48137AC 1027180411 U O minidump COMPRESSED MINIMAL DUMP A6DF45AA 1027180411 I O RMCdaemon The daemon is started. 9DBCFDEE 1027180511 T O errdemon ERROR LOGGING TURNED ON |
进一步研究错误报告状态:
Type: UNKN
WPAR: Global
Resource Name: SYSDUMP
Description
SYSTEM DUMP
Probable Causes
UNEXPECTED SYSTEM HALT
User Causes
SYSTEM DUMP REQUESTED BY USER
Recommended Actions
PERFORM PROBLEM DETERMINATION PROCEDURES
Failure Causes
UNEXPECTED SYSTEM HALT
Recommended Actions
PERFORM PROBLEM DETERMINATION PROCEDURES
Detail Data
DUMP DEVICE
/dev/lg_dumplv
DUMP SIZE
63894528
TIME
Thu Oct 27 18:02:28 2011
DUMP TYPE (1 = PRIMARY, 2 = SECONDARY)
1
DUMP STATUS
0
|
通过以上输出,可见转储转移到了主转储设备。
利用以下 sysdumpdev 命令,还可确定在主设备上转储的发生。还显示了有关日期、大小、设备名和转储是否成功等信息:
# sysdumpdev -L 0453-039 Device name: /dev/lg_dumplv Major device number: 10 Minor device number: 16 Size: 63894528 bytes Uncompressed Size: 498002880 bytes Date/Time: Thu Oct 27 18:02:28 BST 2011 Dump status: 0 Type of dump: traditional dump completed successfully |
以下内容还会使您了解最新的系统转储,其大小和位置为:
# sysdumpdev -z 63894528 /dev/lg_dumplv |
压缩的转储现在位于 LV lg_dumplv。当发布一个用户发起的转储时,转储没有被复制到复制目录中。想要从系统转储设备将最新的系统转储复制到一个目录中,可利用 savecore 命令。例如,要将转储复制到目录 /var/adm/ras。可采用:
# savecore -d /var/adm/ras vmcore.0.BZ |
如果想利用 dmpuncompress 工具来解压该文件。命令格式是:
dmpuncompress < filename> |
完成解压后,就可利用 kdb 来对转储文件进行进一步研究,或将其转移到 IBM 支持中心。
# dmpuncompress vmcore.0.BZ replaced with vmcore.0 |
另外,还可利用 smit 转储菜单选项,并选择 Copy a system dump。以下屏幕显示:
Copy dump image to:
Type or select values in entry fields.
Press Enter after making all desired changes.
[Entry Fields]
* Copy dump image from: [/dev/lg_dumplv] /
* Copy dump image to: [/var/adm/ras/dump_fil>
* Input and output file blocksize for copy [4096] #
Size in bytes of dump image 63894528
Date of last dump Thu Oct 27 18-02-28 B>
|
该字段使用位于主转储设备中的当前转储来填充。这是默认设置,复制完成后,转储文件位于:/var/adm/ras:
# ls -l dump_file_copy.BZ -rw-r--r-- 1 root system 63894528 Oct 27 18:15 dump_file_copy.BZ |
发生转储后,还会生成微转储 (minidump)。在本文前面所列出的 errorlog 输出中,有一个条目可用于:
F48137AC 1027180411 U O minidump COMPRESSED MINIMAL DUMP |
微转储是一种小型压缩转储,位于:/var/adm/ras。当系统被转储或者发生崩溃时,该文件会包含一个系统快照。该文件用于诊断是否存在主转储,这是因为转储被移除或是未捕获到。
在前面的演示当中,在 'sysdumpdev -l' 输出中,第二转储设备设置为 /dev/sysdumpnull。这意味着,如果转储到达该第二设备时,将会被丢失。每个到达的事物直接进入 dustbin,这种行为很像 NULL 设备。现在创建第二设备,并更改 sydumpdev 属性来反映这一新变化。因此,可以确保,如果第一转储设备不可用,转储将会被转到第二设备。
在本演示中,主设备采用了 8 个逻辑分区(如前面的输出中所示)。这也是将为第二设备创建的数量。不过,我将首先介绍确定转储设备大小所需的操作。
首先,我们需要了解 AIX 生成的转储的可能大小,然后,使用该数为基础来创建设备。利用具有 'e' 选项的 sysdumpdev 命令,将会准确猜测所需的大小。最好在系统正常使用且非空闲时来运行此命令:
# sysdumpdev -e 0453-041 Estimated dump size in bytes: 282486374 |
请注意,如果 compressed 开始,则 sysdumpdev 返回的字节数是针对压缩转储,而不是未压缩的文件大小。前述命令返回了 282486374 字节。为方便使用,可将其转换为 MB:
# expr 282486374 / 1024 / 1024 269 |
接下来,增加大约 50%,(大约 135 MB)用于系统过载时存储崩溃数据,这样空间大小为 404MB。这个数字是我在创建转储设备时需要达到的最小目标。此外,还要注意,将要复制到的文件系统也必须留有至少为该数量的可用空间,否则复制会失败。
首先,确保主设备 lg_dumplv 没有镜像到 rootvg,而仅位于单一磁盘中。那么,可将第二磁盘放置在另一个磁盘中。从以下输出中,可以确定仅存在 lg_dumplv 的一个副本:
# lsvg -l rootvg rootvg: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT hd5 boot 1 2 2 closed/syncd N/A … ... livedump jfs2 2 4 2 open/syncd /var/adm/ras/livedump lg_dumplv sysdump 8 8 1 open/syncd N/A |
接下来,查询 LV lg_dumplv 来看看它位于哪个或哪些磁盘上。通过以下输出可见,lg_dumplv 仅位于 hdisk0。那么一切顺利。现在可以创建第二设备了,它将位于 rootvg 磁盘:hdisk1。
# lslv -m lg_dumplv lg_dumplv:N/A LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0008 hdisk0 0002 0009 hdisk0 0003 0010 hdisk0 0004 0011 hdisk0 0005 0012 hdisk0 0006 0013 hdisk0 0007 0014 hdisk0 0008 0015 hdisk0 |
要确定创建第二设备时需要使用多少个逻辑分区 (LP),可查询 rootvg 卷组,并注意 PP 大小。在以下输出中,其大小为 128MB。
# lsvg rootvg VOLUME GROUP: rootvg VG IDENTIFIER: 00c23bed00004c00000 0013142b3b106 VG STATE: active PP SIZE: 128 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 270 (34560 megabyte … … |
因此,需要创建至少为 404 MB 的 LV,共需要四个分区(这相当于大小为 512 MB 的 LV)。用于创建 LV 的命令是 mklv。利用 mklv 命令来创建系统转储类型的基本格式是:
mklv -t sysdump -y <LV name> < volume group> < number of LP's> <hdisk to reside on> |
假设如下:
- LV 称为 lg_dumplv2
- 它位于 hdisk1
- 它具有 4 个分区
可运行以下命令来创建 LV:
# mklv -t sysdump -y lg_dumplv2 rootvg 4 hdisk1 |
然而,如前所述,在本演示中,第二设备是使用与当前主设备相同的分区数量来创建,其数量为 8。以下命令可实现这一结果,其中的 hdisk 和 LV 名称与前面 mklv 命令中所运行的相同:
# mklv -t sysdump -y lg_dumplv2 rootvg 8 hdisk1 |
首先,通过查询 LV lg_dumplv2,确定它确实是创建在 hdisk1 上:
# lslv -m lg_dumplv2 lg_dumplv2:N/A LP PP1 PV1 PP2 PV2 PP3 PV3 0001 0003 hdisk1 0002 0004 hdisk1 0003 0005 hdisk1 0004 0006 hdisk1 0005 0007 hdisk1 0006 0008 hdisk1 0007 0009 hdisk1 0008 0010 hdisk1 |
虽然已经创建了 LV,但其并未激活,还处于关闭状态,可通过查看包含在 rootvg 中的 LV 来确定:
# lsvg -l rootvg rootvg: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT hd5 boot 1 2 2 closed/syncd N/A hd8 jfs2log 1 2 2 open/syncd N/A … … lg_dumplv sysdump 8 8 1 open/syncd N/A lg_dumplv2 sysdump 8 8 1 closed/syncd N/A |
下一个任务是激活它,可利用上文提到的 sysdumpdev 命令将其指定为第二设备,从而实现激活,具体如下:
# sysdumpdev -Ps /dev/lg_dumplv2 primary /dev/lg_dumplv secondary /dev/lg_dumplv2 copy directory /var/adm/ras forced copy flag TRUE always allow dump TRUE dump compression ON type of dump traditional |
接着,查看 rootvg 来确定是否完成激活:
# lsvg -l rootvg rootvg: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT hd5 boot 1 2 2 closed/syncd N/A hd8 jfs2log 1 2 2 open/syncd N/A … … lg_dumplv sysdump 8 8 1 open/syncd N/A lg_dumplv2 sysdump 8 8 1 open/syncd N/A |
一切顺利,现在启动转向第二设备的系统转储对其进行测试:
# sysdumpstart -s |
重启后,通过查询 sysdumpdev 来查看最新系统转储的位置,从而确定系统转储已到达第二设备:
# sysdumpdev -L 0453-039 Device name: /dev/lg_dumplv2 Major device number: 10 Minor device number: 18 Size: 64955392 bytes Uncompressed Size: 502517142 bytes Date/Time: Thu Oct 27 18:19:37 BST 2011 Dump status: 0 Type of dump: traditional dump completed successfully |
从前面的输出可见,转储确实到达了第二设备。
可利用 savecore 命令,将最新转储复制到目录中,用于深入研究或准备从系统中移除。
# savecore -d /var/adm/ras vmcore.0.BZ |
如果系统崩溃,当然希望掌握有关崩溃事件的记录。利用转储设备来搜集此类信息,就能够掌握崩溃发生前的事件记录,这有助于在和 IBM 一起进行错误分析时拥有充分的准备。
学习
- 访问 AIX 7.1 信息中心,了解更多信息。
- AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
- AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
- AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
-
AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
- IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。
获得产品和技术
- 免费 试用 IBM 软件。下载产品试用版,登录在线试用版,使用沙盒环境中的产品,或通过云进行访问。从 100 多种 IBM 产品试用版中进行选择。
讨论
- 参与论坛讨论。
- 在 Twitter 上关注 developerWorks。
- 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
- 加入 面向开发人员的博客。
- 加入 AIX 与 UNIX® 论坛:
- AIX 论坛
- 面向开发人员的 AIX 论坛
- 集群系统管理
- 性能工具论坛
- 虚拟化论坛
- 更多有关 AIX 与 UNIX 论坛 的信息
