Сервер: автоматическое монтирование USB-накопителя с помощью systemd

У меня есть сервер под управлением Ubuntu Server 20.04, и я хочу запустить сценарий, как только известное устройство с шифрованием USB (LUKS) будет подключено к серверу.

Для запуска сценария у меня уже есть сценарий и служба systemd , которая запускает службу после монтирования диска:

/etc/systemd/system/mybackup.service

[Unit]
Description=Backup
Requires=mnt-encrypted.mount
After=mnt-encrypted.mount

[Service]
ExecStart=/path/to/script.sh

Для внешний зашифрованный USB-накопитель, у меня есть запись в / etc / crypttab

encrypted UUID=<UUID> /path/to/key luks,noauto

И служба в /etc/systemd/system/mnt-encrypted.mount

[Unit]
Description=Mount unit for backup

[Mount]
What=/dev/mapper/encrypted
Where=/mnt/encrypted
Options=defaults

Однако я знаю, что mnt-encrypted.mount Не заполнен блок. Он должен запускаться после файла, сгенерированного systemd-cryptsetup-generator , чтобы том был расшифрован и его можно было смонтировать.

Как я могу это сделать? или чего не хватает в моем файле mnt-encrypted.mount ?

Edit

Прочитав кое-какие сообщения (добавленные в конце), я наконец понял, что systemd не подключает ваш диск автоматически, когда вы подключаете его. Это udev тот, который запускает установку, и вы можете указать, что это нужно сделать, через systemd .

Что необходимо сделать:

  • Добавьте запись в / etc / crypttab , если диск зашифрован.
  • Измените / etc / fstab с записью для внешний привод.Это сгенерирует модуль systemd для монтирования
  • Скопируйте службу systemd, которая запустит резервное копирование при монтировании диска.
  • Создайте правила udev , которые будут запустить службу systemd , когда диск подключен к

Например:

[Unit]
Description=Backup service
Requires=mnt-human-readable-label.mount
After=mnt-human-readable-label.mount

[Service]
ExecStart=/path/to/backup-script.sh
User=your-user
Group=your-group

[Install]
WantedBy=mnt-human-readable-label.mount

/ etc / crypttab

human-readable-label UUID=your-disk-uuid /path/to/key luks,noauto,nofail

/ etc / fstab

/dev/mapper/human-readable-label /mnt/human-readable-label ext4     defaults,noauto,nofail,x-systemd.automount,x-systemd.device-timeout=15s,x-systemd.idle-timeout=30 0 0

/etc/udev/rules.d/99- my-usb-dribe.rules (Используйте lsusb для получения идентификатора продукта)

SUBSYSTEM=="usb", ACTION=="add", ATTRS{idProduct}=="id-product", ENV{SYSTEMD_WANTS}="external-backup.service", TAG+="systemd"

Затем:

# Copy the systemd service that will start the backup script to the right place
sudo cp external-drive/external-backup.service /etc/systemd/system/external-backup.service

# Reload file system services for creating mount services for the external drive
sudo systemctl restart local-fs.target
sudo systemctl restart remote-fs.target

# Enable the backup service
sudo systemctl enable external-backup.service

# Reload the UDEV ruls
sudo udevadm control --reload-rules

# Reload systemd daemon
sudo systemctl daemon-reload

Различные источники, которые я использовал:

0
задан 13 October 2020 в 22:11

1 ответ

Я знаю, что это достаточно старый вопрос, и проблема, вероятно, уже решена, но монтирование, как и все другие модули systemd, должно поддерживать зависимости

Общие элементы конфигурации настраиваются в универсальном [Unit ] и [Установить].

Таким образом, добавления следующего раздела [Install] должно быть достаточно:

[Install]
After = systemd-cryptsetup-generator.service

(я не уверен, является ли systemd-cryptsetup-generator сервисом, но если это что-то другое, достаточно изменить расширение)

2
ответ дан 26 December 2020 в 11:14

Другие вопросы по тегам:

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