Respaldo automático a disco USB

Si tenemos algun server o nuestro desktop de vez en cuando viene bien respaldarlo en un disco externo.

Una opcion facil y barata ( si no te dan $$$ para hacerlo como deberías) es usar un disco USB y que el respaldo se ejecute al conectarlo al puerto USB/Firewire.

Si bien no voy a explicar cómo encriptar los datos, esto sería deseable!!

Que necesitamos: GNU/Linux ( Debian/Ubuntu), Rsync, disco USB/FireWire

1: Setear udev

# dmesg
[ 1164.319347] scsi 8:0:0:0: Direct-Access TOSHIBA External USB 3.0 5438 PQ: 0 ANSI: 6
[ 1164.319746] sd 8:0:0:0: Attached scsi generic sg3 type 0
[ 1164.321741] sd 8:0:0:0: [sdc] 1953525164 512-byte logical blocks: (1.00 TB/931 GiB)
[ 1164.323140] sd 8:0:0:0: [sdc] Write Protect is off
[ 1164.323145] sd 8:0:0:0: [sdc] Mode Sense: 23 00 00 00
[ 1164.324014] sd 8:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1164.333037] sdc: sdc1
[ 1164.366188] sd 8:0:0:0: [sdc] Attached SCSI disk

Vemos que el disco que conectamos, ahora vamos a obtener la data para configurar el udev

# udevadm info -a -p $(udevadm info -q path -n /dev/sdc)
KERNELS=="8:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{model}=="External USB 3.0"
ATTRS{state}=="running"
ATTRS{vendor}=="TOSHIBA "

De todo los datos que nos larga, nos interesan esos 3 para que udev reconozca el disco al conectarlo, se pueden usar otros como el idVendor.

Ahora creamos un archivo en /etc/udev/rules.d con el nombre 50-backup2usb.rules, las reglas de usuario deben ser empiezan por 50.

# UDEV rules para respaldo automatico al conectar disco.
#   udevinfo -a -p $(udevinfo -q path -n /dev/sda)
KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="TOSHIBA", ATTRS{model}=="External USB 3.0", RUN+="/path/script/respaldo2usb.sh %k"
4/11/16 cambio el driver luego de un update
KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="usb", DRIVER=="usb", ATTRS{vendor}=="TOSHIBA", ATTRS{model}=="External USB 3.0", RUN+="/path/script/respaldo2usb.sh %k"

Esto funciona así:

Cuando el kernel encuentra un disco sd?1 ( unica particion de tu disco USB) y está conectado en el subsystem SCSI y la marca es TOSHIBA y el modelo es “External USB 3.0”

entonces corre el script backup2usb.sh, el parámetro %k le pasa al script que el disco/partición es sdc1 ( si lo corres a mano al script debes agregarlo al final)

2: Bajar script y corregir paths

El script está disponible en: https://github.com/cristianmenghi/usbbackup

3: Testearlo

Espero que te sirva como a mi.