我最近从 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/etc/init.d/checkroot-bootclean.sh
或中的mount_run
,mount_lock
,domount
中的/etc/init.d/mountkernfs.sh
)我注释掉了这些服务中的某些行,当然这似乎有效,但是:
- 我不知道缺少了什么
- 令我惊讶的是,相同版本的 Ubuntu(20.04.1)在另一台机器上运行良好(即使没有其他文件
/lib/init
)
我只是不知道下一步该做什么。我很确定我错过了一些简单的事情。
答案1
所以看来我已经解决了这个问题(在朋友的帮助下)。
脚步:
我输入的dpkg -S checkroot
结果如下:
mountall: /etc/init/checkroot-bootclean.sh.conf
initscripts: /etc/init.d/checkroot-bootclean.sh
mountall: /etc/init/checkroot.sh.conf
initscripts: /etc/init.d/checkroot.sh
这让我很惊讶,因为我记得这个initscripts
包只在 Xenial 中提供。它没有理由仍然存在于 Focal 中。
Mountall(根据https://packages.ubuntu.com/search?keywords=mountall&searchon=all&suite=all§ion=all) 也不应出现在 Focal 中。
所以我所做的是:
sudo apt purge initscripts
sudo apt purge mountall
这样就删除了很多文件/etc/init.d
- 其中很多都是有问题的文件,让我很头疼。
我重新启动了我的计算机。
现在的输出systemctl --failed
如下:
UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed.
这正是我的目标。