Duplicity (Español)

From ArchWiki
Esta traducción de Duplicity fue revisada el 2021-02-12. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Duplicity es un programa de copias de seguridad en red.

Puede guardar instantáneas de directorios y archivos en un archivo tar remoto encriptado con GnuPG, que actúa como repositorio de copias de seguridad. La conexión con el repositorio remoto puede realizarse a través de cualquiera de los siguientes protocolos: rsync, ftp, HSI, WebDAV, Tahoe-LAFS, o Amazon S3.

Las copias de seguridad son incrementales, lo que significa que sólo se almacenan los cambios en los archivos (desde la última instantánea).

Instalación

Instale el paquete duplicity.

Frontends

  • Duply, un frontend de shell, disponible en el AUR.
  • deja-dup, un frontend fácil de utilizar. Proporciona la herramienta de línea de comandos deja-dup y el frontend GTK deja-dup-preferences.

Utilización básica

Realizar copias de seguridad

Para realizar una copia de seguridad de la carpeta local /home/me a la ubicación remota /usr/backup en el host other.host a través del protocolo scp/ssh, ejecute la orden

duplicity /home/me scp://uid@other.host//usr/backup

La primera vez que se ejecute esta orden, se creará una copia de seguridad completa. Si se vuelve a ejecutar exactamente la misma orden, se creará una copia de seguridad incremental en el repositorio de copias de seguridad existente.

Las opciones adicionales de la línea de comandos permiten:

  • incluir o excluir archivos y directorios específicos de la copia de seguridad (utilizando patrones de shell o expresiones regulares)
  • ajustar el cifrado y la firma de las copias de seguridad

Restaurar archivos desde la copia de seguridad

Para restaurar la carpeta local /home/me al estado de la última instantánea guardada en el repositorio remoto /usr/backup en el host other.host, ejecute

duplicity scp://uid@other.host//usr/backup /home/me 

Nótese el orden inverso de los argumentos en comparación con el comando de copia de seguridad anterior. El argumento de la URL se trata siempre como el repositorio de la copia de seguridad, y el argumento de la ruta local como el directorio a sincronizar con la copia de seguridad. (Un repositorio local de copias de seguridad debe ser especificado explícitamente usando el prefijo file:// protocol)

Las opciones adicionales de la línea de comandos permiten:

  • restaurar un archivo específico en lugar de todo el repositorio
  • restaurar archivos al estado que tenían en una fecha específica, en vez de a la instantánea más reciente disponible

Inspección y mantenimiento del repositorio

Existen algunas opciones adicionales en la línea de comandos para comparar el estado del repositorio con el estado de los archivos locales, y para eliminar instantáneas antiguas de forma que sólo se mantenga una cantidad fija de instantáneas o sólo las que sean más recientes que una fecha determinada.

Véase la página de manual para más detalles.

Ejemplo de script de copia de seguridad

#!/bin/sh
## Remote backup script. Requires duplicity and gpg-agent with the keys and passphrases loaded as root.
## Uses separate encryption and signing keys
## Usage:  'backup_remote.sh'

enc_key=44D79E41
sign_key=F5C978E3
src="/mnt/backup/"
dest="scp://destination.com//backups/homeserver"

# Keychain is used to source the ssh-agent keys when running from a cron job
type -P keychain &>/dev/null || { echo "I require keychain but it's not installed.  Aborting." >&2; exit 1; }
eval `keychain --eval web_rsa` || exit 1
## Note: cannot use keychain for gpg-agent because it does not currently (2.7.1) read in all the keys correctly. 
## Gpg will ask for a passphrase twice for each key...once for encryption/decryption and once for signing. 
## This makes unattended backups impossible, especially when trying to resume an interrupted backup.
if [ -f "${HOME}/.gnupg/gpg-agent-info" ]; then
      . "${HOME}/.gnupg/gpg-agent-info"
      export GPG_AGENT_INFO
fi

duplicity --use-agent \
         --verbosity notice \
         --encrypt-key "$enc_key" \
         --sign-key "$sign_key" \
         --full-if-older-than 60D \
         --num-retries 3 \
         --asynchronous-upload \
         --volsize 100 \
         --archive-dir /root/.cache/duplicity \
         --log-file /var/log/duplicity.log \
         --exclude /mnt/backup/fsarchiver \
         --exclude '**rdiff-backup-data' \
         "$src" "$dest"
Nota: Hay un problema con la versión actual de pinentry (0.8.1-3) que no permite la introducción de la frase de contraseña para un gpg-agent root cuando se inicia sesión como root usando su o sudo. Si está accediendo a un servidor remoto en el que no se permite (o no se desea) el inicio de sesión directo ssh de root, entonces tiene que o bien parchear pinentry o bien hacer chown root `tty` antes de iniciarlo. Esto no es problema cuando se ejecuta gpg-agent como un usuario no root.
Nota: Si desea iniciar gpg-agent en el inicio de sesión de root y luego almacenar en caché las frases de contraseña para gpg-agent a su conveniencia, puede añadir estas funciones a su /root/.bashrc:
function gpg_start {
       gnupginf="${HOME}/.gnupg/gpg-agent-info"
       if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
           eval "$(cat $gnupginf)"
           eval "$(cut -d= -f1 < $gnupginf | xargs echo export)"
       else
           eval "$(gpg-agent -s --daemon --write-env-file $gnupginf)"
       fi
}
function keys {
       touch test-gpg.txt
       touch test-gpg.txt1
       gpg -r 'Duplicity Encryption Key' -e test-gpg.txt
       gpg -r 'Duplicity Signature Key' -e test-gpg.txt1
       gpg -u <signing key> --detach-sign test-gpg.txt
       gpg -u <encryption key> --detach-sign test-gpg.txt1
       gpg -d test-gpg.txt.gpg
       gpg -d test-gpg.txt1.gpg
       rm test-gpg.txt*
}
gpg_start

Solución de problemas

Si obtiene errores gpg que mencionan "inappropriate ioctl for device" lo más probable es que tenga que ver con los cambios en el comportamiento del gpg-agent desde la versión 2.1 en adelante. Véase este hilo para más información. En general, uno necesita permitir explícitamente que los programas proporcionen la frase de contraseña al gpg-agent en vez de preguntar al usuario.

Los pasos necesarios para remediar este problema se detallan en GnuPG#Unattended passphrase.

Véase también