Cuando comencé a usar restic no conocía lo suficiente sobre el parámetro tag y lo importante que se vuelve cuando utilizas políticas de retención de tus copias de seguridad.
Empecó a trabajar con varios dispositivos sobre un mismo repositorio, y para rotar las instantáneas lo hacía en función a la etiqueta Host que se aplica a cada dispositivo, en función a su hostbane, así por ejemplo, a mi portátil se le aplica la etiquete Hosts asus
restic -r sftp:[email protected]:/mnt/backup/restic-repo snapshots
enter password for repository:
repository 7de6b43c opened successfully, password is correct
ID Time Host Tags Paths
-------------------------------------------------------------------------------------
9863a3d6 2019-11-11 00:31:53 asus /etc/fstab
/home/carlos
-------------------------------------------------------------------------------------
Cada hora ejecuto restic mediante systemd para hacer una instantánea del estado de ciertas carpetas del ordenador portátil
restic -r sftp:[email protected]:/mnt/backup/restic-repo backup --verbose --files-from files_to_backup.txt --exclude-file restic_exclude.txt
Y utilizaba la etiqueta Host para rotar las copias, y dejar solo las dos últimas horas
restic forget --verbose --host asus --group-by "paths,tags,host" --keep-hourly 2
Trabajando con tags
El problema aparece si yo quiero realizar varias instantáneas del portátil, por ejemplo, una instantánea para los archivos personales y otra instantánea para los del trabajo, de la instantánea del trabajo quiero mantener 10 copias díarias y de la personal solo las dos últimas horas, si utilizo la etiqueta hosts para rotar las instantáneas, no diferencia que instantánea debe de borrar, ya que las dos pertenecen al mismo host.
La solución pasa por aplicar etiquetas, tags, para la instantánea con los ficheros personales
restic -r sftp:[email protected]:/mnt/backup/restic-repo backup --tag personal --verbose --files-from files_to_backup.txt --exclude-file restic_exclude.txt
Y para la del trabajo
restic -r sftp:[email protected]:/mnt/backup/restic-repo backup --tag trabajo --verbose --files-from files_to_backup.txt --exclude-file restic_exclude.txt
Para mantener las dos últimas horas de la instantánea personal
ExecStartPost=restic forget --verbose --host asus --tag personal --group-by "paths,tags,host" --keep-daily 2
Y para la del trabajo
ExecStartPost=restic forget --verbose --host asus --tag trabajo --group-by "paths,tags,host" --keep-daily 10
Manipulando tags
Una vez vista su utilidad, vamos a ver como manipular las etiquetas, puedes obtener la ayuda sobre tags
restic tag --help
En el ejemplo vemos que tenemos una instantánea con ID 9f1a0de0 y con las etiquetas systemd.timer y rock64pro
restic -r rclone:gdrive_md:/Backups snapshots --password-file ~/bin/.restic
repository 43391152 opened successfully, password is correct
ID Time Host Tags Paths
------------------------------------------------------------------------------------------------
9f1a0de0 2019-11-12 11:35:18 rock64pro systemd.timer,rock64pro /mnt/datos/Docker
/mnt/datos/Media
/home/carlos/.config/rclone
/home/carlos/.config/systemd
/home/carlos
/mnt/Datos
------------------------------------------------------------------------------------------------
1 snapshots
Eliminar
Vamos a eliminar la etiqueta rock64pro, para ello utilizamos el comando tag --remove etiqueta ID
restic -r rclone:gdrive_md:/Backups tag --remove rock64pro 9f1a0de0 -p ~/bin/.restic
repository 43391152 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
El resultado
restic -r rclone:gdrive_md:/Backups snapshots --password-file ~/bin/.restic
repository 43391152 opened successfully, password is correct
ID Time Host Tags Paths
--------------------------------------------------------------------------------------
6e7312ba 2019-11-12 11:35:18 rockpro64 systemd.timer /mnt/datos/Docker
/mnt/datos/Media
/home/carlos/.config/rclone
/home/carlos/.config/systemd
/home/carlos
/mnt/Datos
--------------------------------------------------------------------------------------
1 snapshots
Añadir
Para añadir una nueva etiqueta utilizamos el comando tag --add etiqueta ID
restic -r rclone:gdrive_md:/Backups tag --add prueba1 6e7312ba --password-file ~/bin/.restic
repository 43391152 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
restic -r rclone:gdrive_md:/Backups snapshots --password-file ~/bin/.restic
repository 43391152 opened successfully, password is correct
ID Time Host Tags Paths
----------------------------------------------------------------------------------------------
7afaffef 2019-11-12 11:35:18 rockpro64 systemd.timer,prueba1 /mnt/datos/Docker
/mnt/datos/Media
/home/carlos/.config/rclone
/home/carlos/.config/systemd
/home/carlos
/mnt/Datos
----------------------------------------------------------------------------------------------
1 snapshots
Sustituir
Podemos sustituir el valor de una o varias etiquetas con tag --set etiqueta ID
restic -r rclone:gdrive_md:/Backups tag --set prueba2 --set prueba3 8ffba754 --password-file ~/bin/.restic
repository 43391152 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
restic -r rclone:gdrive_md:/Backups snapshots --password-file ~/bin/.restic
repository 43391152 opened successfully, password is correct
ID Time Host Tags Paths
----------------------------------------------------------------------------------------
ba00b2a4 2019-11-12 11:35:18 rockpro64 prueba2,prueba3 /mnt/datos/Docker
/mnt/datos/Media
/home/carlos/.config/rclone
/home/carlos/.config/systemd
/home/carlos
/mnt/Datos
----------------------------------------------------------------------------------------
1 snapshots
Resumen
En resumen, agregar etiquetas nos permite agrupar varias copias de seguridad, facilitando el trabajo para rotar, borrar o buscar instantáneas.
Espero que te haya gustado, pasa un buen día; 🐧