Copias de seguridad con Kopia
Kopia 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
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: