Copias de seguridad en Ubuntu Server 18.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-1804-LTS-con-duplicity-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-1804-LTS-con-duplicity-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-1804-LTS-con-duplicity-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-1804-LTS-con-duplicity-004

Instalar duplicity

El equipo de desarrollo de duplicity utiliza su propio repositorio para mantener actualizado el programa. Por lo tanto, el primer paso para su instalación, será añadir dicho repositorio al sistema. Algo que logramos fácilmente con la orden siguiente:

sudo apt-add-repository ppa:duplicity-team/ppa

De nuevo, se trata de una tarea que necesita privilegios administrativos…

… Pero, de forma predeterminada, no será necesario autenticarnos de nuevo en los próximos 15 minutos.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-005

Al hacerlo, obtenemos una URL donde encontrar más información sobre duplicity, y un mensaje indicando que, si no estamos seguros de realizar la instalación, podemos interrumpirla con Ctrl + C.

Aunque, si estamos seguros de continuar, basta con pulsar la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-006

… Un momento más tarde, el proceso habrá concluido.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-007

A continuación, deberemos actualizar la base de datos de paquetes almacenada por el sistema operativo, con la información proveniente del nuevo repositorio, para lo que basta con ejecutar lo siguiente:

sudo apt update

Como antes, copiamos el comando anterior y pulsamos la tecla Intro.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-008

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-1804-LTS-con-duplicity-009

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 S para continuar con el proceso.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-010

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

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-011

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 python-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.

  • python-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-1804-LTS-con-duplicity-012

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

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

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-013

Poco después, tendremos la herramienta instalada.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-014

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-1804-LTS-con-duplicity-015

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 18.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-1804-LTS-con-duplicity-016

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-1804-LTS-con-duplicity-017

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-1804-LTS-con-duplicity-018

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-1804-LTS-con-duplicity-019

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-1804-LTS-con-duplicity-020

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-1804-LTS-con-duplicity-021

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

Nos aparece el aviso de que no se ha podido eliminar el directorio lost+found del sistema. Pero esto no debe preocuparnos.

Los archivos de copia sí se han eliminado.

Copias-de-seguridad-en-Ubuntu-Server-1804-LTS-con-duplicity-022

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-1804-LTS-con-duplicity-023

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-1804-LTS-con-duplicity-024

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-1804-LTS-con-duplicity-025

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-1804-LTS-con-duplicity-026

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-1804-LTS-con-duplicity-027

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-1804-LTS-con-duplicity-028

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