savecore - 保存操作系统的故障转储
savecore [-dNrvV] [-D dirname] [-s secname] [-f dumpfile] [suffix] savecore -L [-v] [-D dirname] savecore -u [-dv] [-D dirname] [-f dumpfile] savecore -l [-H] [-f dumpfile] savecore -r [-v]
savecore 实用程序保存内核的故障转储(假定生成了一个故障转储),并向系统日志写入重新引导消息。在每次系统引导时 dumpadm 服务会调用该实用程序。
可以通过 dumpadm(8) 将 savecore 配置为将故障转储数据保存为压缩格式或未压缩的格式。故障转储数据会根据 dumpadm(8) 配置在转储设备上划分为一个个区段。对于压缩格式,savecore 将故障转储数据保存在名为 vmdump-{ENT£ºlt}section>¡£N 的文件中,其中,section 是实际部分的名称;生成的实际文件数取决于 dumpadm(8) 配置和 savecore 的运行方式。路径名中的 N 将替换为一个数字。每次运行 savecore 来复制转储设备中的故障转储以及在转储设备上发现新的故障转储时,该数字将会递增。如果已复制故障转储的某些部分,则该数字不会递增。文件会保存到使用 –D 选项指定的目录下创建的子目录,或保存到 dumpadm(8) 配置的故障转储目录。该子目录的格式为 data/<uuid>,其中,uuid 与此特定紧急情况事件的唯一 FMA 标识符匹配。
suffix 参数指定数字后缀。如果使用后缀参数运行 savecore,则会尝试解压缩所有名为 vmdump-<section>.N 的文件,其中,N 等于后缀参数。与 –f 选项一起使用时,后缀参数无效。
可以使用后缀参数一步解压缩所有压缩文件,或者使用 –f 转储文件选项分别解压缩。对于未压缩的格式,savecore 将故障转储数据保存在文件目录 /vmcore-<section>.N 的文件中,而将内核的名称列表保存在目录 /unix.N 中。
在对 vmcore-*.N 文件执行提取时,会对远程系统中的 vmdump-*.N 文件进行完整性验证。也可以在不执行提取的情况下使用 –V 选项单独执行该操作。如果验证失败,savecore 会将文件标记为不完整。
在写出故障转储之前,savecore 会从文件 directory/minfree 中读取一个数字。这是包含 directory 的文件系统上必须保留的空闲空间的最小千字节数。如果在保存故障转储后,包含 directory 的文件系统的空闲空间会小于 minfree 中指定的千字节数,则不会保存故障转储。如果 minfree 文件不存在,则 savecore 会假定 minfree 值为 1 兆字节。
savecore 实用程序还使用工具 LOG_AUTH 记录重新引导消息(请参见 syslog(3C))。如果系统是因为发生紧急情况而崩溃的,savecore 还会记录紧急情况字符串。
即使在发生紧急情况之后重新引导了系统,savecore 实用程序也会生成 fma(3M) 事件。
支持以下选项:
将故障转储文件保存到指定目录。如果未指定目录选项,savecore 会将故障转储文件保存到缺省 savecore 目录,即从 dumpadm(8) 配置的目录派生的目录。
忽略转储标头有效标志。强制 savecore 保存故障转储,即使转储设备中存储的标头信息指示已保存该转储时也是如此。
从指定的文件而不是从系统的当前转储设备保存故障转储。如果指定了 directory/vmdump-<section>.N,则将文件解压缩到 vmcore-<section>. N 和 unix.N,其中,N 是与压缩名称中相同的数字。
如果转储设备上存储的信息已通过 dd(8) 命令复制到磁盘上文件,则使用此选项也十分有用。
省略列标题。
保存实时运行的 Solaris 系统的故障转储,但不以任何方式实际重新引导或更改系统。此选项可强制 savecore 将系统的实时快照保存到转储设备,然后立即检索数据并将其写入指定目录中一组新的故障转储文件。只有在使用 dumpadm(8) 将系统配置为使用专用转储设备后,才能执行实时系统故障转储。
savecore –L 不会暂停系统,因此在保存转储时内存的内容会继续发生更改。这意味着实时故障转储不是完全自我一致的。
如果未指定 dumpfile,则列出已转储至转储设备中、但尚未提取的部分。如果已指定 –d,则列出已转储至转储设备中的所有部分,其中包括已提取的部分。
如果使用 –f 选项指定 dumpfile,则列出转储文件中存在的部分。指定 –f 时,–d 并无影响。
有选择地提取转储设备中的部分。可以使用 –l 选项获取可用部分的列表。缺省情况下,将提取所有可用部分。该列表的各个成员用逗号字符分隔。
可能部分的名称列表:
内核页面。
映射到进程地址空间的页面。
包含 ZFS 元数据的页面。
空闲页面或用于 ZFS 数据的页面。仅对使用 -c all 设置生成的故障转储有效。
从 vmcore.N 中提取 unix.N 二进制文件。
根据内容验证存储在转储文件中的摘要并退出。此选项必须与 –f 选项结合运行。
详细模式。显示来自 savecore 的详细错误消息。
以下命令仅从转储设备中手动提取 proc 部分:
# savecore -v -s proc
以下命令将所有提取的 vmdump-*.3 文件解压缩到相应的 vmcore-*.3 文件中:
# savecore 3
<directory>/data/< uuid>/vmdump.N(压缩的内核映像)
<directory>/data/< uuid>/vmcore.N
<directory>/data/< uuid>/vmdump-zfs.N(压缩的 ZFS 元数据)
<directory>/data/< uuid>/vmcore-zfs.N
<directory>/data/< uuid>/vmdump-proc.N(压缩的进程页面)
<directory>/data/< uuid>/vmcore-proc.N
<directory>/data/< uuid>/vmdump-other.N(压缩的其他页面)
<directory>/data/< uuid>/vmcore-other.N
<directory>/data/< uuid>/unix.N(内核二进制文件)
<directory>/N(<directory>//data/< uuid> 的符号链接)
<directory>/bounds
<directory>/minfree
/var/crash/(缺省故障转储目录)
有关下列属性的说明,请参见 attributes(7):
|
adb(1)、mdb(1)、svcs(1)、syslog(3C)、fma(3M)、attributes(7)、smf(7)、dd(8)、dumpadm(8)、svcadm(8)
系统故障转储服务由服务管理工具 smf(7) 管理,其服务标识符为:
svc:/system/dumpadm:default
可以使用 svcadm(8) 来对此服务执行管理操作(如启用、禁用或请求重新启动)。可以使用 svcs(1) 命令来查询服务的状态。
如果转储设备也用作交换设备,则必须在引导后立即运行 savecore,以免包含故障转储的交换空间被当前运行的程序覆盖。
savecore 创建文件时,会附加后缀 .partial。文件完成后,会进行重命名,去掉此后缀。如果发现转储目录中的文件带有此后缀,则意味着 savecore 仍处于忙碌状态或者在完全写入文件之前被中断。如果是前一种情况,请使用 ps(1) 查找正在运行的 savecore 进程的 PID,然后等待该进程完成。如果是后一种情况,请删除未完成文件,然后运行 savecore –d 以重新创建该文件。