有一台运行 Xubuntu 15.10 (wily) 的 PC。系统配置为当分区被挂载 20 次时在该分区上运行 fsck。之后,预期的行为是挂载计数应该重置,但事实并非如此。这意味着,随着挂载计数不断超过 20,每次 PC 启动时,fsck 都会自动运行。
tune2fs
显示文件系统状态干净并且smartctl
没有显示任何问题。
目前使用的解决方法:
- 用于
tune2fs -C
手动重置安装数量 - 从 Live CD 启动并在分区上运行 fsck;这似乎在完成后正确重置了挂载计数
当下次挂载计数达到 20 时,问题再次出现:自动 fsck 运行后不会重置挂载计数。
我搜索过此网站和其他地方,但没有找到任何可能导致此问题的线索。有什么想法吗?
提前致谢。
答案1
经过一番调查,我发现问题出在systemd-fsckd
服务中,来自systemd
软件包。在撰写本文时,wily 和 xenial 中提供的版本似乎包含有问题的代码(分别为225-1ubuntu9
和229-4ubuntu4
)。
解决方案
由于该服务对于系统的正常运行不是必需的,因此一个简单的解决方案是通过运行以下命令来禁用它:
systemctl mask systemd-fsckd.service systemd-fsckd.socket
缺点是现在 Plymouth 不会报告fsck
进度。事实上,它甚至不会告诉用户文件系统检查正在进行中。
解释
背景介绍man
服务页面:
systemd-fsckd.service 是一项服务,负责接收文件系统检查进度,并将一些整合的数据传送到控制台和 plymouth(如果正在运行)。它还处理可能的检查取消。
systemd-fsckd接收来自以下来源的文件系统检查进度消息文件系统检查通过 UNIX 域套接字 [...]
epoll_wait
该服务的问题在于,它在套接字上执行进度信息时使用 30 秒的硬编码超时。如果fsck
在 30 秒内未报告进度,则systemd-fsckd
关闭套接字并成功退出,据我所知不会记录任何内容。
下次fsck
写入(现已关闭)套接字以报告进度时,它会以 终止SIGPIPE
。由于fsck
从未完成,因此不会重置安装计数。