我如何使 Ubuntu“断电证明”?

dro*_*nus 19 boot shutdown

我喜欢在无人值守的情况下运行系统,以便每天使用“自助服务终端”。

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

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

  2. 替换errrors=remount-roerrors=continue。这给人一种不好的感觉,即不一致的文件系统可能会导致进一步的数据丢失。但是,fsck再次启用后,它应该会增加系统断电后的启动概率。所以我放弃了1)。

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

然而,很难知道这些黑客是否使系统断电。有任何想法吗?还有什么可以做的吗?

dro*_*nus 16

对于 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并附加到以内核开头的行。按 F10 继续启动。然后,您可以mount像往常一样使用来确认 root 已挂载为可写。进行更改并重新启动,系统再次只读。


Rom*_*man 9

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

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

FSCKFIX=no
Run Code Online (Sandbox Code Playgroud)

到:

FSCKFIX=yes
Run Code Online (Sandbox Code Playgroud)

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

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

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


dro*_*nus 8

截至今日,对于亭只读的解决方案一个也可以安装包overlayroot通过

sudo apt-get install overlayroot
Run Code Online (Sandbox Code Playgroud)

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

sudo overlay-chroot
Run Code Online (Sandbox Code Playgroud)

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