我全新安装了 Debian 9.0.0。它有一个单独的 1 GB 分区,用于 /var,格式为 ext4。当我从终端关闭时,使用shutdown -h now
,出现一条亮红色的错误消息,指出“卸载 /var 失败”。
此错误的修复方法是什么?
答案1
问题是journald
或者更确切地说,它在尝试卸载它/var
时仍然如何记录。systemd
解决方案
根据这个线程,有两种方法可以实现:
- 将
journald
日志保存到易失性位置,/run
这样它就不会锁定/var
,但代价是您会在关闭时丢失日志。
编辑/etc/systemd/journald.conf
以将该行更改Storage=
为
Storage=volatile
这就是我所做的,而且它对我有用。
- (编辑:这是 ArchLinux 特定的)或者设置一个关闭钩子以便
/var
稍后卸载。这不会删除该failed
消息,因为 systemd 仍会尝试卸载/var
,但确实会/var
在关闭序列结束时正确卸载。你只是不会看到它。 (不过我还没有测试过该解决方案)
向 的数组添加一个shutdown
钩子,例如:mkinitcpio
HOOKS=
HOOKS="base udev autodetect block keymap encrypt lvm2 filesystems usbinput fsck var shutdown"
答案2
我要感谢@Thibault Lemaire 为我指出了正确的理由。我通过将这些更改应用到以下内容成功解决了该错误systemd-journald.service
:
...
[Unit]
...
After:umount.target
Conflicts=umount.target
基本上所有(?)挂载(包括 /var)都会被 umount.target 卸载,因此如果我们在启动 umount.target 之前停止 systemd-journald 我们可以修复错误。