Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save ecosdelfuturo/a8cc5987ea4fc50940a53d12bb6541fc to your computer and use it in GitHub Desktop.

Select an option

Save ecosdelfuturo/a8cc5987ea4fc50940a53d12bb6541fc to your computer and use it in GitHub Desktop.
Automatización de backups en una unidad interna cifrada en OpenSuse

Automatización de backups en una unidad interna cifrada en OpenSuse

Tenemos un segundo SSD interno en el equipo formateado con btrfs y cifrado con LUKS para guardar datos y queremos hacer un backup incremental del directorio home digamos todos los días. Para automatizar el proceso tenemos que :

  1. Montar automáticamente el SSD al inicio
  2. Programar el backup de /home minimizando los errores por cambios realizados en las aplicaciones activas.

Solución para el montado automático del SSD cifrado con LUKS

  1. Instalar cryptsetup sudo zypper in cryptsetup

  2. Crear un archivo con la clave de cifrado sudo dd if=/dev/urandom of=/root/luks-keyfile bs=4096 count=1 sudo chmod 600 /root/luks-keyfile Si la partición cifrada del SSD aparece como /dev/sdb1 sudo cryptsetup luksAddKey /dev/sdb1 /root/luks-keyfile Después de este último comando, nos saltará el promt para introducir la clave de cifrado.

  3. Editamos el archivo crypttab sudo nano /etc/crypttab y añadimos la línea ssd2 /dev/sdb1 /root/luks-keyfile luks ssd2 es el nombre arbitrario que queramos poner al dispositivo mapeado

  4. Configurar fstab para montar automáticamente el dispositivo Editamos el archivo fstab sudo nano /etc/fstab y añadimos al final la línea /dev/mapper/ssd2 /mnt/ssd2 btrfs defaults 0 2 siguiendo el formato de espacios de las líneas precedentes. Para ver la ruta de la partición a montar en /mnt/ssd2, puede utilizarse sudo fdisk -l

  5. IMPORTANTE. Para evitar que no arranque el sistema al no encontrar la carpeta indicada para montar el dispostivo, debemos crear una carpeta persistente Editamos el archivo sudo nano /etc/tmpfiles.d/ssd2 Y añadimos la línea d /mnt/ss2 0755 user user - donde user es el nombre del usuario. Con el comando sudo systemd-tmpfiles --create se creará la carpeta al inicio del sistema donde se monta el dispositivo

  6. Momento de reiniciar el sistema y ver que se descifra y monta el dispostivo en /mnt/ssd2. En caso de que no iniciase, entraríamos en modo rescate, editaríamos fstab y eliminamos o comentamos la última línea.

Solución para el backup incremental con Btrbk

Se pueden utilizar cualquiera de las aplicaciones de backup más conocidad, pero resulta interesante aprovechar las propiedades del sistema de btrfs para crear subvolúmenes y snapshots con Btrbk y no tener que preocuparse de todos los detalles.

  1. Instalar Btrbk sudo zypper in btrbk
  2. Como vamos a crear un backup de /home podemos crear una carpeta oculta para las snapshots /home/.snapshots y una carpeta en la unidad ssd2 para guardar los backups, en mi caso, /mnt/ssd2/HomeBackup
  3. Editamos el archivo de configuración sudo nano /etc/btrbk/btrbk.conf y utilizamos el siguiente ejemplo adaptándolo a nuestro caso
# snapshot directory on backed up partition 
snapshot_dir               .snapshots

# snapshot name format <name>.YYYYmmddTHHMM
timestamp_format           long

# zstd compression for backup transfer
stream_compress            zstd

# path to log
transaction_log            /var/log/btrbk.log

# stream buffer size
stream_buffer              256m

# the daily backup is the first one after midnight
preserve_hour_of_day       0

# Monday is the first day of week
preserve_day_of_week       monday

# preserve all temporary snapshots for at least one day
snapshot_preserve_min      1d

# preserve 14 latest daily, 8 weekly, 6 monthly, 1 annual snapshots
snapshot_preserve          14d 8w 6m 1y

# do not preserve temporary snapshots
target_preserve_min        no

# preserve 6 latest daily, 4 weekly, 6 monthly, 1 annual snapshots
target_preserve            6d 4w 6m 1y

# preserve all snapshot archive
archive_preserve_min       all

# home partition
volume /home/
  # backup at /mnt/ssd2/HomeBackup
  target /mnt/ssd2/HomeBackup
  # backup main partition
  subvolume .
    # partition name in snapshot home
    snapshot_name home
   
  1. Ejecutamos btrbk en modo simulación para comprobar que no haya errores. Esto no realiza ningún cambio real. sudo btrbk run -n

  2. Creamos nuestro primer backup sudo btrbk run que creará un snapshot que veremos con un nombre del tipo home.20250708T2115 tanto en /home/.snapshots como en /mnt/ssd2/HomeBackup

  3. Si todo ha ido bien, programamos su ejecución diaria (o con la temporalización más conveniente) con crontab sudo crontab -e añadiendo una línea análoga a la siguiente 15 21 * * * /usr/bin/btrbk run que ejecutaría btrbk todos los días a las 21:15

  4. En el caso de que queramos eliminar backups ya creados por error o para hacer limpieza, recordemos que se trata de un subvolumen. Podemos hacer un listado de subvolúmenes en la unidad de backups como sudo btrfs subvolume list /mnt/ssd2/ y borrar el que queramos como (por ej.) sudo btrfs subvolume delete /mnt/ssd2/HomeBackup/home.20250708T2115

    Referencias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment