Когда сбой питания приводит к возникновению fsck, какой уровень запуска загружается в system - аварийный режим или аварийный?

261
BobMueller

Может кто-нибудь сказать мне, на каком уровне запуска работает systemd, когда вас попросят проверить файловую систему после потери питания? Это аварийная ситуация или спасение или это зависит? У меня есть некоторые системные модули, которые должны работать, если / когда система запрашивает проверку файловой системы при загрузке. Я бы не стал изменять минимальную оболочку emergency.target для загрузки сценария, если мне это не нужно, поэтому я надеялся, что он работает в режиме восстановления.

Кроме того, если у кого-то есть отличный способ временно взломать файловую систему, чтобы я мог вызвать приглашение fsck для тестирования, я был бы очень признателен. Я попытался изменить / etc / fstab, однако он специально загружается в аварийный режим.

Большое спасибо за любую помощь.

1

1 ответ на вопрос

0
grawity

Обычно ни один - это часть обычного процесса загрузки.

Для файловых систем, перечисленных в / etc / fstab с ненулевым флагом «check», соответствующая единица .mount автоматически получает зависимость systemd-fsck@<dev>.service. Когда эта служба завершается, systemd продолжает монтировать файловую систему (начиная модуль .mount). Это не особое состояние, а часть обычной очереди заданий.

Если происходит сбой службы fsck (например, требуется какое-то ручное восстановление), модуль .mount также дает сбой, и только в этом случае происходит переключение с обычной цели загрузки на emergency.target.

Как вы можете видеть, fsck запускается при каждой загрузке, и единственное, на что влияет потеря мощности, это сколько времени это займет. (Некоторые файловые системы имеют «грязный» бит, который устанавливается при монтировании и очищается при umount; другие обнаруживают состояние на основе необработанных записей в журнале обновлений.) Чтобы изменить это поведение, вам придется изменить fsck.<fstype>программу или полностью отключить проверку для этой файловой системы в fstab.

Чтобы запустить дополнительные сервисы перед запуском systemd-fsck@<dev>(который будет происходить при каждой загрузке, прежде чем он решит, нужна ли расширенная проверка), используйте обычные методы расширения модуля systemd.

Обратите внимание, что корневая файловая система является особым случаем: в некоторых дистрибутивах она фактически проверяется в initramfs (ранняя фаза загрузки), пока основной процесс systemd еще не запущен. (В зависимости от дистрибутива, initramfs может иметь свой собственный systemd или совсем другой init.) Опять же, fsckвсегда выполняется независимо от того, было ли отключение питания чистым или нет.

Похожие вопросы