
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/fstab
fragmento):
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 -a
y esto simplemente revisó mi /etc/fstab
archivo 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-reload
para asegurarse de que systemd note sus cambios.
Si desea conservar las entradas, /etc/fstab
puede 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 noauto
a 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 udevd
en 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.service
con 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 udevd
relacionados 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=""
}'