Fare backup con Git?

Esistono molti metodi per fare backup, ognuno con i suoi pro e contro. In passato ho trattato Flyback e Rsync questa volta è il turno di Git. Altri sistemi interessanti sono Rdiff-backup e la versione Fuse (Archfs) e il filesystem di OpenSolaris ZFS.

Git è un SCM (Source Control Manager) o VCS (Versioning Control System), in poche parole uno strumento per gestire le differenze tra file nel tempo. I file trattati sono solitamente codice sorgente, quindi testo, ma questo sistema funziona anche con file binari come foto, video, musica,.. e in modo intelligente.

Vediamo come utilizzarlo in questo contesto specifico: Backup incrementale locale e remoto su HD esterno.

Inizializzazione della cartella del Backup

Nella cartella che ci interessa monitorare i cambiamenti digitiamo:

$ git init
$ git add .
$ git commit -m "Inizializzazione"

Verrà creata una cartella ".git" con le configurazioni e tutti i file attualmente presenti saranno aggiunti all'archivio

Le modifiche

# Prima modifica di foto.jpg
$ git commit -am "Prima modifica"
# Seconda modifica
$ git commit -am "Seconda modifica"

Restore, ripristinare una versione precedente

Prima vediamo le versioni disponibili

$ git log foto.jpg
commit f2c8ed654eed785d5026de2eb432719f30af2309
Date:   Sun Feb 1 15:33:42 2009 +0100
    inizializzazione

Decidiamo di ripristinare la versione iniziale al primo commit.

$ git show f2c8ed654eed785d5026de2eb432719f30af2309
commit f2c8ed654eed785d5026de2eb432719f30af2309
    inizializzazione
diff --git a/foto.jpg b/foto.jpg
new file mode 100644
index 0000000..f2b77d5
Binary files /dev/null and b/foto.jpg differ

$ git show f2b77d5 > foto.dataorig.jpg

Con 2 comandi riusciamo a ripristinare il file a una qualsiasi versione di commit precedente.

Sincronizzazione con un dispositivo esterno

Git supporta cartelle locali, ssh,.. quindi dall'hardisk esterno /media/slim

$ git clone /media/dati/_backup/
$ cd _backup/

Inizialmente verrà copiato l'intero repository, ma in seguito saranno trasferite solo le differenze incrementali tra i 2 repository. Quindi se avete un file grande cambiato di poco, sarà solo trasferito il piccolo cambiamento (A differenza di Flyback che lo ritrasferisce tutto).
Inoltre, se rinominate un file, Git rileva che il checksum non è cambiato e "trasferisce" solo l'azione e non il file.

$ git pull

Mantiene sincronizzato il repository sul hd esterno.

Purtroppo non esiste ancora una buona GUI per gestire completamente Git e le revisioni, ma in futuro non si sa mai..

E voi che sistema usate per fare (e ripristinare) il backup?