Copias de seguridad con Kopia

per Victor Carceler darrera modificació 2023-03-07T08:36:20+01:00

kopia-1024.pngKopia es una herramienta libre, moderna y rápida para hacer copias de seguridad. De la misma manera que también hacen borg, o restic, kopia permite tomar snapshots de los datos del usuario y guardarlos en un repositorio.

Los diferentes tipos de repositorio son:

  • Un directorio local.
  • Un servidor SFTP o WebDAV.
  • Alguno de los principales proveedores de almacenamiento en la nube.
  • Cualquiera de los servicios soportados por rclone.

La herramienta se encargará de almacenar los backups de manera eficiente con deduplicación y compresión opcional, segura (cifrado) y presentando una sencilla interfaz en la línea de comandos o con una interfaz gráfica.

Cuando se quiera recuperar algún dato de la copia de seguridad se podrá montar el snapshot necesario y acceder a su contenido con las herramientas habituales.

Instalación de kopia

Tratándose de una aplicación reciente no está empaquetada en los repositorios oficiales de ubuntu. Pero la instalación de la aplicación es tan sencilla como descargar el ejecutable y colocarlo en ~/bin.

usuario@obi:~$ wget https://github.com/kopia/kopia/releases/download/v0.12.1/kopia-0.12.1-linux-x64.tar.gz
usuario@obi:~$ tar xzf kopia-0.12.1-linux-x64.tar.gz 
usuario@obi:~$ mkdir bin
usuario@obi:~$ cp kopia-0.12.1-linux-x64/kopia bin/

Alternativamente se podría haber descargado el paquete https://github.com/kopia/kopia/releases/download/v0.12.1/kopia_0.12.1_linux_amd64.deb.

Creación de un repositorio filesystem

Los repositorios filesystem utilizan un directorio local. No es la mejor opción si se quiere que el backup esté en otra máquina pero son los más sencillos para un primer contacto.

Para crear un nuevo repositorio bastará con indicar el tipo y el directorio a utilizar:

usuario@obi:~$ kopia repository create filesystem --path /home/usuario/repo
Enter password to create new repository: 
Re-enter password for verification: 
Initializing repository with:
  block hash:          BLAKE2B-256-128
  encryption:          AES256-GCM-HMAC-SHA256
  splitter:            DYNAMIC-4M-BUZHASH
Connected to repository.

NOTICE: Kopia will check for updates on GitHub every 7 days, starting 24 hours after first use.
To disable this behavior, set environment variable KOPIA_CHECK_FOR_UPDATES=false
Alternatively you can remove the file "/home/usuario/.config/kopia/repository.config.update-info.json".

Retention:
  Annual snapshots:                 3   (defined for this target)
  Monthly snapshots:               24   (defined for this target)
  Weekly snapshots:                 4   (defined for this target)
  Daily snapshots:                  7   (defined for this target)
  Hourly snapshots:                48   (defined for this target)
  Latest snapshots:                10   (defined for this target)
  Ignore identical snapshots:   false   (defined for this target)
Compression disabled.

To find more information about default policy run 'kopia policy get'.
To change the policy use 'kopia policy set' command.

NOTE: Kopia will perform quick maintenance of the repository automatically every 1h0m0s
and full maintenance every 24h0m0s when running as usuario@obi.

See https://kopia.io/docs/advanced/maintenance/ for more information.

NOTE: To validate that your provider is compatible with Kopia, please run:

$ kopia repository validate-provider

usuario@obi:~$

Al crear el repositorio:

  • El usuario deberá introducir la contraseña a utilizar.
  • Se muestran los valores por defecto:
    • Algoritmos de hash, cifrado y splitter utilizados.
    • Política de retención por defecto.
    • Compresión deshabilitada.

Y nos indica que hemos quedado conectados al repositorio.

Conexión con el repositorio

En la máquina en la que se ha creado el repositorio no es necesario establecer ninguna conexión porque ya está conectado. Pero si en algún momento se instala la herramienta y necesitamos conectar con un repositorio existente lo podremos hacer de la siguiente manera:

usuario@obi:~$ kopia repository connect filesystem --path /home/usuario/repo
Enter password to open repository: 

Connected to repository.

NOTICE: Kopia will check for updates on GitHub every 7 days, starting 24 hours after first use.
To disable this behavior, set environment variable KOPIA_CHECK_FOR_UPDATES=false
Alternatively you can remove the file "/home/usuario/.config/kopia/repository.config.update-info.json".

usuario@obi:~$ 

Creación de un repositorio SFTP

