systemd 无法卸载 initramfs 中手动挂载的 NFS 共享

systemd 无法卸载 initramfs 中手动挂载的 NFS 共享

我的无盘实验室计算机无法正常关闭,因为systemd可能没有正确处理手动的NFS 安装在initramfs.我将简短地描述正在发生的事情:

  1. initramfs在其中安装了ro多个 NFS 共享(整个/、配置文件等)并覆盖它们,为每个工作站overlayfs创建rwDebian 无盘。
  2. 然后我switch_root进入这个覆盖系统,它启动得非常好并且工作没有问题。 Homes 在启动期间根据fstab.
  3. 在我的系统中,我完全禁用了网络管理器,以防止用户摆弄网络。这对他们来说是非常有害的:)
  4. 当我关闭系统时,系统会挂起nfs: server not responding, still trying...(启用 NM 也会发生这种情况,但在这种情况下,有时关闭会成功,但它是不确定的)。

因此,我的手动安装以某种方式“隐藏”在systemd(我怀疑)中。我的fstab

none           /       overlay  defaults,x-systemd.requires=network-online.target 0 0
X.X.X.X:/home  /home   nfs      rw,nodev,nosuid,hard,nolock,proto=tcp,nfsvers=3,sec=krb5,x-systemd.requires=network-online.target    0   0

我尝试过_netdevx-systemd.requires...但没有任何帮助。

有解决办法吗?如何卸载覆盖下的所有 NFS 共享/,或者至少在/home正确卸载后强制重新启动系统? (系统是无盘的,所有更改都在 中overlayfs,因此仅举个例子是安全的echo b > /proc/sysrq-trigger);)

最好的问候
卡米尔

答案1

我花了两天时间找到了比较靠谱的解决方案。我浏览了一半的互联网并在#systemdIRC上聊天。请阅读此文档,也许这会对您有所帮助;对我来说,这些都没有帮助,我无法让它发挥作用。

https://www.freedesktop.org/wiki/Software/systemd/InitrdInterface/
https://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/

我最终覆盖了systemd负责关闭或重新启动机器的服务。

创建覆盖目录:

  • /etc/systemd/system/systemd-poweroff.service.d
  • /etc/systemd/system/systemd-reboot.service.d
  • /etc/systemd/system/systemd-halt.service.d

并放入里面的override.conf文件。
为了poweroff

[Unit]
SuccessAction=poweroff-immediate

为了reboot

[Unit]
SuccessAction=reboot-immediate

对于halt(例如,当使用 Gnome 中的“电源关闭”按钮时调用):

[Unit]
ExecStart=systemctl --force --force halt

添加第二个--forceimmediate按其说明进行操作。它不会等待安装或其他事情,而只是重新启动/关闭机器。对于 NFS 只读挂载来说,这没有害处并且可以安全地完成。另外,我的 RAM 中的所有更改overlay也将消失,这很好。我/home唯一关心的 将会被该home.mount单元正确卸载,为所有条目自动创建fstab

我希望这能帮助某人避免两天的挫败感;)

最好的问候
卡米尔

相关内容