Мне прилетела интересная задача.
ТЗ: Сервер без GUI, к нему подключают usb-диск с NTFS и начинается автоматическое архивирование. Логин не требуется, сообщения выдаются на tty1.
sudo apt install ntfs-3g # для монтирования ntfs
Использовать будем штатные средства udev + systemd .
- Подключаем диск, и запоминаем UUID.
lsblk -f
sdc
└─sdc1
ntfs FLASH
1234567890ABCDEF
здесь FLASH - метка диска 1234567890ABCDEF - UUID
создадим каталог для монтирования:
mkdir -p /media/usb_ntfs; chmod 777 /media/usb_ntfs
Дальше создаем 4 файла. Чтобы было проще, в каждом файле в начале коммент с названием файла.
После создания:
sudo systemctl daemon-reload
Как это работает:
При подключении usb-диска срабатывает UDEV правило 99-usb-mount.rules и пытается запустить службу autousbbackup.service
autousbbackup.service пытается запустить media-usb_ntfs.mount, поскольку жёстко от неё зависит.
Сама media-usb_ntfs.mount запустится только в том случае, если UUID диска будет 1234567890ABCDEF.
autousbbackup.service запустит скрипт autousbbackup.sh, внутри которого Вы напишите копирование или синхронизацию данных в каталог /media/usb_ntfs.Если используется архивирование с чередованием дисков - просто сделайте у дисков одинаковые метки:
sudo umount /dev/sdXN # где /dev/sdXN имя вашего NTFS-раздела.
sudo ntfslabel --new-serial=1234567890ABCDEF /dev/sdXN #задайте UUID
Если в mount не указать опцию nofail система будет тормозить при загрузке.
Запустить скрипт через UDEV даже в фоне не получится, поскольку система вырубит его через 5 сек.
#/etc/udev/rules.d/99-usb-mount.rules
SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="autousbbackup.service"
#/etc/systemd/system/media-usb_ntfs.mount
[Unit]
Description=Mount USB NTFS by UUID
[Mount]
What=/dev/disk/by-uuid/1234567890ABCDEF
Where=/media/usb_ntfs
Type=ntfs-3g
Options=defaults,big_writes,nofail,uid=1000,gid=1000
[Install]
WantedBy=multi-user.target
#/etc/systemd/system/autousbbackup.service
[Unit]
Description=Simple service autousbbackup
Requires=media-usb_ntfs.mount
After=media-usb_ntfs.mount
[Service]
Type=simple
ExecStart=/root/work/autousbbackup/autousbbackup.sh
[Install]
WantedBy=multi-user.target
#!/bin/bash
#/root/work/autousbbackup/autousbbackup.sh
declare -x PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
declare MOUNT_POINT=/media/usb_ntfs
declare TTY=/dev/tty1
declare DF='%(%Y%m%d-%H%M%S)T' #date format
declare LOG="$0.log"
exec &>"$LOG" # only one backup log
#exec &>>"$LOG" # all backups log
printf "$DF %s\n" -1 "START BACKUP"|tee "$TTY"
##############################################
sleep 3 # backup emulation
##############################################linux
printf "$DF %s\n" -1 "END BACKUP"|tee "$TTY"
#suicide, because service require mount point
systemd-mount --umount "$MOUNT_POINT"








Комментарии
Виджет комментариев загружается с серверов Telegram и может использовать cookies. Разрешите внешние сервисы, чтобы открыть обсуждение.