Una de las maneras más sencillas de utilizar un repositorio remoto consiste en utilizar el protocolo SFTP. Cualquier máquina con el servidor OpenSSH aceptará conexiones SFTP.

Por ejemplo, suponiendo que en la máquina 192.168.17.105 se ha declarado el usuario kopia con contraseña kopia, podríamos crear un repositorio de la siguiente manera:

usuario@obi:~$ kopia repository create sftp --path=/home/kopia/repo --host=192.168.17.105 --username=kopia --sftp-password=kopia --known-hosts=/home/usuario/.ssh/known_hosts
Enter password to create new repository: 
Re-enter password for verification: 
Initializing repository with:
  block hash:          BLAKE2B-256-128
  encryption:          AES256-GCM-HMAC-SHA256
  splitter:            DYNAMIC-4M-BUZHASH
Connected to repository.

NOTICE: Kopia will check for updates on GitHub every 7 days, starting 24 hours after first use.
To disable this behavior, set environment variable KOPIA_CHECK_FOR_UPDATES=false
Alternatively you can remove the file "/home/usuario/.config/kopia/repository.config.update-info.json".

Retention:
  Annual snapshots:                 3   (defined for this target)
  Monthly snapshots:               24   (defined for this target)
  Weekly snapshots:                 4   (defined for this target)
  Daily snapshots:                  7   (defined for this target)
  Hourly snapshots:                48   (defined for this target)
  Latest snapshots:                10   (defined for this target)
  Ignore identical snapshots:   false   (defined for this target)
Compression disabled.

To find more information about default policy run 'kopia policy get'.
To change the policy use 'kopia policy set' command.

NOTE: Kopia will perform quick maintenance of the repository automatically every 1h0m0s
and full maintenance every 24h0m0s when running as usuario@obi.

See https://kopia.io/docs/advanced/maintenance/ for more information.

NOTE: To validate that your provider is compatible with Kopia, please run:

$ kopia repository validate-provider

usuario@obi:~$

Una vez definido el repositorio sftp (u de otro tipo) no hay ninguna diferencia en su uso respecto a un repositorio filesystem (directorio local).

Crear un snapshot

Un snapshot registra en el repositorio los datos del usuario en un momento determinado.

Realizar un snapshot es muy sencillo:

usuario@obi:~$ kopia snapshot /home/usuario/Documentos/
Snapshotting usuario@obi:/home/usuario/Documentos ...
 * 0 hashing, 0 hashed (0 B), 0 cached (0 B), uploaded 200 B, estimating...
Created snapshot with root k6c4331bc187f5c1aae7d168d7ab7c37d and ID 21042f91b53d9fd707c210a30276fc5e in 0s
Running full maintenance...
Looking for active contents...
Looking for unreferenced contents...
GC found 0 unused contents (0 B)
GC found 0 unused contents that are too recent to delete (0 B)
GC found 1 in-use contents (182 B)
GC found 2 in-use system-contents (1.1 KiB)
Rewriting contents from short packs...
Not enough time has passed since previous successful Snapshot GC. Will try again next time.
Skipping blob deletion because not enough time has passed yet (59m59s left).
Cleaned up 0 logs.
Cleaning up old index blobs which have already been compacted...
Finished full maintenance.
usuario@obi:~$

Durante la creación del snapshot kopia se encargará de añadir al repositorio todos los datos nuevos o los cambios que no estuvieran registrados. El usuario puede tomar nuevos snapshots con la misma orden cuando sea necesario. En cada caso se obtendrá un hash diferente.

Listado de snapshots

Con la orden kopia snapshot list es posible listar los snapshots del repositorio:

usuario@obi:~$ kopia snapshot list
usuario@obi:/home/usuario/Documentos
  2023-03-01 12:12:23 CET k6c4331bc187f5c1aae7d168d7ab7c37d 0 B drwxr-xr-x files:0 dirs:1 (latest-2,hourly-2)
  2023-03-01 16:20:18 CET k9ed7baae58641188d213b29e1949e786 1.5 GB drwxr-xr-x files:1 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1)
usuario@obi:~$

Acceso a los snapshots

El acceso a los snapshots se realiza utilizando kopia para montar un sistema de archivos en el que se encuentra el contenido del snapshot indicado.

Por ejemplo:

usuario@obi:~$ mkdir backup
usuario@obi:~$ kopia mount k9ed7baae58641188d213b29e1949e786 backup &
[1] 2606
usuario@obi:~$ Mounted 'k9ed7baae58641188d213b29e1949e786' on backup
Press Ctrl-C to unmount.

usuario@obi:~$ ls backup
ubuntu-22.04-live-server-amd64.iso
usuario@obi:~$

