我最近从 18.04x 更新到 20.04.1 LTS。一切似乎都工作正常,除了几个服务在启动过程中失败。
输出systemctl --failed
:
● checkfs.service loaded failed failed LSB: Check all filesystems.
● checkroot-bootclean.service loaded failed failed LSB: bootclean after checkroot.
● mountall-bootclean.service loaded failed failed LSB: bootclean after mountall.
● mountall.service loaded failed failed LSB: Mount all filesystems.
● mountdevsubfs.service loaded failed failed LSB: Mount special file systems under /dev.
● mountkernfs.service loaded failed failed LSB: Mount kernel virtual file systems.
● mountnfs-bootclean.service loaded failed failed LSB: bootclean after mountnfs.
● mountnfs.service loaded failed failed LSB: Wait for network file systems to be mounted
所有问题都与丢失的文件有关,例如:
a) 输出systemctl status checkfs.service
:
checkfs.sh[1102]: /etc/init.d/checkfs.sh: 21: .: Can't open /lib/init/mount-functions.sh
b) 输出systemctl status checkroot-bootclean.sh
:
checkroot-bootclean.sh[1104]: /etc/init.d/checkroot-bootclean.sh: 17: .: Can't open /lib/init/bootclean.sh
那些文件 (mount-functions.sh
和bootclean.sh
) 在/lib/init
. 由于/lib/init
缺少某些文件(因此某些功能无法调用),所有其他服务似乎都失败了。
我在另一台机器上检查过,这些服务没有报告任何问题,但文件不存在于/lib/init
. 我认为这些服务被禁用,但根据systemctl list-unit-files
这些服务也被启用。
我的系统似乎运行正常,但这只是我想修复的问题。
到目前为止我尝试了什么:
起初我试图找到一个提供丢失文件的包,但没有运气。当我发现另一台机器上的相同版本的操作系统在没有这些文件的情况下可以正常启动时,我意识到这不是正确的方法
我试图“作弊”并在其中创建了空文件
/lib/init
- 修复了一些错误,但有些需要无法找到的附加功能(例如:clean_all in/etc/init.d/checkroot-bootclean.sh
或mount_run
,mount_lock
,domount
in/etc/init.d/mountkernfs.sh
)我注释掉了这些服务中的一些行,当然这似乎有效,但是:
- 我不确定缺少什么
- 我很惊讶相同版本的 Ubuntu (20.04.1) 在另一台机器上运行良好(即使 中没有其他文件
/lib/init
)
我只是不知道下一步该做什么。我很确定我错过了一些简单的东西。
所以看来我已经解决了这个问题(在我朋友的帮助下)。
脚步:
我输入
dpkg -S checkroot
的结果如下:这让我很惊讶,因为我记得这个
initscripts
包只在 Xenial 中提供。没有理由让它仍然出现在 Focal 上。Mountall(根据https://packages.ubuntu.com/search?keywords=mountall&searchon=all&suite=all§ion=all)也不应该出现在 Focal 中。
所以我所做的是:
这删除了很多文件
/etc/init.d
——很多都是那些有问题的文件,这让我很头疼。我重新启动了我的机器。
现在的输出
systemctl --failed
如下:这就是我的目标。