如何在 debian 9 每次启动时自动修复 grub

如何在 debian 9 每次启动时自动修复 grub

正如标题所说,我需要一种自动修复 grub 的方法,以防它损坏。我在商店里有一台带有本地服务器(Nginx、PostgreSQL 等)的电脑,在这个城市,停电是很常见的,当发生这种情况时,grub 就会崩溃。发生电源故障时,以下引导显示 grub 救援,并显示错误:未知文件系统

有一次,他试图强制执行 fsck,但没有成功。到目前为止,唯一的方法是亲自前往带有实时 ubuntu 的闪存驱动器的地方,安装引导修复并修复它。当发生断电时,我无法随时可用,我需要一个解决方案,即使不需要,也可以在每次启动时进行修复,但我不知道如何调整我对启动修复所做的操作(以图形方式)这种情况。

预先非常感谢您。如果有什么不明白的地方,抱歉英语

版本:Debian 9.7.0 64位

答案1

断电不是寻找 GRUB 的导弹。 GRUB救援模式启动表明GRUB的核心镜像实际上是好的;它只是无法从 读取其配置/boot/grub/grub.cfg

unknown filesystem错误让我认为存在某种文件系统问题,并且boot-repair可能会通过执行文件系统检查来修复它作为副作用。

现代文件系统对于突然断电导致的文件系统损坏相当稳健,但稳健性通常只涵盖文件系统结构本身的完整性:如果应用程序所需的数据在断电之前没有写入磁盘,则没有任何文件系统检查将重建它。

如果该系统对于企业的运营很重要,那就意味着它的故障可能会导致明显的、可量化的金钱损失。即使失去一天的生意也比小额交易的价格便宜不间断电源供应?不?那么我的第一个建议是:不要试图应用一次性快速修复方法,而是使用 UPS 来彻底消除问题。

你的分区怎么样?如果您的/boot目录是根文件系统的一部分,并且文件系统类型是 XFS,并且文件系统尚未完全安装,则可能会导致 GRUB 的只读 XFS 驱动程序出现问题。在这种情况下,更好的解决方法可能是将其拆分/boot为具有更简单文件系统类型的单独文件系统,也许是ext3.您甚至可以将单独的/boot文件系统保持为只读安装,甚至在大多数情况下完全卸载:仅在安装内核更新或更新 initramfs 文件时才需要从操作系统内部访问它。

系统使用的是 UEFI 固件还是旧版 BIOS?这将影响可用的替代引导加载程序的类型。

您甚至可以从 获取系统的内核 ( /boot/vmlinuz-*) 和 initramfs ( /boot/initrd.img-*) 文件以及内核引导选项/boot/grub/grub.cfg,并准备一个 USB 记忆棒,使用完全相同的选项引导相同的内核和 initramfs 组合。一旦内核启动并提供了 initramfs 内容和启动选项,一切就不再重要了如何系统到了这个地步。从此类 USB 介质启动与从系统磁盘启动几乎没有什么区别。

(如果使用旧版 BIOS,内核甚至不一定有任何方法知道它是从哪个介质启动的;使用 UEFI,启动BootCurrent变量将提供线索,但操作系统通常不会将其用于任何用途。 )

这至少会让系统达到 initramfs:从那里,您可以获得更好的诊断,以了解实际发生的故障类型,并且实际上很有可能默认情况下自动修复问题,无论是通过由内核的全功能文件系统驱动程序执行的自动日志恢复,或者在检测到文件系统错误时由自动文件系统检查执行的自动日志恢复。

相关内容