BTRFS: effettuare automaticamente snapshot e backup remoti

BTRFS

Utilizzo con soddisfazione BTRFS (ne ho parlato nel 2014 e, più recentemente, nel blog IT-Notes). Non lo considero ottimale per tutti i tipi di carico, ma risolve molti problemi in moltissime situazioni. Una delle cose che utilizzo con più soddisfazione è la funzione di generazione dinamica di snapshot, che garantisce la possibilità di avere una copia perfetta e immediata di uno specifico volume (o subvolume). Quando è necessario un backup, ad esempio, l'utilizzo delle snapshot è fondamentale e averle a livello di file system è senza dubbio un buon ausilio.

Quando si tratta di volumi BTRFS, però, abbiamo ulteriori opzioni. Ci sono strumenti nativi che sono in grado di inviare e ricevere dati da e verso volumi BTRFS in maniera ottimizzata, sfruttando le caratteristiche intrinseche del file system stesso. Ecco dunque un metodo per fare automaticamente delle snapshot e trasferirle, in maniera ottimale, su un altro volume BTRFS (locale o remoto).

Da un po' di tempo mi avvalgo di due script interessanti. In passato ho utilizzato snapper ma non l'ho trovato ottimale per il mio utilizzo. Ho dunque continuato ad effettuare ricerche e trovato delle valide alternative, ovvero l'accoppiata di btrfs-snp e btrfs-sync

btrfs-snp

btrfs-snp permette di essere lanciato con un path, un prefisso legato alla snapshot effettuata, il numero massimo di snapshot con quel prefisso da tenere e un tempo minimo tra una snapshot e l'altra.

Ad esempio:

root@foobar:~# /usr/local/sbin/btrfs-snp / hourly  10 3600

Effettuerà una snapshot di /, mettendo come prefisso il termine hourly (ma può essere qualsiasi prefisso), ne terrà massimo 10 e non ne effettuerà altri (ovvero il programma uscirà senza fare azioni) a meno di 3600 secondi dal precedente.

Si possono ovviamente combinare in questo modo, per avere più snapshot di tipo diverso:

/usr/local/sbin/btrfs-snp / hourly  10 3600
/usr/local/sbin/btrfs-snp / daily    3 86400
/usr/local/sbin/btrfs-snp / weekly   1 604800

Può essere lanciato da un cron ogni ora (o ogni quarto d'ora, tanto non effettuerà snapshot a meno di 3600 secondi dal precedente).

btrfs-sync

A questo punto, possiamo copiare su altro file system (locale o remoto) tutte le snapshot grazie a btrfs-sync.

Il comando può essere di questo tipo:

root@foobar:~# /usr/local/sbin/btrfs-sync -d -v /.snapshots btrfs@host:/backups/host01/

Ovviamente il file system di destinazione deve essere un volume BTRFS.

Di solito lancio il comando attraverso uno script nel cron.daily, per avere una copia giornaliera delle snapshot fuori.

Questo tipo di setup mi ha già tolto dai guai più volte e sembra essere efficiente.

Commenti