¿Hay alguna manera de copyr automáticamente un file a cualquier unidad montada?

Básicamente, tengo un pequeño file del que me gustaría hacer una copy de security en varios dispositivos de almacenamiento. ¿Hay alguna manera de que esto suceda automáticamente cada vez que se monta una unidad nueva (ya sea un disco duro en el arranque o una unidad flash mientras el sistema ya está en funcionamiento)? Probablemente no sea la cosa más eficiente del mundo, pero sería genial si pudiera conectar una unidad y tener otra copy del file sin tener que pensar en ello.

Usar RUN+= es el enfoque incorrecto. Como el man udev deja en claro:

Esto solo se puede usar para tareas de primer plano de ejecución muy corta. La ejecución de un process de evento durante un período prolongado de time puede bloquear todos los events posteriores de este o de un dispositivo dependiente.

Iniciar daemons u otros processs de larga ejecución no es apropiado para udev; los processs bifurcados, separados o no, serán eliminados incondicionalmente después de que el event handlingl evento haya finalizado.

El enfoque correcto es usar SYSTEMD_WANTS (desde man systemd.device ):

LA BASE DE DATOS DE UDEV La configuration de las unidades de dispositivo puede configurarse a través de files de unidades o directamente desde la database de udev (que se recomienda). Las siguientes properties de udev son entendidas por systemd:

SYSTEMD_WANTS = Agrega dependencies de tipo Wants desde esta unidad a todas las unidades listdas. Esto se puede usar para activar unidades arbitrarias, cuando un dispositivo específico esté disponible. Tenga en count que esta y otras tags no se tienen en count a less que el dispositivo esté labeldo con la cadena "systemd" en la database de udev, porque de lo contrario el dispositivo no se expone como una unidad systemd.

Solo necesita un file de service en /etc/systemd/system/media-USBDRIVE.mount.wants/ :

 [Unit] Description=Backup files to USBDRIVE Requires=media-USBDRIVE.mount After=media-USBDRIVE.mount [Service] ExecStart=/path/to/backupscript [Install] WantedBy=media-USBDRIVE.mount 

Nota: esto supone que su unidad USB se llama USBDRIVE y está montada en /media/USBDRIVE .

Si está usando systemd , la persona aquí ya ha respondido esto.

Para colocar una regla

 KERNEL=="sd?1",ACTION=="mount",RUN+="/path/to/script.sh" 

en

 /etc/udev/rules.d/ 

Tenga en count la ejecución de la advertencia como root , ponga cualquier acción que necesite hacer en su script.