
Acabei de atualizar e instalar um monte de pacotes debian e agora estou recebendo erros devido à configuração específica do meu arquivo fstab. Tenho 2 unidades que nunca monto simultaneamente e que possuem o mesmo ponto de montagem ( /etc/fstab
snippet):
UUID=xxxx-xxxx /media/strontium vfat user,rw,exec,nofail 0 2
UUID=yyyy-yyyy /media/strontium vfat user,rw,exec,nofail 0 2
Porém, após as instalações, o systemd está reclamando disso:
[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?
Na verdade, não quero usar o systemd para montar unidades para mim. Eu usei anteriormente sudo mount -a
e isso apenas passou pelo meu /etc/fstab
arquivo e montou tudo o que estava conectado.
É possível desligar a funcionalidade de montagem do systemd para que eu possa montar minhas próprias unidades manualmente como antes?
Responder1
De qualquer forma, não sei sobre essa restrição do systemd, pois o nome do diretório do ponto de montagem é convertido em um nome de arquivo do systemd. A resposta mais simples pode ser remover as entradas do fstab e escrever um pequeno script para fazer as montagens sob 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
Não se esqueça, após modificar /etc/fstab
, de fazer um sudo systemctl daemon-reload
para garantir que o systemd perceba suas alterações.
Se você quiser manter as entradas, /etc/fstab
você pode fazer do segundo ponto de montagem um link simbólico para o primeiro, por exemplo ln -s /media/strontium /media/strontium2
. Quando a montagem é concluída, o link é seguido para que acabe no diretório normalmente. Você deve adicionar opção noauto
a ambas as linhas neste caso, caso contrário o systemd ficará confuso e desmontará imediatamente o que pensa ser a primeira entrada.
Em vez de um link simbólico você pode usar um diretório real e depois fazer um manualmontar montagempara montar esse diretório no local desejado:
mount --bind /media/strontium2 /media/strontium
Você deve se lembrar de desmontar esta montagem de ligação, bem como a primeira montagem.
No passado, você poderia ter adicionado uma regra udev para chamar mount explicitamente quando você visse o UUID aparecer, por exemplo, em /etc/udev/rules.d/92-my.rules
:
ACTION=="add", ENV{ID_FS_UUID}=="xxxx-xxxx", RUN+="/usr/bin/mount /dev/%k /media/strontium"
mas isso não funciona com systemds recentes, pois ele é executado udevd
em um namespace de montagem separado, portanto, embora faça a montagem, você não pode vê-lo. Ainda não sei o motivo desse namespace, mas você pode, em princípio, substituir esse recurso criando um arquivo
/etc/systemd/system/systemd-udevd.service
com 2 linhas
.include /usr/lib/systemd/system/systemd-udevd.service
MountFlags=shared
Se você quiser algo que ainda seja automático, uma alternativa é monitorar os eventos relativos udevd
aos dispositivos de bloco e fazer uma montagem explícita. Por exemplo, execute 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=""
}'