如果发生意外,IBM AIX® 操作系统会崩溃,此时您可能希望能够自动搜集相关信息。利用转储(dump)设备,可在这些设备上部署核心转储功能,从而准备转移到 IBM 支持。

David Tansley, 系统管理员, Ace Europe

//ibm.com/developerworks/i/p-dtansley.jpgDavid Tansley 是一位自由作家。他有 15 年 UNIX 系统管理经验,最近 8 年使用 AIX。他喜欢打羽毛球和观赏一级方程式赛车,但是最喜欢与妻子一起开着 GSA 摩托车旅行。



2012 年 7 月 30 日

简介

如果由于意外事件导致系统崩溃,则会发生核心转储。事实上,并非总在出现系统崩溃时才发生核心转储。然而,在本文中,假定系统崩溃是由于严重事件或用户强制性动作所引起的。转储包含了达到崩溃时内存的内容。就其本质而言,崩溃总是不期而至,因而当崩溃发生时,系统管理员还是应当事先做好防范措施。能够确定崩溃的发生是否是由系统重启引起,此时在错误日志里存在具有标签为 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 压缩文件格式。

snap 命令可用于搜集转储文件相关信息,要确保包含 -D 标志,它将从主转储设备搜集信息。

现在,随着系统的可用内存空间越来越大,这使得主转储设备的放置位置更加灵活。通常,对于具有超过 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 -k for false, sysdumpdev -K for 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 产品试用版中进行选择。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX, Java technology, Open source
ArticleID=828143
ArticleTitle=了解转储设备
publish-date=07302012