Índice de contenidos
Introducción
Hace unos días en mi meditado repaso de twitter matinal leía que sólo existen dos tipos de personas:
- Aquellos que hacen Backup.
- Aquellos que harán Backup.
En esta serie de posts sobre herramientas de Backup os he ido presentando, mezcladas entre distintas criaturas fantásticas, utilidades que os permitirán pertenecer al selecto club del primer grupo.
Hoy os traigo, con su criatura fantástica de rigor, una herramienta llamada BorgBackup, simplificado Borg. Se trata de un software de Backup con deduplicación, cifrado y compresión de datos.
Las principales características de Borg son:
- Uso eficiente del espacio. Gracias a la deduplicación el espacio usado por los trabajos de copia se reduce.
- Velocidad. El código fuente que se encarga de la deduplicación, compresión y cifrado está escrito en C.
- Cifrado. Toda la información se puede cifrar mediante AES 256-bit, la integridad de la información es verificada mediante HMAC-SHA256 y el cifrado se realiza en el lado del cliente.
- Compresión. Los datos pueden ser comprimidos opcionalmente mediante lz4, zstd, zlib o lzma.
- Backup Off-site. Borg puede guardar tus backups en cualquier máquina que soporte el protocolo ssh.
- Los repositorios de backup pueden ser montados como sistemas de ficheros.
- Fácil instalación en multitud de plataformas.
- Es una utilidad Open Source con licencia BSD.
Borg trabaja con repositorios de una forma parecida a la herramienta Restic que vimos en el primer post.
Guía rápida de uso
Una vez instalada la herramienta en nuestro sistema tendremos que dar de alta un repositorio para almacenar nuestros Backups, en este caso daremos de alta un repositorio local alojado en el directorio
/srv/backups
que almacenará el contenido de nuestro directorio /home
.
1 2 3 4 5 6 7 8 9 10 |
# Inicializamos el repositorio e introducimos la clave $ borg init --encryption=repokey /srv/backups Enter new passphrase: Enter same passphrase again: Do you want your passphrase to be displayed for verification? [yN]: y Your passphrase (between double-quotes): "ClaveGTK" Make sure the passphrase displayed above is exactly what you wanted. IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo! Use "borg key export" to export the key, optionally in printable format. Write down the passphrase. Store both at safe place(s). |
Como veis el repositorio ha quedado inicializado y nos solicita una contraseña para protegerlo, también nos recomienda guardar la clave privada con el que ha sido cifrado, ¡no seáis confiados con ésto! y guardadla a buen recaudo, ya sea su versión digital o impresa (
borg key export repo_path path/file.key
ó borg key export repo_path --paper
).Una vez inicializado el repositorio, que contendrá nuestros Backups, es hora de sacar el mandil y ponernos manos a la obra. Como ejemplo, haremos un Backup llamado «Jueves» y guardaremos el contenido del directorio
/home/fjfunes/documents
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# Creamos un backup llamado 'Jueves' que guardará el directorio 'Documentos' $ borg create /srv/backups::Jueves ~/Documentos Enter passphrase for key /srv/backups: # Ahora revisaremos el repositorio en busca de los backups que contiene $ borg list /srv/backups Enter passphrase for key /srv/backups: Jueves Thu, 2018-09-27 23:06:54 [07d98b3e596ea67ba9ac1229c5b184fc170c8209e5f0c69df6d6b773b69aaad5] # Podemos ver la información del repositorio completo mediante el comando `info` $ borg info /srv/backups Enter passphrase for key /srv/backups: Repository ID: 5cdd7d0faa555d07321ab35ec418d36c3d2f9375d33b0ed625235244dfbee46e Location: /srv/backups Encrypted: Yes (repokey) Cache: /home/fjfunes/.cache/borg/5cdd7d0faa555d07321ab35ec418d36c3d2f9375d33b0ed625235244dfbee46e Security dir: /home/fjfunes/.config/borg/security/5cdd7d0faa555d07321ab35ec418d36c3d2f9375d33b0ed625235244dfbee46e ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size All archives: 74.39 MB 52.41 MB 51.10 MB Unique chunks Total chunks Chunk index: 3619 3948 # Y por último podemos ver el contenido del archivo llamado 'Jueves' $ borg list /srv/backups::Jueves Enter passphrase for key /srv/backups: drwxr-xr-x fjfunes fjfunes 0 Thu, 2018-09-27 23:03:24 home/fjfunes/Documentos drwxr-xr-x fjfunes fjfunes 0 Sat, 2018-08-11 19:54:59 home/fjfunes/Documentos/devilbox drwxr-xr-x fjfunes fjfunes 0 Thu, 2018-09-27 23:03:30 home/fjfunes/Documentos/devilbox/.git drwxr-xr-x fjfunes fjfunes 0 Sat, 2018-08-11 19:54:16 home/fjfunes/Documentos/devilbox/.git/info -rw-r--r-- fjfunes fjfunes 240 Sat, 2018-08-11 19:54:16 home/fjfunes/Documentos/devilbox/.git/info/exclude drwxr-xr-x fjfunes fjfunes 0 Sat, 2018-08-11 19:54:16 home/fjfunes/Documentos/devilbox/.git/branches drwxr-xr-x fjfunes fjfunes 0 Sat, 2018-08-11 19:54:16 home/fjfunes/Documentos/devilbox/.git/hooks ... ... ... |
Como veis, es fácil realizar un Backup de un directorio. Aunque, en este caso, el repositorio sea local también podríamos utilizar un repositorio remoto mediante
ssh
utilizando la siguiente sintaxis al inicializarlo: borg init --encryption=repokey ssh://user@host:path/to/repo
.
Automatizando Borg
Ahora que sabemos utilizar Borg para un uso manual, llega la parte trepidante, automatizarlo para que nos sea sumamente útil. Recordad: Los Backups que no se programan, acaban por no hacerse.
Crearemos un script bash que contenga lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# Fichero backup_con_borg.sh #!/bin/sh # Dirección del repositorio remoto (haremos uso de claves públicas para acceder) export BORG_REPO=ssh://user@host/srv/backups # Password del repo (ojo con los permisos!!) export BORG_PASSPHRASE='ClaveGTK' # helpers info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM info "Starting backup" # Crearemos un backup de las carpetas más importantes # cuyo nombre será el de la máquina en la que corremos el script: borg create \ --verbose \ --filter AME \ --list \ --stats \ --show-rc \ --compression lz4 \ --exclude-caches \ --exclude '/home/*/.cache/*' \ --exclude '/var/cache/*' \ --exclude '/var/tmp/*' \ \ ::'{hostname}-{now}' \ /etc \ /home \ /root \ /var \ backup_exit=$? info "Pruning repository" # Después de realizar la copia purgaremos el repositorio para mantener # un esquema de backup que nos permita guardar 7 copias diarias, # 4 semanales y 6 mensuales. borg prune \ --list \ --prefix '{hostname}-' \ --show-rc \ --keep-daily 7 \ --keep-weekly 4 \ --keep-monthly 6 \ prune_exit=$? # código de salida global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) if [ ${global_exit} -eq 1 ]; then info "Backup and/or Prune finished with a warning" fi if [ ${global_exit} -gt 1 ]; then info "Backup and/or Prune finished with an error" fi exit ${global_exit} |
Ahora, sólo tendríamos que agregar el fichero a nuestro
cron
, a la hora deseada para tener un sistema de Backup basado en la herramienta Borg.
Criaturas fantásticas
Os estaréis preguntando ¿dónde está en el post de la criatura fantástica, la gran ballena blanca asesina o el despiadado vampiro?.
Cuando planeaba esta serie de posts sobre herramientas de Backup y elegí entre la infinidad de opciones posibles, no me paré a revisar qué historia había detrás de Borg. Hace unos días, documentando el post, me encontré con que los Borg son un personaje del Universo Star Trek y el nombre viene de contraer la palabra «CyBorg».
Los Borg son una especie de civilización humanoide que combinan lo sintético con lo orgánico, lo que les da mejores capacidades mentales y físicas. Todos los Borg están conectados a través de su mente formando una colmena que es controlada por la Reina Borg. De esta forma, cuando un Borg muere, el resto de Borgs asumen sus conocimientos. Esto hace que puedan terminar el trabajo que estaban haciendo sin empezar de nuevo, convirtiéndolos en una especie sumamente eficientes a la hora de atacar o defenderse de un ataque. El cometido principal de los Borg es asimilar especies, incorporando en sí mismos las características de estas, para mejorar la calidad de la vida en el universo. Tras conocer un poco acerca de los Borg sólo me queda contaros que los creadores de la herramienta Borg se llaman así mismos «Colectivo Borg» como los integrantes de esta civilización que aparece en Star Trek.
Una frase utilizada por estas criaturas y que da título a este post:
«Somos los Borg. Bajen sus escudos y rindan sus naves. Sumaremos sus características biológicas y tecnológicas a las nuestras. Su cultura se adaptará para servirnos. La resistencia es inútil«.
Ya sabes, ¡no te resistas!, haz Backups y hoy, al menos, ¡hazlos con Borg!.