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 mountpointunit name
/root/storageroot-storage.mount
/root/storage/samba/share/videoroot-storage-samba-share-video.mount
/var/lib/dockervar-lib-docker.mount
/bootboot.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