Мы обновляем наши серверы с очень устаревшего дистрибутива на современную систему на основе Debian Jessie, включая lightdm / xfce и, конечно, systemd (и udisks2). Одним из препятствий является автоматическое подключение USB-накопителей. Мы привыкли делать это с помощью некоторых правил udev. Старые правила почти все еще работают - точка монтирования создается и диск монтируется нормально, но через несколько секунд systemd делает что-то, что нарушает монтирование, поэтому последующие попытки доступа приводят к ошибкам «Конечная точка транспорта не подключена».
Ручная установка привода через командную строку работает нормально. То же самое можно сказать и о файловом менеджере (thunar и thunar-volman, который, в свою очередь, использует udisks2). Но это не жизнеспособные варианты - эти системы в основном работают без головы, поэтому thunar обычно не работает. Нам нужно иметь возможность подключать диски для автоматического резервного копирования на основе cron.
Я подумал, что изменение сценария udev для запуска отдельного задания, которое ждет несколько секунд, прежде чем выполнять монтирование, может сработать, но systemd, похоже, старается изо всех сил, чтобы предотвратить это - он каким-то образом все еще ожидает завершения отдельного задания, прежде чем продолжается.
Возможно, наличие сценария udev щекочет udisks2 как-то правильный подход? Я в растерянности, поэтому любые советы очень ценятся.
источник
Ответы:
После нескольких неудачных попыток я понял это. Ключ заключается в добавлении службы модуля systemd между udev и сценарием монтирования.
(Для справки, я не смог заставить это работать, используя udisks2 (через что-то вроде
udisksctl mount -b /dev/sdb1
), вызываемое либо непосредственно из правила udev, либо из файла модуля systemd. Кажется, что существует состояние гонки, и узел устройства не совсем готов , в результате чегоError looking up object for device /dev/sdb1
. К сожалению, udisks2 может позаботиться обо всей беспорядке точки монтирования ...)Поднятие тяжестей выполняется с помощью сценария оболочки, который заботится о создании и удалении точек монтирования, а также о монтаже и демонтаже дисков.
/usr/local/bin/usb-mount.sh
Сценарий, в свою очередь, вызывается системным файлом systemd. Мы используем синтаксис «@», чтобы передать имя устройства в качестве аргумента.
/etc/systemd/system/usb-mount@.service
И, наконец, некоторые правила udev запускают и останавливают службу модуля systemd при установке / отключении:
/etc/udev/rules.d/99-local.rules
Это, кажется, делает свое дело! Пара полезных команд для отладки, например:
udevadm control -l debug
включает подробное ведение журнала,/var/log/syslog
чтобы вы могли видеть, что происходит.udevadm control --reload-rules
после изменения файлов в файле rules.d dir (может и не понадобиться, но не повредит ...).systemctl daemon-reload
после того, как вы измените системные файлы модуля.источник
blkid
похоже, не извлекаетсяID_FS_LABEL
, поэтому я просто использовалDEVBASE
вместо, а неLABEL
для созданияMOUNT_POINT
вместо.udevadm
вместоblkid
. Это дает гораздо больше деталей, а также дополнительную информацию. (например,udevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. Очистка может использовать дополнительную проверку, какif [ "$f" != "/media/*" ]; then
перед запускомfind
.есть новая, краткая
systemd
опция автоматического монтирования, которую можно использовать,fstab
которая позволяет вам использовать все стандартизированные опции разрешения монтирования, и это выглядит так:Пример этого в
fstab
строке:noauto
вариант будет означать его не будет пытаться монтировать при загрузке, так как со старым программным обеспечениемautofs
.после добавления новой
x-systemd.automount
строкиfstab
вам нужно выполнить:а затем оба или один из следующих:
Для получения дополнительной информации об этом:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
источник
sudo systemctl restart local-fs.target
сделал трюк для меняЯ изменил скрипт из @MikeBlackwell для:
/dev/sd[a-z]
но/dev/sd[a-z]*
; часто бывает с серверами с большим количеством шпинделей./var/log/usb-mount.track
/var/log/messages
с тегом usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Поскольку @MikeBlackwell уже проделал большую часть тяжелой работы, я решил не переписывать ее; только что сделал необходимые изменения. Я признал его работу, обнаружив его имя и URI оригинального ответа.
Найдите его по адресу https://github.com/raamsri/automount-usb
источник
Используя подход pmount , systemd и Mike Blackwell, вы можете упростить все это:
/etc/systemd/system/usb-mount@.service
/etc/udev/rules.d/99-usb-mount.rules
HTH и спасибо тебе Майк.
источник
Я бы пошел с ответом Уоррена Янга, у меня есть несколько изменений, которые я сделал в
Я добавил некоторую защиту пространства, так как она давала ошибки от оценки среды для накопителя.
Я добавил раздел chmod на usb-диск, чтобы у всех пользователей был полный доступ к дискам не ntfs или vfat.
/usr/local/bin/usb-mount.sh
источник