启动时自动运行 fsck 后不会重置挂载计数

启动时自动运行 fsck 后不会重置挂载计数

有一台运行 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-1ubuntu9229-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从未完成,因此不会重置安装计数。

相关内容