Правка fstab не применяется: генераторы unit
systemd не читает fstab при каждом монтировании: он превращает его в unit-файлы генератором при чтении конфигурации. Поэтому правка fstab не действует до systemctl daemon-reload.
Что это значит
Генераторы — это программы, которые создают unit-файлы на ходу: из fstab, из параметров загрузки ядра, из настроек сети. Результат лежит в /run/systemd/generator и перезаписывается при каждой перезагрузке конфигурации.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Не выполнена перезагрузка конфигурации
Новая запись в fstab ещё не превратилась в unit. Монтирование по ней не выполняется, а сообщений об ошибке нет.
-
Ошибка в записи fstab
Генератор пропускает неразбираемые строки. Запись есть, unit нет, ошибки не видно.
-
Свой unit конфликтует с созданным из fstab
Если для одной точки есть и запись в fstab, и собственный unit-файл, второй перекрывает первый — или они конфликтуют по параметрам.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Проверка записей fstab до перезагрузки.
sudo findmnt --verify --verboseКакие точки монтирования знает systemd.
systemctl list-units --type=mount --all --no-pagerUnit-файлы, созданные генераторами.
ls -l /run/systemd/generator/Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Новая запись в fstab ещё не превратилась в unit. Монтирование по ней не выполняется, а сообщений об ошибке нет.
- Как проверить
-
Посмотрите, есть ли unit для вашей точки монтирования.
systemctl list-units --type=mount --all --no-pager | grep -i srv ls /run/systemd/generator/ | head
- Как исправить
-
Перечитайте конфигурацию и запустите монтирование.
sudo systemctl daemon-reload && sudo systemctl start srv-data.mount
- Почему происходит
- Генератор пропускает неразбираемые строки. Запись есть, unit нет, ошибки не видно.
- Как проверить
-
Проверьте записи fstab.
sudo findmnt --verify --verbose
- Как исправить
- Исправьте запись по сообщению проверки, затем перечитайте конфигурацию.
- Почему происходит
- Если для одной точки есть и запись в fstab, и собственный unit-файл, второй перекрывает первый — или они конфликтуют по параметрам.
- Как проверить
-
Посмотрите, откуда взялся действующий unit.
systemctl cat srv-data.mount | head -3
- Как исправить
- Оставьте один источник: либо fstab, либо собственный unit-файл в /etc/systemd/system.
Пример вывода
Запись добавлена, unit ещё не создан. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ sudo tail -1 /etc/fstab
UUID=8f1c0a11-1d1e-4a1f-9c22-6b0f0a2d33aa /srv/data ext4 defaults,nofail 0 2
$ systemctl list-units --type=mount --all | grep srv
# пусто
$ sudo systemctl daemon-reload && systemctl list-units --type=mount --all | grep srv
srv-data.mount loaded inactive dead /srv/data
Связанные ошибки
- Warning: The unit file … changed on disk Предупреждение о том, что unit-файл изменился на диске: systemd работает со старой версией. Когда нужен daemon-reload.
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
- You are in emergency mode: система не загрузилась Загрузка остановилась в аварийном режиме. Что проверять: fstab, файловые системы, цель по умолчанию. Как войти и починить.
- Имя mount-unit не соответствует точке монтирования systemd отказывается загружать .mount: имя файла должно быть получено из пути через systemd-escape. Как назвать unit правильно.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: правила .htaccess не действуют Файл .htaccess игнорируется: запрещён параметром AllowOverride, нет нужного модуля, файл не читается.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
Источники
-
systemd.generator(7)
Генераторы unit и порядок их работы. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено: запись в fstab не действует до daemon-reload.