【问题标题】:OracleSolaris 11.2 crashes at bootOracle Solaris 11.2 在引导时崩溃
【发布时间】:2015-07-15 18:53:16
【问题描述】:

作为 PCI 驱动程序开发实验的结果,我的内核崩溃了。现在我处于操作系统启动并再次崩溃的情况,因为它试图加载我的错误驱动程序。修复它的方法是什么,可能避免启动我的驱动程序,以便我可以在“安全”模式下登录系统,然后修复我的驱动程序或至少从系统中卸载?

UPDATE阅读http://docs.oracle.com/cd/E36784_01/pdf/E36801.pdf等文档后,看来步骤如下:

1) 从 solaris CD 引导

2) 选择外壳

3)zpool import -R /a rpool

4) zfs mount rpool/ROOT/zfsBE

5) cd /a 并从/usr/kernel/drv/ 中删除有故障的驱动程序

不完全确定,我不想再搞砸系统,所以想得到 Solaris 专家的确认。

UPDATE2 所以上面的修复方案 几乎 对我有用,也就是说我能够导入 rpool 并且这会自动安装 @987654326 @ 在/a 下,这让我可以删除我的错误驱动程序,因为之前我从/usr/kernel/drv 建立了一个到它的软链接;基本上我能够重新启动并启动solaris,没有任何问题,也没有错误消息,所以我什至没有运行fsck。但是对我不起作用的是zfs mount rpool/ROOT/solaris,它是一个根FS,因为我想从/usr/kernel/drv 中删除一个链接。错误消息说我应该使用mount 来执行此操作。

顺便说一句,现在我将我的驱动程序复制到/tmp 并创建一个链接/usr/kernel/drv/amf64/mydrv,因此在崩溃的情况下,系统会重新启动并清理/tmp 分区。稍后我需要在 beadm 上投入一些时间。

谢谢。

【问题讨论】:

  • 这就是为什么你应该使用 beadm 来创建一个额外的引导环境,所以你只需要在引导时选择一个不同的 grub 菜单项来回到一个工作的内核。不过,只有在安装损坏的驱动程序之前这样做才有帮助。
  • @alanc。的确。在开发我的第一个内核模块的早期,我学到的第一件事是“计划在没有该模块的情况下重新启动。”

标签: crash solaris device-driver pci opensolaris


【解决方案1】:

从 CD/DVD 启动,或阅读 page 81 of this document,假设您在 x86 硬件上运行。

基本上,您需要绕过设备的加载。如果您没有安全模式 GRUB 选项(再次假设 x86),或者如果安全模式仍然加载您的驱动程序,那么仅引导 Solaris CD/DVD、挂载/导入根池以及从文件系统中删除您的驱动程序。

【讨论】:

  • 感谢您的回复。这是 x86 机器,什么是安全模式 GRUB 选项以及它如何提供帮助?您能否介绍一下从 solaris CD 引导后如何挂载/导入根池?
  • 请查看我更新的原始消息,特别是我发现的用于导入和挂载根 FS 的命令。谢谢。
  • 是的,如果您没有获得故障保护或“安全启动”选项,这几乎是最简单的方法。 Solaris 10 将在 x86 上提供这样的选项,尽管我在 Solaris 11 上没有找到任何文档 - 请参阅 docs.oracle.com/cd/E26505_01/html/E29492/ggqdn.html。正如@alanc 在他的评论中提到的,创建备份引导环境是另一种方法。请参阅docs.oracle.com/cd/E36784_01/html/E36803/index.html 了解如何执行此操作。请注意,单个 ZFS 根池上的多个引导环境的一个副作用是文件系统克隆和快照的混乱。
  • 我更新了我原来的帖子。基本上它对我有用。崩溃转储是在 /var/crash 中创建的,我可以使用 rm 安全地删除它还是应该使用一些特殊命令?
  • @Mark - 只是rm 那里的文件。你知道为什么你的机器崩溃了。请参阅man dumpadm 了解如何控制内核故障转储文件的生成,包括禁用它们的创建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
相关资源
最近更新 更多