当前位置: 首页>>技术教程>>正文


boot – 如何让Ubuntu“防断电”?

,

问题描述

我喜欢在 ‘kiosk’ 每天使用时运行无人值守的系统。

然而,系统可能随时关闭,而之前没有人进行适当的关闭。默认情况下,Ubuntu 不会因断电而关闭。断电后重新启动后,可能会运行 fsck 来检查文件系统,并且 fsck 可能会告诉系统在完成后重新启动。因此,即使没有配置数据被损坏,机器在断电后也可能无法正常启动。所以我测试了一些解决方法:

  1. 将根挂载 fsck 优先级更改为 0(fstab 根条目中的最后一个字段)\n这可防止每次断电后运行 fsck。但是,系统可能会以 root 只读方式启动,这不是许多服务所期望的,并会导致控制台登录提示而不是图形登录。

  2. errrors=remount-ro 替换为 errors=continue 。这给人一种不好的感觉,即不一致的文件系统可能会导致进一步的数据丢失。然而,再次启用 fsck 后,应该会提高断电后系统的启动能力。所以我放弃了1)。

  3. 重新配置 grub2 以在引导失败后使用正常的默认选项超时。为此,我已将 GRUB_RECORDFAIL_TIMEOUT=0 添加到 /etc/default/grub

然而,很难知道这些黑客行为是否能够防止系统断电。有任何想法吗?还有人可以做吗?

最佳方法

对于 kiosk 应用程序,可以通过使用只读根分区来解决该问题。此外,用户所做或保存的任何更改都会在下次重新启动时撤消。

为了为大多数应用程序需求提供可写根,overlayfs 可用于用可写 ram tempfs 覆盖只读分区。

有一个脚本可以帮助在 https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash 的底部创建这样的设置。该脚本包含进行此设置的说明:

  • 将文件放入 /etc/initramfs-tools/scripts/init-bottom/root-ro

  • sudo chmod 0755 root-ro

  • sudo update-initramfs -u

我建议将GRUB_RECORDFAIL_TIMEOUT=0添加到/etc/default/grub并运行sudo update-grub,否则可能会出现启动菜单而没有超时。

之后,重新启动。然后机器以只读模式启动,可以通过 mount 检查。所应用的任何更改都将在下次重新启动时消失。要进行任何更改、安装软件和更新等,您只需进入 GRUB 菜单,按 e 更改引导命令行,并将 disable-root-ro=true 附加到以 kernel 开头的行。按 F10 继续启动。然后,您可以使用 mount 来确认 root 是否像往常一样安装为可写。进行更改并重新启动,系统再次变为只读。

次佳方法

有时,在不正常的重新启动后(例如断电或按下重置按钮,甚至内核崩溃),系统将不会启动,要求您按 “y” 进行 fsck 来修复分区。

如果您想避免这种情况,请编辑 /etc/default/rcS 并更改:

FSCKFIX=no

到:

FSCKFIX=yes

这将确保此修复自动运行,而不提示您。

缺点可能是您可能会丢失数据,如果硬盘上有任何未备份的重要内容,您可能需要先取出硬盘并克隆它。

例如,如果您的硬盘驱动器控制器出现故障,并且 fsck 错误地将分区识别为损坏并尝试修复它,则可能会导致原本可以避免的数据丢失。我自己从未经历过这种情况,并且在过去 7 年左右的时间里处理过近千台服务器 – 但这仍然是需要记住的事情。

第三种方法

截至今天,对于信息亭只读解决方案,还可以通过以下方式安装软件包 overlayroot

sudo apt-get install overlayroot

这将轻松提供一个完整的解决方案,例如已批准的答案之一。它还允许有益的命令

sudo overlay-chroot

它将登录到一个 shell,该 shell 将以前的只读基础磁盘安装在 / 上。然后可以对受保护的系统进行任何更改,例如使用 apt-get 将软件包安装到以前的只读磁盘。但是,强烈建议退出 shell 后重新启动,因为 RAM 上的临时覆盖文件可能会掩盖新安装的文件。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14091.html,未经允许,请勿转载。