Mi solución de backup
Intro
¿Los backups son importantes, ok? Yo lo sé, vos deberías saberlo. ¿Entonces, por qué la mayoría no tiene backups decentes de sus compus?
Porque la mayoría de las maneras de hacer backups son inconvenientes o inútiles.
Así que acá está la solución que yo implementé, que hace mis backups útiles y convenientes.
La herramienta de backup en sí
Uso restic porque está buena. Funciona, es rápida, es eficiente con el espacio, y es fácil.
Nada más hay que escribir un script como este:
La regla 3-2-1 de los backups
Dice la regla 3-2-1:
- 3 copias de los datos (1 backup primario, dos secundarios)
- 2 medios de almacenamiento distinto
- 1 remoto
En mi caso, es así:
- Backup primario es en el disco
- Backup secundario es a disco en otra máquina (un script similar, usando sftp)
- Backup terciario a un pen drive (medio distinto) que después va en mi bolsillo (remoto)
Para hacer los backups primario y secondario son dos versiones de ese script (en realidad el mismo script, con argumentos).
El backup terciario es un poco más complicado, porque quiero que sea conveniente.
La manera conveniente de hacer backup a un medio removible
Esta es mi "user story":
Como persona que quiere un backup offsite pero no tiene ganas de transmitir todos esos datos, quiero enchufar un pen drive en la máquina a backupear y que AUTOMÁTICAMENTE se haga el backup de los datos al pen drive.
Entonces, cuando en algún momento el backup termine, lo puedo desenchufar y llevármelo.
Digamos que encontrar la forma de hacer eso me tomó varias horas y estoy bastante seguro que mi solución es más complicada de lo necesario. Pero bueno, funciona, así que está bien.
Siendo esto Linux en el año 2022 ... esta solución implica systemd. Y porque es systemd, es complicado.
Automount
Lo primero es montar el pen drive automáticamente en un lugar conocido. Para eso se
necesitan dos cosas. Un servicio de automount, para que systemd monte algo en /backup
:
/etc/systemd/system/backup.automount
Y un servicio de mount, para que sepa qué se monta en /backup
y cómo:
/etc/systemd/system/backup.mount
Las partes interesantes son:
-
Wants
yBefore
: esebackup.service
v a a ser un servicio systemd que efectivamente corre el script de backup. Queremos que lo haga, y que lo haga DESPUÉS de que el pen drive se haya montado. -
Where
yWhat
: "Where" dónde se monta y "What" es el UUID del pen drive como lo muestrasudo blkid
Hay que habilitar e iniciar el servicio automount, no hace falta hacer nada con el de mount.
Por supuesto después viene el servicio de backup en sí. Es un "oneshot": cuando arranca ejecuta el script de backup:
/etc/systemd/system/backup.service
Hay que habiliatarlo pero no hacer "start". Ya que está en el "Wanted" del mount, cuando el dispositivo se monta el backup se ejecuta.
O ASÍ SERÍA EN UN MUNDO EN EL QUE LAS COSAS TIENEN SENTIDO
Lamentablemente el dispositivo solo se monta cuando, después de ser insertado, alguien
trata de usar el mountpoint. Así que con estos servicios nada pasa hasta que, después
de enchufar el pen drive uno va y hace algo como ls /backup
, lo que dispara el mount,
que a su vez inicia el script de backup.
¿Y cómo se arregla? Ni idea. Mi workaround fue agregar OTROS DOS SERVICIOS, así ls /backup
se ejecuta una vez por minuto.
/etc/systemd/system/backup_try.timer
/etc/systemd/system/backup_try.service
Y con eso, sí, puedo enchufar el pen drive cuando llego a la oficina a la mañana y desenchufarlo más tarde, sabiendo que tiene un backup de hoy adentro.