Errores de systemd cuando dos dispositivos comparten el mismo punto de montaje

Errores de systemd cuando dos dispositivos comparten el mismo punto de montaje

Acabo de actualizar e instalar una gran cantidad de paquetes de Debian y ahora recibo errores debido a la configuración particular de mi archivo fstab. Tengo 2 unidades que nunca monto simultáneamente y ambas tienen el mismo punto de montaje ( /etc/fstabfragmento):

UUID=xxxx-xxxx /media/strontium vfat user,rw,exec,nofail 0 2                    
UUID=yyyy-yyyy /media/strontium vfat user,rw,exec,nofail 0 2

Sin embargo, después de las instalaciones, systemd se queja de esto:

[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?

De hecho, no quiero usar systemd para montar unidades por mí en absoluto. Anteriormente usé sudo mount -ay esto simplemente revisó mi /etc/fstabarchivo y montó todo lo que estaba conectado.

¿Es posible desactivar la funcionalidad de montaje de systemd para poder montar mis propias unidades manualmente como antes?

Respuesta1

De todos modos, no sé cómo solucionar esta restricción de systemd, ya que el nombre del directorio del punto de montaje se convierte en un nombre de archivo de systemd. La respuesta más sencilla puede ser eliminar las entradas del fstab y escribir un pequeño script para realizar los montajes bajo demanda:

#!/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

No olvide, después de modificar /etc/fstab, hacer una sudo systemctl daemon-reloadpara asegurarse de que systemd note sus cambios.


Si desea conservar las entradas, /etc/fstabpuede utilizar que el segundo punto de montaje sea un enlace simbólico al primero, por ejemplo ln -s /media/strontium /media/strontium2. Cuando finaliza el montaje, se sigue el enlace para que termine en el directorio como de costumbre. Debe agregar una opción noautoa ambas líneas en este caso; de lo contrario, systemd se confundirá e inmediatamente desmontará lo que cree que es la primera entrada.

En lugar de un enlace simbólico, puedes usar un directorio real y luego hacer un manual.enlazar montajepara montar ese directorio en el lugar deseado:

mount --bind /media/strontium2 /media/strontium

Debes recordar desmontar este soporte de enlace así como el primer soporte.


En el pasado, podría haber agregado una regla udev para llamar a mount explícitamente cuando vea aparecer el UUID, por ejemplo, en /etc/udev/rules.d/92-my.rules:

ACTION=="add", ENV{ID_FS_UUID}=="xxxx-xxxx", RUN+="/usr/bin/mount /dev/%k /media/strontium"

pero esto no funciona con systemd recientes, ya que se ejecuta udevden un espacio de nombres de montaje separado, por lo que aunque realiza el montaje, no puedes verlo. Todavía no sé el motivo de este espacio de nombres, pero en principio puedes anular esta característica creando un archivo /etc/systemd/system/systemd-udevd.servicecon las 2 líneas

.include /usr/lib/systemd/system/systemd-udevd.service
MountFlags=shared 

Si desea algo que aún sea automático, entonces una alternativa es monitorear los eventos udevdrelacionados con los dispositivos de bloque y realizar un montaje explícito. Por ejemplo, ejecute permanentemente:

#!/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=""
       }'

información relacionada