Instalación y Configuración de Kopia Backup

Kopia es una herramienta de backup moderna y rápida que combina deduplicación, compresión y cifrado AES-256-GCM con soporte para múltiples backends de almacenamiento y una interfaz gráfica opcional. Su diseño orientado a snapshots con políticas de retención flexibles y soporte para backends S3, Backblaze B2, SFTP y almacenamiento local lo convierten en una alternativa completa a Restic y Borg para entornos Linux de producción. Esta guía cubre la instalación, configuración de repositorios y automatización de backups.

Requisitos Previos

  • Linux (Ubuntu/Debian o CentOS/Rocky)
  • Acceso root o sudo
  • Cuenta en proveedor de almacenamiento (S3, B2, etc.)
  • 512 MB RAM mínimo

Instalación de Kopia

# Ubuntu/Debian - Repositorio oficial
curl -s https://kopia.io/signing-key | \
    sudo gpg --dearmor -o /etc/apt/keyrings/kopia-keyring.gpg

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

sudo apt-get update
sudo apt-get install -y kopia

# CentOS/Rocky Linux
sudo rpm --import https://kopia.io/signing-key
sudo curl -o /etc/yum.repos.d/kopia.repo \
    https://packages.kopia.io/rpm/stable/kopia.repo
sudo dnf install -y kopia

# O descarga directa del binario
KOPIA_VERSION="0.16.1"
curl -LO "https://github.com/kopia/kopia/releases/download/v${KOPIA_VERSION}/kopia-${KOPIA_VERSION}-linux-x64.tar.gz"
tar xzf kopia-${KOPIA_VERSION}-linux-x64.tar.gz
sudo install -m 0755 kopia-${KOPIA_VERSION}-linux-x64/kopia /usr/local/bin/

# Verificar la instalación
kopia --version

Configuración del Repositorio

Repositorio en Backblaze B2

# Conectar a un repositorio B2 (crear si no existe)
kopia repository create b2 \
    --bucket=mi-bucket-kopia \
    --key-id=mi-b2-key-id \
    --key=mi-b2-application-key \
    --password=mi-clave-cifrado-repositorio

# Conectar a un repositorio B2 existente
kopia repository connect b2 \
    --bucket=mi-bucket-kopia \
    --key-id=mi-b2-key-id \
    --key=mi-b2-application-key \
    --password=mi-clave-cifrado-repositorio

# Verificar la conexión
kopia repository status

Repositorio en Amazon S3

# Crear repositorio en S3
kopia repository create s3 \
    --bucket=mi-bucket-kopia \
    --access-key=AKIAIOSFODNN7EXAMPLE \
    --secret-access-key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
    --region=us-east-1 \
    --password=mi-clave-cifrado

# S3 compatible (MinIO, Wasabi, etc.)
kopia repository create s3 \
    --bucket=mi-bucket \
    --endpoint=s3.wasabisys.com \
    --access-key=MI_KEY \
    --secret-access-key=MI_SECRET \
    --password=mi-clave-cifrado

Repositorio SFTP

# Crear repositorio en servidor remoto via SFTP
kopia repository create sftp \
    --path=/backups/kopia/mi-servidor \
    --host=backup.tudominio.com \
    --username=backup-user \
    --key-file=/root/.ssh/id_ed25519 \
    --password=mi-clave-cifrado

Repositorio local (para pruebas o NAS local)

# Crear repositorio en directorio local o NFS
mkdir -p /mnt/nas/kopia-repo

kopia repository create filesystem \
    --path=/mnt/nas/kopia-repo \
    --password=mi-clave-cifrado

# Verificar el repositorio
kopia repository info

Guardar credenciales de forma segura

# Kopia puede guardar la contraseña de forma persistente
# para automatización (cifrada en el keychain del sistema)
kopia repository connect b2 \
    --bucket=mi-bucket \
    --key-id=MI_KEY \
    --key=MI_SECRET \
    --password=mi-clave \
    --persist-credentials

# O usar variables de entorno para scripts
export KOPIA_PASSWORD=mi-clave-cifrado
kopia repository connect b2 --bucket=mi-bucket --key-id=KEY --key=SECRET

Políticas de Snapshots

Las políticas controlan qué se incluye, cuántas versiones se mantienen y cuándo hacer backup automático:

# Crear snapshot manual del directorio /var/www
kopia snapshot create /var/www

# Crear snapshot con etiqueta
kopia snapshot create /var/www --description "Pre-despliegue v2.1.0"

# Listar todos los snapshots
kopia snapshot list

# Listar snapshots de un directorio específico
kopia snapshot list /var/www

# Ver detalles de un snapshot
kopia snapshot show SNAPSHOT_ID

# Verificar la integridad de un snapshot
kopia snapshot verify SNAPSHOT_ID

Configurar política de retención

# Política global (aplica a todos los directorios por defecto)
kopia policy set --global \
    --keep-latest 10 \
    --keep-hourly 24 \
    --keep-daily 30 \
    --keep-weekly 26 \
    --keep-monthly 12 \
    --keep-annual 3

# Política para un directorio específico (sobrescribe la global)
kopia policy set /var/www \
    --keep-latest 5 \
    --keep-hourly 0 \
    --keep-daily 14 \
    --keep-weekly 8 \
    --keep-monthly 12 \
    --keep-annual 2

# Política con exclusiones
kopia policy set /home \
    --add-ignore ".cache" \
    --add-ignore "node_modules" \
    --add-ignore "*.pyc" \
    --add-ignore ".git"

# Ver la política activa para un directorio
kopia policy show /var/www

# Ver todas las políticas configuradas
kopia policy list

Restaurar desde snapshot

# Listar contenido de un snapshot
kopia ls SNAPSHOT_ID/var/www

# Restaurar un archivo específico
kopia restore SNAPSHOT_ID/var/www/config.yml /tmp/config-restaurado.yml

# Restaurar un directorio completo
kopia restore SNAPSHOT_ID/var/www /tmp/restauracion-www/

# Restaurar en la ubicación original (sobrescribir)
kopia restore SNAPSHOT_ID/var/www /var/www --overwrite-files

# Montar un snapshot como sistema de archivos (solo lectura)
mkdir -p /mnt/kopia-mount
kopia mount SNAPSHOT_ID /mnt/kopia-mount &
# Acceder a los archivos
ls /mnt/kopia-mount/var/www/
# Desmontar cuando termines
kopia umount /mnt/kopia-mount

Compresión y Rendimiento

# Configurar el algoritmo de compresión
kopia policy set --global \
    --compression=zstd-medium

# Opciones de compresión disponibles:
# - none: sin compresión
# - pgzip, zlib-level-1..9: niveles de gzip
# - zstd-fastest, zstd-medium, zstd-best: ZSTD (recomendado)
# - s2-default, s2-better, s2-parallel-4: S2 (muy rápido)
# - lz4: muy rápido, baja compresión

# Para datos de texto/logs: zstd-medium es ideal
# Para datos mixtos: zstd-fastest o s2-default
# Para imágenes/videos: none (ya están comprimidos)

# Configurar tamaño de bloque de compresión
kopia policy set --global --compression=zstd-medium

# Ver estadísticas de compresión del repositorio
kopia repository status --json | jq '.stats.compression'

# Limitar el uso de CPU durante el backup
kopia snapshot create /var/www --parallel=2  # usar 2 hilos máximo

Caché local para mejor rendimiento

# Kopia mantiene una caché local para acelerar operaciones
# Ver la configuración actual de caché
kopia cache info

# Configurar tamaño de la caché
kopia cache set --content-cache-size-mb=2048  # 2 GB de caché de contenido
kopia cache set --metadata-cache-size-mb=512  # 512 MB de caché de metadatos

# Limpiar la caché (útil si hay problemas)
kopia cache clear

# Ver la ubicación de la caché
ls -la ~/.cache/kopia/ 2>/dev/null || ls -la /root/.cache/kopia/

KopiaUI: Interfaz Gráfica

Kopia tiene una interfaz web integrada para gestión visual:

