![SMF 的哪个部件可能因硬断电而损坏?](https://linux22.com/image/568301/SMF%20%E7%9A%84%E5%93%AA%E4%B8%AA%E9%83%A8%E4%BB%B6%E5%8F%AF%E8%83%BD%E5%9B%A0%E7%A1%AC%E6%96%AD%E7%94%B5%E8%80%8C%E6%8D%9F%E5%9D%8F%EF%BC%9F.png)
在我的一个客户站点,当地工作人员关闭了他们的本地 Solaris 10 x86 服务器,拔掉了电源输入,移动了服务器,现在它无法正常启动。它启动后会显示一个提示,让您登录。这似乎是单用户里程碑(或同等级别)。
深入研究后,我认为 SMF 不允许系统进入多用户模式。SMF 在 autofs 上生成了大量错误,经过一番尝试后,我发现它在 inetd 和 nfs/client 上生成了错误。这一切都告诉我,问题出在某些 SMF 状态文件或数据库中,需要修复/删除/重新创建或做其他事情,但我不知道实际问题是什么。
我所说的“产生错误”是指每一秒我都会在控制台上收到一条消息,提示“方法或服务退出超时。正在终止合约 <#>。”这导致与计算机的交互变得困难。
运行 svcs –xv 显示服务为“已启用”,状态为“已禁用”,原因是“启动方法正在运行”。在服务上使用 svcadm 不会产生任何效果,只是确认服务未处于维护状态。
/lib/svc/log/$SERVICE 中的日志仅告诉您此循环每秒发生一次。 /etc/svc/volatile/$SERVICE 中的日志确认在启动时尝试启动服务,并立即停止,没有进一步的条目。请注意,system-log 没有启动,因为 system-log 依赖于 autofs,所以我没有 syslog 或 dmesg。
谷歌搜索所有这些术语最终告诉我如何调试/修复 autofs 或 nfs/client 或 inetd 或 rpc/gss(这是 SMF 用来作为阻止 nfs/client“启动”的借口的依赖关系,它声称 rpc/gss 是“未定义的”,这是不正确的,因为这一切曾经都工作正常。我使用 inetadm 重新启用了它,但 inetd 仍然无法正常启动)。但我认为问题出在 SMF 总体上,而不是单个服务。
对“manifest_import”执行 restore_repository 不会改善甚至无法明显改变这种情况。我没有使用启动备份,因为上次启动没有用。
我告诉客户,由于有价值的数据目录位于单独的文件系统上(fsck 干净,因此完好无损),我们可以在 / 分区上重新安装 solaris 10。但这似乎是一种非常类似于 Windows 的解决方案,无法解决这个问题。
那么。您知道哪个部件坏了以及我该如何修复它吗?
更新 1:我可能应该提到,该系统有两个文件系统,/ 和 /export。 fsck 都清理干净并正确挂载。
答案1
此类问题的一个常见根本原因是由于某些文件系统损坏而导致挂载文件系统时出现问题。这种情况变得相当罕见,尤其是对于本地文件系统,但您的客户没有通过禁用 ufs 日志记录(这可以避免大多数因突然断电而导致的文件系统损坏)和不使用 ZFS(从设计上讲,它首先就不会损坏)来增加自己的胜算。
console=graphics
您可以通过编辑 /boot/grub/menu.lst 来启用详细 smf 启动。具体方法取决于您的 Solaris 版本和更新,但通常通过在console=text -v -m verbose
加载内核的行中替换 来完成。
如果您想以单用户模式启动,请使用console=text -v -m verbose,milestone=single-user
。
要启用 smf 调试模式,请使用console=text -v -m debug
请注意,您可以使用 grub 编辑模式来临时设置这些选项。