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

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

Я только что обновил и установил целую кучу пакетов 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=""
       }'

Связанный контент