
Я только что обновил и установил целую кучу пакетов Debian, и теперь я получаю ошибки из-за моей конкретной конфигурации файла fstab. У меня есть 2 диска, которые я никогда не монтирую одновременно, и у обоих из них одна и та же точка монтирования ( /etc/fstab
фрагмент):
UUID=xxxx-xxxx /media/strontium vfat user,rw,exec,nofail 0 2
UUID=yyyy-yyyy /media/strontium vfat user,rw,exec,nofail 0 2
Однако после установки systemd жалуется на это:
[518052.191024] systemd-fstab-generator[28811]: Failed to create mount unit file /run/systemd/generator/media-strontium.mount, as it already exists. Duplicate entry in /etc/fstab?
На самом деле я вообще не хочу использовать systemd для монтирования дисков. Раньше я использовал systemd, sudo mount -a
и он просто проходил по моему /etc/fstab
файлу и монтировал все, что было подключено.
Можно ли отключить функцию монтирования systemd, чтобы я мог монтировать свои диски вручную, как раньше?
решение1
Я не знаю, как обойти это ограничение systemd, так как имя каталога точки монтирования преобразуется в имя файла systemd. Самым простым ответом может быть удаление записей из fstab и написание небольшого скрипта для выполнения монтирований по требованию:
#!/bin/bash
( mount -U xxxx-xxxx /media/strontium -t vfat -o rw,exec ||
mount -U yyyy-yyyy /media/strontium -t vfat -o rw,exec
) && echo ok
Не забудьте после внесения изменений /etc/fstab
сделать , sudo systemctl daemon-reload
чтобы systemd заметил ваши изменения.
Если вы хотите сохранить записи, /etc/fstab
вы можете использовать вторую точку монтирования как символическую ссылку на первую, например ln -s /media/strontium /media/strontium2
. Когда монтирование завершено, ссылка следует, так что она оказывается в каталоге, как обычно. noauto
В этом случае вы должны добавить option к обеим строкам, иначе systemd запутается и немедленно размонтирует то, что, по его мнению, является первой записью.
Вместо символической ссылки вы можете использовать реальный каталог, а затем выполнить ручную настройку.привязать креплениечтобы смонтировать этот каталог в нужном месте:
mount --bind /media/strontium2 /media/strontium
Не забудьте отключить это привязанное крепление, а также первое крепление.
Раньше можно было добавить правило udev для явного вызова mount при появлении UUID, например /etc/udev/rules.d/92-my.rules
:
ACTION=="add", ENV{ID_FS_UUID}=="xxxx-xxxx", RUN+="/usr/bin/mount /dev/%k /media/strontium"
но это не работает с последними systemd, так как он работает udevd
в отдельном пространстве имен монтирования, так что хотя он и делает монтирование, вы его не видите. Я пока не знаю причину этого пространства имен, но вы можете в принципе переопределить эту функцию, создав файл
/etc/systemd/system/systemd-udevd.service
с 2 строками
.include /usr/lib/systemd/system/systemd-udevd.service
MountFlags=shared
Если вы хотите что-то, что все еще работает автоматически, то альтернативой является мониторинг событий, связанных udevd
с блочными устройствами, и выполнение явного монтирования. Например, запустите постоянно:
#!/bin/bash
# udevadm monitor outputs a stanza ending with a blank line
# UDEV [5291328.3] add /devices/pci0000:00/.../usb3/..../block/sdd (block)
# ACTION=add
# DEVNAME=/dev/sdd
stdbuf -o L udevadm monitor -u -p -s 'block/disk' |
awk -F= '
$0~/^ACTION=/{ action = $2 }
$0~/^DEVNAME=/{ name = $2 }
$0~/^ID_FS_UUID=/{ uuid = $2 }
$0~/^$/{ if(action=="add" && (uuid=="xxxx-xxxx"||uuid=="yyyy-yyyy")
system("sudo mount mount " name " /media/strontium -t vfat -o rw,exec")
uuid=""
}'