Activar la compresión

Cuando se crea un nuevo repositorio la política por defecto mantiene la compresión desactivada.

Se puede activar la compresión —con zstd en el ejemplo— para un repositorio con el comando:

usuario@obi:~$ kopia policy set --global --compression=zstd
Setting policy for (global)
 - setting compression algorithm to zstd
usuario@obi:~$

Naturalmente sólo se comprimirán los datos añadidos al repositorio después de activar la compresión.

Pero kopia puede trabajar con varios algoritmos de compresión diferentes que, además, se pueden seleccionar de manera individual para directorios concretos.

Y el comando kopia benchmark compression --data-file= permite probar los diferentes algoritmos de compresión sobre un fichero para poder escoger el idóneo.

Por ejemplo, al hacer un test sobre una imagen de ubuntu se obtienen estos resultados:

usuario@obi:~$ kopia benchmark compression --data-file=Descargas/ubuntu-22.04-live-server-amd64.iso
NOTICE: The provided input file is too big, using first 128 MiB.
Compressing input file "Descargas/ubuntu-22.04-live-server-amd64.iso" (128 MiB) using all compression methods.
Repeating 1 times per compression method (total 128 MiB). Override with --repeat=N.
Benchmarking compressor 'gzip-best-speed'...
Benchmarking compressor 'zstd'...
Benchmarking compressor 'deflate-best-speed'...
Benchmarking compressor 'gzip-best-compression'...
Benchmarking compressor 's2-better'...
Benchmarking compressor 'pgzip'...
Benchmarking compressor 'pgzip-best-speed'...
Benchmarking compressor 's2-parallel-8'...
Benchmarking compressor 'deflate-default'...
Benchmarking compressor 'deflate-best-compression'...
Benchmarking compressor 'gzip'...
Benchmarking compressor 'pgzip-best-compression'...
Benchmarking compressor 's2-default'...
Benchmarking compressor 's2-parallel-4'...
Benchmarking compressor 'zstd-fastest'...
Benchmarking compressor 'zstd-better-compression'...
     Compression                Compressed   Throughput   Allocs   Usage
------------------------------------------------------------------------------------------------
  0. s2-default                 123.3 MiB    1.2 GiB/s    164      397.8 MiB
  1. s2-parallel-4              123.3 MiB    1 GiB/s      975      412 MiB
  2. pgzip-best-speed           122.8 MiB    802.5 MiB/s  1102     390.9 MiB
  3. zstd                       121.4 MiB    767.7 MiB/s  97       299.9 MiB
  4. pgzip                      122.3 MiB    711.8 MiB/s  1109     320 MiB
  5. deflate-default            122.3 MiB    633.8 MiB/s  41       314.6 MiB
  6. deflate-best-speed         122.8 MiB    554.3 MiB/s  42       409.9 MiB
  7. zstd-better-compression    121.2 MiB    521.1 MiB/s  85       310.7 MiB
  8. gzip-best-speed            122.6 MiB    493.3 MiB/s  47       308.7 MiB
  9. zstd-fastest               122 MiB      477.2 MiB/s  93       449.6 MiB
 10. s2-better                  122.8 MiB    429.6 MiB/s  164      364.2 MiB
 11. s2-parallel-8              123.3 MiB    394.6 MiB/s  1024     424.1 MiB
 12. gzip                       121.7 MiB    75.6 MiB/s   45       305.3 MiB
 13. deflate-best-compression   121.5 MiB    72.2 MiB/s   42       312.2 MiB
 14. pgzip-best-compression     121.5 MiB    71.1 MiB/s   1123     309.7 MiB
 15. gzip-best-compression      121.6 MiB    50.4 MiB/s   45       305.3 MiB
usuario@obi:~$

Interfaz gráfica: KopiaUI

Si se desea utilizar una interfaz gráfica es posible instalar KopiaUI que es una aplicación independiente y que no necesita la versión de la línea de comandos. El ejecutable está disponible para descarga en el repositorio de GitHub en diferentes formatos: paquete deb, rpm, AppImage.

Pero probablemente una de las opciones más cómodas sea la instalación en formato Flatpak a través de Flathub:

flatpak install --user https://dl.flathub.org/repo/appstream/io.kopia.KopiaUI.flatpakref

KopiaUI.png

Al utilizar la interfaz gráfica se podrá acceder con claridad a todas las opciones de Kopia:

  • Configuración del repositorio.
  • Snapshots a realizar.
  • Periodicidad con la que se tomarán los snapshots.
  • Montado de un snapshot y restauración de ficheros.

Más información: