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?