本节介绍如何修复损坏的系统记帐文件以及如何重新启动 runacct 脚本。
遗憾的是,系统记帐并不十分安全。有时候,文件会损坏或丢失。有些文件可以忽略,也可以从备份中恢复。但是,有些文件则必须修复,才能维护系统记帐的完整性。
wtmpx 文件可能会引发每日系统记帐操作中的大多数问题。手动更改日期并且系统处于多用户模式时,会向 /var/adm/wtmpx 文件中写入一组日期更改记录。wtmpfix 实用程序旨在出现日期更改时调整 wtmp 记录中的时间标记。但是,部分日期更改和重新引导的组合会跳过 wtmpfix 实用程序并导致 acctcon 程序失败。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
转到 /var/adm 目录。
将 wtmpx 文件从二进制格式转换为 ASCII 格式。
# /usr/lib/acct/fwtmp < wtmpx > wtmpx.ascii |
编辑 wtmpx.ascii 文件以删除损坏的记录。
# /usr/lib/acct/fwtmp -ic < wtmpx.ascii > wtmpx |
有关更多信息,请参见 fwtmp(1M) 手册页。
如果要向用户收取系统资源费用,则 /var/adm/acct/sum/tacct 文件的完整性极为重要。有时候,会出现异常的 tacct 记录,其中包括负数、重复的用户 ID 或用户 ID 65535。首先,使用 prtacct 脚本列显 /var/adm/acct/sum/tacctprev 文件,以检查该文件。如果内容没有问题,则修补最新的 /var/adm/acct/sum/tacct MMDD 文件。然后,重新创建 /var/adm/acct/sum/tacct 文件。以下步骤概括了一个简单的修补过程。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
转到 /var/adm/acct/sum 目录。
将 tacctMMDD 文件从二进制格式转换为 ASCII 格式。
# /usr/lib/acct/acctmerg -v < tacctMMDD > xtacct |
MMDD 是一对表示月份和日期的两位数。
编辑 xtacct 文件,删除损坏的记录并将重复记录写入另一个文件。
将 xtacct 文件从 ASCII 格式转换为二进制格式。
# /usr/lib/acct/acctmerg -i < xtacct > tacctMMDD |
将文件 tacctprev 和 tacct.MMDD 合并到 tacct 文件中。
# /usr/lib/acct/acctmerg < tacctprev tacctMMDD > tacct |
以下是最常见的原因:
系统崩溃
/var 目录空间不足
wtmpx 文件损坏
如果存在 active.MMDD 文件,请先检查该文件中是否有错误消息。如果存在 active 和 lock 文件,请检查 fd2log 文件中是否有任何相关消息。
如果不带任何参数运行 runacct 脚本,则该脚本会假定这一次调用是当天的第一次调用。如果 runacct 脚本正在重新启动并指定 runacct 脚本重新运行记帐的月份和日期,则参数 MMDD 是必需的。进行处理的入口点基于 statefile 文件的内容。要覆盖 statefile 文件,请在命令行中包括所需的状态。有关可用状态的说明,请参见 runacct(1M) 手册页。
手动运行 runacct 程序时,请确保以用户身份 adm 运行该程序。