# Iniciar el servidor web de Kopia
# (después de conectar a un repositorio)
kopia server start \
    --address=127.0.0.1:51515 \
    --server-username=admin \
    --server-password=AdminPassword123!

# O con certificado TLS
kopia server start \
    --address=0.0.0.0:51515 \
    --tls-generate-cert \
    --server-username=admin \
    --server-password=AdminPassword123!
# Crear servicio systemd para la interfaz web
cat > /etc/systemd/system/kopia-server.service << 'EOF'
[Unit]
Description=Kopia Backup Server
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/kopia server start \
    --address=127.0.0.1:51515 \
    --server-username=admin \
    --server-password=AdminPassword123!
Environment=KOPIA_PASSWORD=mi-clave-repositorio
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now kopia-server
# Proxy Nginx para acceso al servidor Kopia
server {
    listen 443 ssl;
    server_name kopia.tudominio.com;

    ssl_certificate /etc/letsencrypt/live/kopia.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kopia.tudominio.com/privkey.pem;

    location / {
        proxy_pass https://127.0.0.1:51515;
        proxy_ssl_verify off;
        proxy_set_header Host $host;
    }
}

Backups Programados con Systemd

# Crear un servicio de backup
cat > /etc/systemd/system/kopia-backup.service << 'EOF'
[Unit]
Description=Kopia Backup - Snapshot diario
After=network.target

[Service]
Type=oneshot
User=root
# Conectar al repositorio y crear snapshots
ExecStart=/usr/local/bin/kopia snapshot create \
    /etc \
    /home \
    /var/www \
    /opt
Environment=KOPIA_PASSWORD=mi-clave-repositorio
# Limpiar snapshots según la política después del backup
ExecStartPost=/usr/local/bin/kopia snapshot expire
# Verificar la integridad del repositorio (ocasionalmente)
StandardOutput=journal
StandardError=journal
EOF

# Crear el timer asociado
cat > /etc/systemd/system/kopia-backup.timer << 'EOF'
[Unit]
Description=Kopia Backup Timer - Diario a las 3 AM

[Timer]
OnCalendar=*-*-* 03:00:00
RandomizedDelaySec=300
Persistent=true
AccuracySec=1min

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable --now kopia-backup.timer

# Verificar el timer
systemctl list-timers kopia-backup.timer

Solución de Problemas

Error al conectar al repositorio

# Verificar la contraseña
kopia repository connect b2 \
    --bucket=mi-bucket \
    --key-id=KEY \
    --key=SECRET \
    --password=CLAVE

# Si la clave es incorrecta: "invalid repository password"
# Si el bucket no existe: crear el bucket primero en la consola del proveedor

# Ver información de conexión
kopia repository status

Backup muy lento

# Ver el progreso del snapshot
kopia snapshot create /var/www --progress

# Aumentar el paralelismo
kopia snapshot create /var/www --parallel=8

# Verificar si hay throttling del proveedor cloud
# Revisar los límites de la cuenta

Repositorio con errores

# Verificar la integridad completa del repositorio
kopia maintenance run --full

# Verificar snapshots específicos
kopia snapshot verify --all

# Reparar índices inconsistentes
kopia maintenance run --full --force

El snapshot no incluye todos los archivos

# Verificar las exclusiones configuradas en la política
kopia policy show /var/www

# Ver qué archivos excluye una política durante el backup
kopia snapshot estimate /var/www --json | jq '.excluded'

# Eliminar una exclusión específica
kopia policy set /var/www --remove-ignore "*.log"

Conclusión

Kopia combina la velocidad del diseño moderno con una experiencia de usuario superior gracias a su interfaz web integrada y su sistema de políticas declarativas. Su soporte para múltiples backends simultáneos, compresión adaptativa y verificación de integridad lo posiciona como la herramienta de backup más completa para Linux en 2024. La integración nativa con systemd timers y la facilidad de restauración selectiva mediante el montaje de snapshots hacen que gestionar backups de producción sea significativamente más sencillo que con herramientas más antiguas.