Eu tenho uma partição LUKS em um disco rígido externo. Quando eu o conecto, o Ubuntu 22.04 descriptografa automaticamente a partição e a monta , pois salvei a senha no chaveiro. Eu gostaria de executar um script de backup quando isso acontecer.
Isso não funcionou:
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_UUID}=="uuid-of-the-decrypted-partition", RUN+="/path/to/backup/script"
Existe uma maneira de detectar no UDEV quando a partição está montada?
Não, o udev não lida com montagens (eles não são "dispositivos"). Ele pode reagir ao desbloqueio do volume (pois isso cria um dispositivo "mapeador"), mas não à montagem (que não adiciona um dispositivo nem o "altera").
Crie um serviço systemd que execute seu script de backup e adicione-o como uma dependência da unidade .mount
run-media-whatever.mount
correspondente ao local onde o disco está montado. (As entradas Fstab criam unidades .mount reais, mas as unidades .mount virtuais existem independentemente do que causou a montagem do sistema de arquivos, portanto, isso funcionará mesmo com montagens automáticas simples do GNOME.)Para um script de backup, o serviço geralmente deve ser
Type=oneshot
.A dependência da unidade .mount para o seu serviço pode ser adicionada com
systemctl enable
e uma[Install]
seção (usesystemd-escape -p
para que seja gerado o nome .mount correto para um caminho ou apenas localize-o emsystemctl -t mount
). Se você deseja que o serviço seja acionado por vários caminhos, pode listar várias unidades em [Instalar].Após
systemctl enable
, esse serviço será executado toda vez que /run/media/backup for montado.Se suas montagens automáticas resultarem em um caminho que não é exclusivo o suficiente - adicione uma entrada /etc/fstab que especifique um caminho personalizado para cada UUID (a montagem automática do GNOME honrará o fstab; você pode até mesmo fazer isso através das "Opções de montagem" dos discos do GNOME) ; alternativamente, faça o próprio script verificar o que foi montado (usando findmnt) e simplesmente saia se o UUID do sistema de arquivos estiver errado.
Observe que você precisaria de um serviço de qualquer maneira, já que não pode mais executar scripts de longa duração a partir de regras udev - eles precisariam ser executados indiretamente, não importa o quê (
ENV{SYSTEMD_WANTS}
se você estivesse lidando com um dispositivo).