Copias de seguridad en Ubuntu Server 20.04 LTS con duplicity (Parte I)

Publicado por P. Ruiz en

¿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

Escribimos el comando y pulsamos la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-001

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.

De nuevo, ejecutamos el comando…

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-002

Por último, podemos asegurarnos de que la tarea ha funcionado como esperábamos mostrando el contenido del directorio:

ls documentos

Y comprobamos que los archivos se han creado correctamente.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-003

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

Y escribir la contraseña.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-004

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

Lo copiamos y pulsamos la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-005

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

Una vez más, escribimos la orden anterior y pulsamos la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-006

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.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-007

A partir de aquí, el sistema ira desgranando todo el proceso de instalación/actualización de paquetes.

Un momento más tarde, la actualización se habrá completado

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-008

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.

Solo tenemos que volver a copiar la orden anterior y pulsar la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-009

apt nos informará de los paquetes complementarios que deberán instalarse para completar la tarea.

Pulsamos la tecla Y y después Intro para permitir la instalación.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-010

Poco después, tendremos la herramienta instalada.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-011

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

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-012

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.

Debemos escribirla duplicada para evitar que cometamos errores tipográficos.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-013

Cuando duplicity termine su trabajo, nos mostrará un cuadro resumen con los resultados.

Obtendremos información como el número de archivos procesados, el espacio ocupado, etc.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-014

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.

También aparece el momento exacto de la copia.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-015

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

Como en los casos anteriores, copiamos la orden anterior y pulsar la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-016

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.

La escribimos y pulsamos la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-017

Después, podemos comprobar que todo ha funcionado correctamente consultando el contenido de la carpeta:

ls recupera

Comprobamos que aparecen todos los archivos que había en documentos.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-018

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/*

Los archivos se han eliminado.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-019

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

Ejecutamos los comandos anteriores

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-020

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

Escribimos la orden y pulsamos la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-021

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.

Así, se evitan posibles errores tipográficos.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-022

De nuevo, cuando duplicity termine su trabajo, nos mostrará un cuadro resumen con los resultados.

El resultado es bastante parecido al anterior, ya que hemos excluido los archivos nuevos.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-023

Comprobar el resultado

Siguiendo la pauta de antes, recuperaremos la copia para comprobar si contiene los archivos excluidos

duplicity file:///backup recupera

Escribimos el comando y, a continuación, la frase de paso.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-024

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.

Copias-de-seguridad-en-Ubuntu-Server-20-04-LTS-con-duplicity-Parte-I-025

Y esto es todo por el momento. Espero que te haya resultado interesante.