Есть ПК с Xubuntu 15.10 (хитрый). Система настроена для запуска fsck на разделе, когда указанный раздел смонтирован 20 раз. После этого ожидаемое поведение - счетчик монтирования должен сбрасываться, но это не так. Это означает, что, поскольку число монтирований продолжает расти после 20, fsck запускается автоматически каждый раз при загрузке ПК.
tune2fs
показывает, что состояние файловой системы чистое и smartctl
не показывает никаких проблем.
Обходные пути, использовавшиеся до сих пор:
tune2fs -C
для ручного сброса счетчика монтирования Когда счетчик монтирования достигает 20 в следующий раз, проблема появляется снова: счетчик монтирования не сбрасывается после автоматического запуска fsck.
Я искал на этом сайте и в других местах, но не нашел указателей на то, что может быть причиной проблемы. Есть идеи?
Заранее спасибо.
После небольшого количества расследования я нашел, что проблема была в systemd-fsckd
сервис, от systemd
пакет. Во время записи версии, которые доступны в коварном и гостеприимном, кажется, содержат незаконный код (225-1ubuntu9
и 229-4ubuntu4
соответственно).
Поскольку сервис не необходим для корректной работы системы, простое решение просто отключает его путем выполнения этой команды:
systemctl mask systemd-fsckd.service systemd-fsckd.socket
Оборотная сторона - то, что теперь Плимут не сообщит fsck
прогресс. На самом деле это даже не скажет пользователю, что проверка файловой системы идет полным ходом.
Немного фона от man
страница сервиса:
systemd-fsckd.service является сервисом, ответственным за получение прогресса проверки файловой системы и передавание некоторых объединенных данных к консоли и Плимуту (при выполнении). Это также обрабатывает возможные отмены проверки.
systemd-fsckd получает сообщения о прогрессе проверки файловой системы с fsck на сокет домена UNIX [...]
Проблема с этим сервисом - то, что он использует hardcoded тайм-аут 30 секунд при выполнении epoll_wait
на сокете для получения информации о прогрессе. Если fsck
не сообщает прогресс меньше чем за 30 секунд, затем systemd-fsckd
закрывает сокет и выходы с успехом, ничего не регистрируя насколько я видел.
В следующий раз, когда fsck
записи в (теперь закрытый) снабжают сокетом для создания отчетов о прогрессе, он умирает с a SIGPIPE
. Как fsck
никогда концы, количество монтирования не сбрасывается затем.