Kernel-параметр systemd.mask=UNIT маскирует юнит при старте systemd — без правки файловой системы, прямо из cmdline.txt (FAT32 на Pi). Полезен для recovery когда нет shell или ext4 R/W недоступен.
Синтаксис
В /boot/cmdline.txt (одна строка, параметры через пробел):
... systemd.mask=docker.service systemd.mask=lvm2-monitor.service ...
Каждый systemd.mask= — отдельный параметр, по одному юниту. Можно множество.
Mount unit naming
Mount-юниты генерируются из путей в /etc/fstab. Имя = путь без leading /, slashes → dashes, плюс .mount:
| fstab mountpoint | unit name |
|---|---|
/root/storage | root-storage.mount |
/root/storage/samba/share/video | root-storage-samba-share-video.mount |
/var/lib/docker | var-lib-docker.mount |
/boot | boot.mount |
Спецсимволы (пробел, тире в имени) кодируются \xNN, но в обычных путях такого нет.
Реальные кейсы для Pi
# отключить блокатор boot lvm2-monitor (висит при отсутствующих PV)
systemd.mask=lvm2-monitor.service
# не стартовать Docker при recovery
systemd.mask=docker.service systemd.mask=containerd.service
# обойти mount без nofail
systemd.mask=root-storage.mount
# не дёргать USB SMART-проверкой
systemd.mask=smartmontools.service
Что НЕ маскируется
.targetюниты: маскировка target обычно ломает boot. Лучше использоватьsystemd.unit=для смены целевой цели.- Зависимости: если основной юнит маскирован, его зависимые могут не понять и упасть. Тестируй.
Постоянное отключение
systemd.mask= действует только на один boot. Для постоянного отключения после восстановления системы:
sudo systemctl mask UNIT # создаёт symlink в /dev/null
sudo systemctl disable UNIT # просто убирает из target.wantsИли renamed-в-.disabled подход.
Лимит cmdline
Обычно 2048 байт на Pi 4 (ядро 6.x). 8–10 масок реально вмещается.
Связано
Мета
Область:: 00 Linux