Kopia es una herramienta de copias de seguridad de código abierto que crea snapshots cifrados, comprimidos y deduplicados de tus directorios y los guarda en un almacenamiento local, SFTP o de objetos (S3, Backblaze B2, Google Cloud Storage y otros). En este tutorial instalarás Kopia en Ubuntu 24.04 desde su repositorio oficial, crearás un repositorio cifrado en un bucket compatible con S3, configurarás compresión, exclusiones y retención, programarás copias diarias con un temporizador de systemd y restaurarás archivos para comprobar que todo funciona.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
- Un usuario no root con privilegios
sudo. - Un bucket S3 o compatible con S3 vacío, con una clave de acceso (access key y secret key) con permisos de lectura y escritura. Más adelante verás las variantes para Backblaze B2, SFTP y disco local.
Los comandos de Kopia se ejecutan como root (con sudo -i), porque la copia necesita leer archivos de todo el sistema y la configuración del repositorio queda en el perfil de root (/root/.config/kopia/).
Paso 1: Instalar Kopia desde el repositorio oficial
Kopia publica paquetes para Debian y Ubuntu en su propio repositorio APT. Descarga la clave de firma en /etc/apt/keyrings:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://kopia.io/signing-key | sudo gpg --dearmor -o /etc/apt/keyrings/kopia-keyring.gpg
Añade el repositorio:
echo "deb [signed-by=/etc/apt/keyrings/kopia-keyring.gpg] http://packages.kopia.io/apt/ stable main" | sudo tee /etc/apt/sources.list.d/kopia.list
Instala el paquete:
sudo apt update
sudo apt install kopia
Comprueba la versión instalada:
kopia --version
0.21.1 build: ... from: kopia/kopia
Tu número de versión puede ser distinto.
Paso 2: Crear un repositorio cifrado en S3
El repositorio es el destino donde Kopia guarda los datos cifrados. Kopia lee las credenciales de S3 de las variables AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY y la contraseña del repositorio de KOPIA_PASSWORD, lo que evita dejarlas en el historial de la shell como argumentos. Abre una shell de root y expórtalas:
sudo -i
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export KOPIA_PASSWORD=your_strong_repository_password
Crea el repositorio. --prefix permite compartir un bucket entre varios servidores, cada uno en su propia ruta:
kopia repository create s3 \
--bucket=your-bucket \
--endpoint=s3.amazonaws.com \
--region=us-east-1 \
--prefix=servidor1/
Para un proveedor compatible con S3, cambia --endpoint y --region por los del proveedor. Si todo va bien, Kopia crea el repositorio y se conecta a él:
Initializing repository with:
block hash: BLAKE2B-256-128
encryption: AES256-GCM-HMAC-SHA256
splitter: DYNAMIC-4M-BUZHASH
Connected to repository.
Comprueba el estado de la conexión:
kopia repository status
Al conectarse, Kopia guarda la configuración en /root/.config/kopia/repository.config y, por defecto, también la contraseña, de modo que los siguientes comandos (y el temporizador de systemd) no la vuelven a pedir.
Importanteguarda la contraseña del repositorio fuera del servidor, por ejemplo en un gestor de contraseñas. Sin ella no podrás restaurar nada, y Kopia no tiene forma de recuperarla.
Cierra la sesión y abre otra con sudo -i para que las claves exportadas no queden en el entorno:
exit
Otros tipos de repositorio
Si no usas S3, el resto del tutorial es idéntico. Solo cambia el comando de creación:
| Destino | Comando |
|---|---|
| Backblaze B2 | kopia repository create b2 --bucket=your-bucket --key-id=your_key_id --key=your_application_key |
| SFTP | kopia repository create sftp --host=backup.your_domain --username=your_user --path=/backups/kopia --keyfile=/root/.ssh/id_ed25519 --known-hosts=/root/.ssh/known_hosts |
| Disco local o NFS | kopia repository create filesystem --path=/mnt/backup/kopia |
Un repositorio en el mismo disco del servidor no protege frente a la pérdida del servidor. Úsalo solo para pruebas o sobre un disco o NAS independiente.
Paso 3: Configurar compresión, exclusiones y retención
Las políticas definen cómo se comporta cada snapshot. La política global se aplica a todos los directorios y cada directorio puede sobrescribirla.
Activa la compresión zstd, que ofrece un buen equilibrio entre ratio y CPU. Los archivos que ya están comprimidos (imágenes, vídeo, zip) apenas ganan espacio, pero Kopia los procesa igualmente:
sudo -i
kopia policy set --global --compression=zstd
Define cuántos snapshots se conservan. Kopia aplica esta retención automáticamente cada vez que crea un snapshot:
kopia policy set --global \
--keep-latest=10 \
--keep-hourly=0 \
--keep-daily=14 \
--keep-weekly=8 \
--keep-monthly=12 \
--keep-annual=2
Excluye lo que no necesitas copiar. Las reglas de exclusión siguen la sintaxis de .gitignore y se aplican al directorio indicado:
kopia policy set /var/www --add-ignore=node_modules --add-ignore='*.log' --add-ignore=cache/
Revisa la política efectiva de un directorio:
kopia policy show /var/www
La salida muestra cada ajuste y de qué política lo hereda (inherited from (global) o defined for this target).
Paso 4: Crear el primer snapshot
Crea snapshots de los directorios que quieres proteger. En este ejemplo, la configuración del sistema y el contenido web:
kopia snapshot create /etc /var/www
Snapshotting root@servidor1:/etc ...
Created snapshot with root k8a1f... and ID 1c2d3e... in 2s
Snapshotting root@servidor1:/var/www ...
Created snapshot with root k5b7c... and ID 4f5a6b... in 11s
El primer snapshot sube todos los datos. Los siguientes solo suben los bloques que han cambiado. Lista los snapshots existentes:
kopia snapshot list
root@servidor1:/etc
2026-09-25 10:21:04 UTC k8a1f... 2.1 MB drwxr-xr-x files:1532 dirs:215 (latest-1,daily-1,weekly-1,monthly-1,annual-1)
root@servidor1:/var/www
2026-09-25 10:21:07 UTC k5b7c... 83.4 MB drwxr-xr-x files:1523 dirs:188 (latest-1,daily-1,weekly-1,monthly-1,annual-1)
Entre paréntesis aparecen las reglas de retención por las que se conserva cada snapshot.
Paso 5: Programar snapshots diarios con systemd
kopia snapshot create --all crea un snapshot nuevo de todos los directorios que ya tienen al menos uno, así que no hace falta repetir la lista de rutas en el servicio. Crea la unidad:
nano /etc/systemd/system/kopia-backup.service
[Unit]
Description=Kopia snapshot of all known sources
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/kopia snapshot create --all --no-progress
Nice=10
IOSchedulingClass=idle
Crea el temporizador para ejecutarlo cada noche a las 03:00:
nano /etc/systemd/system/kopia-backup.timer
[Unit]
Description=Nightly Kopia snapshot
[Timer]
OnCalendar=*-*-* 03:00:00
RandomizedDelaySec=15m
Persistent=true
[Install]
WantedBy=timers.target
Persistent=true lanza la copia al arrancar si el servidor estaba apagado a la hora programada. Recarga systemd, prueba el servicio a mano y activa el temporizador:
systemctl daemon-reload
systemctl start kopia-backup.service
journalctl -u kopia-backup.service -n 20 --no-pager
systemctl enable --now kopia-backup.timer
Comprueba la próxima ejecución:
systemctl list-timers kopia-backup.timer
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2026-09-26 03:04:51 UTC 16h left Thu 2026-09-25 10:30:12 UTC 2s ago kopia-backup.timer kopia-backup.service
El mantenimiento del repositorio (compactar índices y liberar espacio de datos que ya no usa ningún snapshot) se ejecuta automáticamente desde el usuario que creó el repositorio. Puedes ver cuándo se ejecutó por última vez con:
kopia maintenance info
Paso 6: Verificar y restaurar
Comprueba que los datos del repositorio se pueden leer. Esta orden verifica los metadatos de todos los snapshots y descarga y descifra un 5 % de los archivos elegidos al azar:
kopia snapshot verify --verify-files-percent=5
Para restaurar, localiza primero el ID del snapshot con kopia snapshot list /var/www. Restaura un snapshot completo en un directorio temporal, sin tocar los datos originales:
kopia restore k5b7c... /root/restore-www
Para recuperar un único archivo, añade la ruta dentro del snapshot:
kopia restore k5b7c.../html/index.php /root/index.php
Sustituye k5b7c... por el ID completo del snapshot. También puedes montar un snapshot como sistema de archivos de solo lectura para explorarlo. El comando se queda en primer plano hasta que pulses Ctrl+C:
mkdir -p /mnt/kopia
kopia mount k5b7c... /mnt/kopia
Desde otra terminal podrás navegar por /mnt/kopia con las herramientas habituales.
Solución de problemas
invalid repository password. La contraseña no coincide con la que usaste al crear el repositorio. Vuelve a conectar con kopia repository connect s3 --bucket=your-bucket --prefix=servidor1/ ... e introduce la correcta.
El servicio de systemd pide contraseña o falla con repository not connected. El servicio se ejecuta como root y usa /root/.config/kopia/repository.config. Si conectaste el repositorio con otro usuario, repite el kopia repository connect como root.
Un archivo no aparece en el snapshot. Revisa las exclusiones con kopia policy show /ruta. Para quitar una, usa kopia policy set /ruta --remove-ignore='patrón'.
El repositorio crece aunque borres snapshots. El espacio se libera en el siguiente mantenimiento completo, que por defecto se ejecuta cada 24 horas. Consulta el estado con kopia maintenance info.
Conclusión
Tienes Kopia instalado desde su repositorio oficial, con un repositorio cifrado en S3, compresión, exclusiones, una política de retención y snapshots diarios programados con systemd. Como siguientes pasos, añade nuevas rutas con un primer kopia snapshot create para que el temporizador las incluya, conecta la aplicación de escritorio KopiaUI al mismo repositorio para restaurar con interfaz gráfica y haz una restauración completa en otro servidor de vez en cuando para validar el proceso.
