Copias de seguridad en Ubuntu Server 20.04 LTS con duplicity (Parte I)
¿Qué es duplicity?
duplicity es una herramienta avanzada de copias de seguridad, disponible para la línea de comandos. Está escrita en Python, usando herramientas como librsync y GnuPG.
Los archivos obtenidos se encuentran en formato tar y, si lo creemos oportuno, pueden estar cifrados. Además, permite realizar copias incrementales que nos permite ahorrar espacio (algo importante cuando usamos almacenamiento en la nube, como Google Drive, S3 o servidores FTP).
librsync es una librería de software libre que implementa el algoritmo rsync para almacenamiento remoto, que permite actualizaciones eficientes de archivos. Además, su diseño permite que se integre en muchas aplicaciones distintas.
Por su parte, GnuPG es una implementación libre del estándar OpenPGP, que permite cifrar y firmar tanto la información como las comunicaciones.
En este artículo aprenderemos a instalar duplicity y a realizar copias de seguridad de forma manual en un dispositivo local. En particular, en el disco que incorporamos en el artículo Añadir un nuevo disco al sistema en Ubuntu Server 18.04 LTS.
En un próximo artículo, comprobaremos lo sencillo que resulta programar una tarea para automatizar el proceso.
El artículo de hoy lo desarrollaremos sobre Ubuntu Server pero, para ponerlo en práctica sobre la versión de escritorio, solo tienes que abrir una ventana de terminal. Por ejemplo, usando la combinación de teclas Alt + Control + T.
Crear archivos de prueba
Para comenzar, lo primero que haremos será crear un conjunto de archivos de prueba que usaremos como origen de la copia de seguridad. Iniciamos la tarea creando un directorio, llamado documentos, que contendrá dichos archivos:
mkdir documentos
A continuación, crearemos 20 archivos diferentes dentro del directorio anterior. Para lograrlo, usaremos el comando touch que, precisamente, tiene la función de crear archivos vacíos.
En nuestro caso, usaremos como base el nombre archivo.txt, pero antes de la extensión (.txt) incluiremos una expresión expandida de bash. Esta consiste en escribir una secuencia encerrada entre llaves como esta:
touch documentos/archivo{1..20}.txt
Así, en lugar de un nombre de archivo, obtenemos 20: archivo1.txt, archivo2.txt, etc.
Por último, podemos asegurarnos de que la tarea ha funcionado como esperábamos mostrando el contenido del directorio:
ls documentos
Asegurar permisos de escritura en el destino
En nuestro caso, como hemos dicho al principio, el destino de la copia será el disco que incorporamos en el artículo Añadir un nuevo disco al sistema en Ubuntu Server 18.04 LTS. Sin embargo, tendremos la precaución de modificar los permisos sobre la carpeta que actúa de punto de montaje. Así, podremos escribir en ella desde cualquier cuenta de usuario que lo necesite. Para conseguirlo, basta con usar un comando como este:
sudo chmod 777 /backup
Como se trata de una tarea administrativa, debemos anteponer la orden sudo…
Instalar duplicity
Afortunadamente, en Ubuntu 20.04 LTS, duplicity ya se encuentra incluido en los repositorios oficiales. Esto significa que no tendremos que añadir ningún repositorio complementario para su instalación.
Lo que sí necesitaremos, será actualizar la base de datos de paquetes almacenada por el sistema operativo, con la información proveniente de los repositorios que ya se encuentren registrados. Para lograrlo, basta con ejecutar el siguiente comando:
sudo apt update
Cuando se complete la tarea, nos aseguraremos de tener el sistema operativo completamente actualizado. De esta forma, los paquetes instalados quedarán en la misma versión que los almacenados en los repositorios. Lo conseguimos escribiendo lo siguiente:
sudo apt upgrade
Al hacerlo, el sistema nos muestra información sobre el proceso que va a realizar: el nombre y el número de paquetes que serán actualizados y el nombre y número de paquetes nuevos que habrá que instalar para satisfacer las dependencias. También el número de paquetes que habría que eliminar y el número de paquetes que quedarán sin actualizar (si fuese el caso).
Por último, veremos la cantidad de información que será preciso descargar y el espacio total que será preciso ocupar en el disco para llevar a cabo la tarea.
Una vez leída la información, si estamos de acuerdo, bastará con pulsar la tecla Y para continuar con el proceso.
A partir de aquí, el sistema ira desgranando todo el proceso de instalación/actualización de paquetes.
Finalmente, estamos listos para incorporar duplicity con la siguiente orden:
sudo apt install duplicity haveged python3-boto
Como ves, además de duplicity, hemos aprovechado para añadir dos paquetes más, que serán necesarios:
-
haveged: un demonio que cosecha datos aleatorios cuando no puede utilizarse la interacción del usuario. Utiliza un algoritmo llamado HAVEGE (HArdware Volatile Entropy Gathering and Expansion) que mantiene 1 millón de bytes aleatorios de forma constante para el sistema. Su uso está relacionado con la generación de claves GPG.
-
python3-boto: es un SDK (Software Development Kit) de AWS (Amazon Web Services) para Python que permite la integración de duplicity con los servicios de AWS, incluido Amazon S3.
apt nos informará de los paquetes complementarios que deberán instalarse para completar la tarea.
Averiguar si tenemos instalado GPG
GPG o GnuPG (GNU Privacy Guard) es una implementación completa y libre del estándar OpenPGP. Su objetivo es cifrar y firmar tanto comunicaciones como datos, y se integra fácilmente con otras aplicaciones, como en el caso de duplicity.
En nuestro caso, como estamos trabajando con Ubuntu Server, lo más probable es que ya lo tengamos instalado. Sin embargo, si queremos asegurarnos, solo tenemos que ejecutar un comando como este:
gpg --version
Al hacerlo,no solo comprobamos que está instalado, también la versión concreta que tenemos disponible
Hacer la primera copia de seguridad
Para hacer una copia de seguridad de los datos que queramos, solo hay que utilizar el nombre de la herramienta, seguido de la ruta de los datos que queremos copiar y, a continuación, del destino donde queremos almacenarla. Es decir, algo como esto:
duplicity ~/documentos file:///backup
Observa que estamos copiando el contenido de la carpeta documentos que creamos al principio con archivos de prueba, y que usamos como destino la carpeta /backup, que es el punto de montaje que usamos para el disco nuevo en nuestro artículo Añadir un nuevo disco al sistema en Ubuntu Server 20.04 LTS. Como es lógico, en tu caso deberás adaptar los valores a lo que corresponda en tu sistema.
Otra cuestión a tener en cuenta es que, en nuestro ejemplo, usamos el prefijo file:// para indicar que se trata de un destino local. No obstante, debemos recordar que duplicity también es capaz de almacenar sus copias de respaldo, de forma remota, utilizando SSH/SCP/SFTP, rsync, FTP, Amazon S3, Google Cloud Storage o Rackspace Cloud Files, entre otros. En cada caso, habrá que utilizar el prefijo correspondiente.
De forma predeterminada, la copia se almacenará cifrada, por lo que también nos solicitará una frase de paso.
Cuando duplicity termine su trabajo, nos mostrará un cuadro resumen con los resultados.
También podemos comprobar el contenido de la carpeta /backup usando una orden como esta:
ls /backup
Por ejemplo, la palabra full indica que la copia es completa, y la extensión gpg que se encuentra cifrada.
De forma predeterminada, si más adelante volvemos a repetir el mismo proceso, las copias serán incrementales, es decir, solo guardan los datos que han cambiado desde la copia anterior.
Si queremos controlar el tipo de copia que se realiza, bastaría con usar la palabra full o incremental. Por ejemplo:
duplicity incremental ~/documentos file:///backup
Recuperar la copia anterior
Para que resulte sencillo comprobar que la copia se ha restaurado correctamente, usaremos una carpeta diferente de la que actuó como origen de los datos. Por lo tanto, comenzamos creándola:
mkdir recupera
Después, estamos listos para iniciar la recuperación usando esa carpeta como destino. Para lograrlo, escribimos algo como esto:
duplicity file:///backup recupera
Como cabía esperar, la herramienta nos pide la frase de paso antes de iniciar la recuperación.
Después, podemos comprobar que todo ha funcionado correctamente consultando el contenido de la carpeta:
ls recupera
Hacer una copia excluyendo parte del contenido
Una vez que ya hemos comprobado el modo más simple de hacer copias de seguridad y recuperarlas, vamos a demostrar los sencillo que es ajustarlas a nuestras necesidades.
Para comenzar, limpiaremos el escenario…
Eliminamos las copias de seguridad que hayamos realizado:
rm /backup/*
Y también los archivos recuperado en el apartado anterior:
rm recupera/*
A continuación, creamos un subdirectorio llamado borradores, dentro de documentos:
mkdir documentos/borradores
Y, siguiendo la misma técnica del principio, creamos 10 nuevos archivos de ejemplo con el nombre borrador1.txt, borrador2.txt, etc.
touch documentos/borradores/borrador{1..10}.txt
A continuación, vamos a repetir la copia anterior, pero evitando que se copie el directorio borradores y todo su contenido. Lo logramos añadiendo la opción –exclude, seguida de la ruta a excluir
duplicity ~/documentos file:///backup --exclude ~/documentos/borradores
El ejemplo anterior es muy sencillo, pero la opción –exclude, combinada con su contraria, –include, nos permite resolver situaciones bastante sofisticadas.
Por ejemplo, la siguiente orden copiaría todo el directorio raíz, pero le estamos diciendo que incluya /home y /etc, y que excluya todo lo demás.
duplicity / file:///backup --include /home --include /etc --exclude '**'
En cualquier caso, aquí solo pretendemos realizar un acercamiento a duplicity. Si necesitas un mayor detalle sobre sus capacidades, te recomiendo que eches un vistazo a la documentación de Ubuntu: http://manpages.ubuntu.com/manpages/trusty/man1/duplicity.1.html
Como la vez anterior, la herramienta nos pide la frase de paso, por duplicado, antes de iniciar la copia.
De nuevo, cuando duplicity termine su trabajo, nos mostrará un cuadro resumen con los resultados.
Comprobar el resultado
Siguiendo la pauta de antes, recuperaremos la copia para comprobar si contiene los archivos excluidos
duplicity file:///backup recupera
Después, consultamos el contenido de la carpeta:
ls recupera
Observamos que aparecen todos los archivos que había en documentos, pero no el subdirectorio borradores.
Y esto es todo por el momento. Espero que te haya resultado interesante.