Copia de seguridad automática al conectar USB

Llámalo backup, copia de seguridad, respaldo o como te apetezca, pero hazla. Este sencillo procedimiento puede ahorrarte la pérdida de datos importantes y mucho dinero a las empresas. Pese a eso, está bastante olvidad y no se suele llevar una buena política de copia de seguridad.

Seguramente ya sabes que en función de la cantidad de datos que generas y de la importancia de dichos datos, deberías aumentar o reducir la frecuencia con la que realizas las copias de seguridad. Y tampoco olvides que tienes que hacerla en un medio fiable, ya que si lo haces en medios como los ópticos que se pueden rayar fácilmente… de poco servirá.

Pero independientemente de todo eso, imagina que hacer copias de seguridad fuese aún más sencillo. Imagina que las copias se hacen automáticamente cuando conectas un pendrive o memoria USB al puerto de tu ordenador… Un evento de conexión que desencadene el proceso de copia de seguridad automatizado en tu GNU/Linux. Pues eso es precisamente lo que te explicaré en este tutorial.

La idea de este artículo no es solo la copia de seguridad en sí, sino hacerte ver que con Linux puedes usar incluso eventos de hardware como detonantes de acciones. En este caso es la detección de un USB, pero podría ser otra cosa…

Configurar reglas udev para el medio extraíble

Para que se detecte la conexión de la memoria USB y ese evento desencadene un proceso de copia de seguridad automáticamente nos valdremos de udev de Linux y de la configuración de una serie de reglas.

Pero antes de configurar la regla para que maneje el evento del dispositivo USB, necesitas proveer a udev de ciertos atributos relacionados con el medio extraíble que vas a emplear. Para comenzar debes seguir estos pasos:

  1. Conecta la memoria USB que vas a emplear para la copia de seguridad.
  2. En el terminal, ejecuta el comando lsusb para poder identificar el fabricante (vendor) y el identificador (product ID).
  3. Tras ejecutar el comando anterior tendrás una lista de dispositivos conectados. Debes identificar al que has conectado por su fabricante. Por ejemplo, imagina que es un pendrive Kingston. Observa la entrada correspondiente a él (no te equivoques), luego observa los cuatro caracteres que hay tras ID. Por ejemplo, imagina que la línea correspondiente al pendrive fuese Bus 002 Device 004: ID 146f:4e2a Kingston Technology Corp. Pues lo que nos interesa de ella es lo que he subrayado (146f). Ahora ya tienes el ID de tu dispositivo. Recuerda que si cambias a otro dispositivo no servirá, ya que es único para ese. Por tanto, para realizar la copia siempre deberá usar el mismo medio…
  4. Lo siguiente es crear la regla de udev. Lo primero es desconectar el medio de almacenamiento que has conectado en el paso 1.
  5. Con tu editor de texto favorito crea un fichero llamado 10.autocopia.rules bajo el directorio /etc/udev/rules.d/. El nombre del fichero puedes variarlo, pero es importante que tenga el 10 delante para especificar el orden de ejecución de la regla y que termine en .rules. Por cierto, necesitarás privilegios para crear dicho fichero, así que usa sudo.
  6. Con tu editor, tienes que agregar la siguiente línea dentro de él, modificando el ID según corresponda a tu caso (no olvides guardar los cambios cuando termines):
SUBSYSTEM=="block", ACTION=="add", ATTRS{idVendor}=="146f", ATTRS{idProduct}=="4e2a", SYMLINK+="external", RUN+="/bin/autocopia.sh"

Es una sencilla regla que comparará (==) si el dispositivo se ha conectado y si se corresponde con el ID especificado. Por tanto, en caso de conectar otro dispositivo USB no haría la copia de seguridad (en este caso ejecutar el script autocopia.sh).

Con el operador += se agrega valores a una clave con una lista de entradas. Por otro lado puedes observar en la línea SUBSYSTEM que coincide con el subsistema de eventos de dispositivos, ACTION para el nombre de la acción del evento, ATTRS para los atributos del dispositivo, y RUN para especificar el programa o script a ejecutar cuando el evento ocurra…

También hay una alternativa a lo anterior y es, en vez de usar el ID del dispositivo, puedes usar el nombre por el cual el kernel reconoce a tu dispositivo, y quizás es más sencillo e intuitivo. Por ejemplo, puedes usar lo siguiente para localizar el nombre de tu USB conectado:

sudo fdisk -l

Imagina que es /dev/sdb, en ese caso, regla que deberías usar es:

ACTION=="add", KERNEL=="sdb", RUN+="/bin/autocopia.sh"

Crear el script para la copia de seguridad

Ahora puedes crear el script para tu copia de seguridad. Este script lo puedes modificar para copiar aquello que necesites en tu caso. Podrías sustituirlo por otro diferente, e incluso por un binario, por ejemplo, un programa de copia de seguridad. Pero para eso recuerda que tendrías que modificar el último campo de la regla anterior para apuntar hacia él…

*NOTA: cuidado si tu medio se automonta en /media en vez de en /mnt, de lo contrario este script no funcionará. Deberías modificarlo según caso.

Para crear tu script, los pasos son:

  1. Usa tu editor de texto favorito y crea un fichero llamado autocopia.sh que esté dentro del directorio /bin (puedes usar otro cualquiera). Recuerda que necesitarás privilegios…
  2. Ahora, escribe dentro el código del script de copia de seguridad y guarda al finalizar (recuerda modificar las rutas de los directorios o ficheros que quieras que copie):
#!/usr/bin/bash
BACKUP_SOURCE="/home/isaac"
BACKUP_DEVICE="/dev/external"
MOUNT_POINT="/mnt/external"


#Comprueba si el directorio para montar el dispositivo existe y si no lo crea
if [ ! -d “MOUNT_POINT” ] ; then 
	/bin/mkdir  “$MOUNT_POINT”; 
fi

/bin/mount  -t  auto  “$BACKUP_DEVICE”  “$MOUNT_POINT”

#Ejecuta una copia de seguridad diferencial
/usr/bin/rsync -auz "$BACKUP_SOURCE" "$MOUNT_POINT" && /bin/umount "$BACKUP_DEVICE"
exit

Como ves, usa rsync para hacer una copia de datos diferencial, es decir, solo copia los ficheros nuevos o que se hayan modificado tras la última copia de seguridad realizada. Pero podrías usar cualquier otro programa o tipo de copia (completa o incremental).

Últimos pasos…

Ya solo queda un paso más, y es darle permisos de ejecución a tu script:

sudo chmod +x /bin/autocopia.sh

Y por último recargar udev para que pueda usar las nuevas reglas creadas:

udevadm control --reload

Es importante que si usas acciones que requieran privilegios en el script uses visudo para agregar una línea en la que permitas a tu script usarlos sin necesidad de usar contaseña (NOPASSWD)…

La próxima vez que conectes tu memoria USB se ejecutará el script automáticamente para copiar tus datos…

*Nota: si estás usando una distribución con systemd, también puedes hacerlo usando los propios servicios de éste.

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar