Vai al contenuto

Restic e quota ZFS

Il problema

Un repository Restic su un dataset ZFS con quota si riempie in poche settimane, anche se i dati salvati cambiano poco.

Le due cause

Dump compressi. Un dump di database passato in gzip cambia quasi per intero a ogni esecuzione, anche se i dati sono gli stessi. Restic deduplica a blocchi: su un file compresso non trova blocchi uguali e ricarica tutto ogni notte.

forget senza prune. restic forget toglie gli snapshot dall'elenco ma non libera spazio. Lo spazio torna solo con prune.

La correzione

  • Salvare i dump non compressi: Restic comprime e deduplica da solo.
  • Usare forget --prune con la politica di conservazione:
pg_dump -U utente database > staging/database.sql
restic forget --prune --keep-daily 7 --keep-weekly 5 --keep-monthly 6

Il dump non compresso occupa più spazio sul disco di partenza: va previsto.

Se la quota è già piena

prune ha bisogno di spazio per lavorare, e su un dataset pieno fallisce.

  1. Alzare la quota temporaneamente: zfs set quota=300G pool/backup.
  2. restic prune.
  3. restic check.
  4. Eliminare gli snapshot ZFS del dataset. Gli snapshot trattengono i blocchi appena liberati e contano nella quota: senza questo passo lo spazio non scende.
  5. Riportare la quota al valore di prima.

Come accorgersene prima

Guardare la dimensione aggiunta da ogni snapshot (restic stats --mode raw-data): se cresce ogni notte di una quantità simile alla dimensione di un dump, la causa è la prima.