Allora, un sistema di backup che si rispetti deve avere due caratteristiche:
- essere totalmente automatico (se dipendesse dalla nostra attenzione o dalla nostra solerzia, o ce ne mettiamo a livelli maniacali, o stiamo freschi...!);
- consentire un recupero dei files semplice, veloce e anche limitato ad alcuni file (non per forza tutti). In questo senso io non amo la creazione di iso o simili.
Premesse
- È cosa consigliata avere una partizione di /home separata da quella di root. Tra le altre cose questo ci consente di fare una pulizia del sistema operativo in modo sufficientemente veloce, quando ne abbiamo necessità. Infatti potremo semplicemente reinstallare il sistema operativo, montando la partizione di /home senza riformattarla.
- Per un buon backup è necessario avere un disco fisso (interno o esterno) separato da quello in cui normalmente teniamo i dati! In caso di rottura dello stesso, altrimenti, Addio a tutto!
- Il disco di destinazione deve essere formattato in ext3 (almeno).
- Il programma utilizzato è rsnapshot, un tool che utilizza l'ottimo rsync. La caratteristica principale di questo programma è quella di effettuare degli snapshot alla frequenza desiderata (quotidiana, settimanale o mensile). Ogni volta che viene effettuata questa operazione, non viene cancellato il backup precedente, nè viene aggiornato. Semplicemente si creerà una nuova cartella con all'interno tutti i file del vecchio backup e tutti i nuovi file, mantenendo anche la cartella con il vecchio backup (fino ad un massimale configurabile secondo le esigenze dell'utente). Ciò non causa, ovviamente, una duplicazione dello spazio su disco utilizzato!

1) Installiamo e configuriamo rsnapshot
Tutta la difficoltà sta nel dare
- Codice: Seleziona tutto
pacman -S rsnapshot
Il file di configurazione è /etc/rsnapshot.conf. Rimando alla lettura del file, sottolineando semplicemente i passaggi necessari da configurare. Attenzione: il file è spaziato con TAB!!!
Settare la cartella di destinazione:
- Codice: Seleziona tutto
# Tutti gli snapshot vengono salvati in questa cartella.
snapshot_root /media/directory_di_backup/
# Se no_create_root è settato a 1, rsnapshot non creerà
# automaticamente la cartella snapshot_root. Ciò è particolarmente
# utile per fare backup su supporti rimovibili, come hard disk USB o
# FireWire.
no_create_root 1
Impostare gli intervalli di backup:
- Codice: Seleziona tutto
# I nomi degli intervalli (weekly = settimanale, monthly = mensile, ...)
# sono solo nomi e non hanno nessun effetto sulla reale lunghezza
# dell'intervallo. I numeri impostano il numero di snapshot da
# conservare per ogni intervallo (weekly.0, weekly.1, ...).
# La lunghezza dell'intervallo viene impostato dall'intervallo temporale
# tra due esecuzioni di rsnapshot <nome intervallo>, generalmente
# tramite cron. Sentitevi liberi di adattare i nomi degli intervalli, e di
# conseguenza il file /etc/cron.d/rsnapshot secondo le vostre
# esigenze. L'unica vincolo è che gli intervalli devono essere elencati
# in ordine ascendente.
#interval hourly 10
interval daily 7
interval weekly 3
#interval monthly 36
Io conservo in questo caso 7 backup giornalieri successivi e 3 settimanali. Ecco cosa succede:
- Codice: Seleziona tutto
Ninquitassar @ ~ >>> ls -l /media/STEELHDD_LINUX
drwxr-xr-x 3 root root 4096 27 feb 14.08 daily.0
drwxr-xr-x 3 root root 4096 26 feb 10.12 daily.1
drwxr-xr-x 3 root root 4096 24 feb 14.31 daily.2
drwxr-xr-x 3 root root 4096 23 feb 09.15 daily.3
drwxr-xr-x 3 root root 4096 22 feb 14.05 daily.4
drwxr-xr-x 3 root root 4096 20 feb 14.05 daily.5
drwxr-xr-x 3 root root 4096 19 feb 10.25 daily.6
drwx------ 2 root root 16384 17 set 00.02 lost+found
drwxr-xr-x 3 root root 4096 13 feb 14.04 weekly.0
drwxr-xr-x 3 root root 4096 28 gen 09.05 weekly.1
drwxr-xr-x 3 root root 4096 23 gen 09.05 weekly.2
Ad ogni ciclo di backup, ad esempio, giornaliero, viene rimosso daily.6 e viene generato un nuovo daily.0.
Specificare che directory salvare: io consiglio /etc (per le configurazioni), /home, /opt (se avete files che vi servono), /root, /usr/share (per i font, i temi, ecc...).
- Codice: Seleziona tutto
# LOCALHOST
backup /home/username/ local/
backup /etc/ local/
backup /opt/ local/
backup /usr/share/ local/
backup /root/ local/
Per il resto rimando al file stesso. È ottimamente commentato. Per vedere il mio file /etc/rsnapshot.conf
2) Pianificare i backup
Ora abbiamo l'esigenza che il backup sia automatico. Per far questo ho adattato un interessante script dell'ottimo blog di Saverio Bolognani alle mie esigenze. Lo script va poi fatto eseguire a crond ogni ora (poi spiegherò come).
- Codice: Seleziona tutto
#! /bin/bash
# Basato su http://www.dei.unipd.it/~sbologna/backupinlinux3.html e modificato da Daniele Pressi (ninquitassar@gmail.com
# Esegue il backup quotidiano ogni volta che un giorno e` passato senza backup.
# Ogni settimana esegue anche il backup settimanale.
# definisce dove mettere il log file
log=/home/ninquitassar/.backup.log
data_oggi=`date "+%Y%m%d"`
timestamp_quotidiano=/home/NOMEUTENTE/.backup_timestamp_quotidiano
data_ultimo_backup_quotidiano=`stat --format=%y $timestamp_quotidiano | tr -d - | awk '{print $1}'`
timestamp_settimanale=/home/NOMEUTENTE/.backup_timestamp_settimanale
data_ultimo_backup_settimanale=`stat --format=%y $timestamp_settimanale | tr -d - | awk '{print $1}'`
date >> $log
if (( $data_oggi <= $data_ultimo_backup_quotidiano )); then
exit 0;
fi
echo " 1 giorno è passato: inizio il backup..." >> $log
if (( $data_oggi - $data_ultimo_backup_settimanale >= 7 )); then
echo " 7 giorni sono passati: inizio il backup..." >> $log
/usr/bin/rsnapshot weekly && touch $timestamp_settimanale && echo " SETTIMANALE ok!" >> $log
fi
rm /home/NOMEUTENTE/.pkglist.lst && rm /home/NOMEUTENTE/.pkglist_AUR.lst && pacman -Qqe | grep -vx "$(pacman -Qqm)" > /home/NOMEUTENTE/.pkglist.lst && pacman -Qqm > /home/NOMEUTENTE/.pkglist_AUR.lst && /usr/bin/rsnapshot daily && touch $timestamp_quotidiano && echo " QUOTIDIANO ok!" >> $log
- Salviamo in un file come ~/.scripts/rsnapshot
- Rendiamolo eseguibile con # chmod +x /home/NOMEUTENTE/.scripts/rsnapshot
- Creiamo i filetimestamp e il file di log: saranno i file da cui il nostro script determinerà quanto tempo è passato dall'ultimo backup.
- Codice: Seleziona tutto
$ touch ~/.backup_timestamp_quotidiano
$ touch ~/.backup_timestamp_settimanale
$ touch ~/.backup.log
- Cosa fa lo script? Semplicemente stampa la data sul file di log (~/.backup.log), calcola il tempo passato dall'ultimo backup quotidiano e dall'ultimo settimanale. Se è passato meno di un giorno, non fa nulla. Se è passato un giorno dà rsnapshot daily e al termine stampa l'avvenuto backup nel file di log e rinnova la data del timestamp. Se è passata anche una settimana, dà rsnapshot weekly, stampa l'avvenuto backup nel log e rinnova la data del timestamp (più difficile a dirsi che a farsi). Questo ha l'indubbio vantaggio, ad esempio, che, qualora il mio hard disk esterno sia scollegato al momento dell'esecuzione dello script, sarà rieseguito fino a che non troverà il nostro hard disk collegato. Il file crea anche due file (~/.pkglist.lst e ~/.pkglist_AUR.lst) con le liste dei pacchetti dai repo e da AUR (il che ci è decisamente utile in fase di ripristino).
3) Automatizziamo il tutto
Ora faremo eseguire a crond lo script da superuser ogni ora. Ognuno pianifichi come preferisce. Io ho creato un file /etc/cron.d/rsnapshot con la riga:
- Codice: Seleziona tutto
3 * * * * root /usr/bin/nice /home/USERNAME/.scripts/rsnapshot
In pratica il terzo minuto di ogni ora root esegue lo script. Ovviamente ciò prevede che:
- Se si utilizza initscripts il demone crond sia inserito nella lista dei demoni di /etc/rc.conf
- Se si utilizza systemd il servizio cronie.service sia attivato
4) Per il ripristino
Per il ripristino del sistema (una volta installato il sistema operativo nuovo), basta montare l'hard disk di backup (wiki o google bastano e avanzano, non mi dilungo).
[si userà qui cp -a, che è ricorsivo di default e che mantiene i proprietari inalterati]
- Probabilmente vorremo velocizzare la reinstallazione dei pacchetti con i mirror già configurati nel vecchio sistema:
- Codice: Seleziona tutto
# cp -a /mnt/HARDDISKBACKUP/daily.0/local/etc/pacman.d/mirrorlist /etc/pacman.d/- Salvare alcuni file del nuovo sistema operativo, che potrebbero crearci problemi:
- Codice: Seleziona tutto
# cp -a /etc/{fstab,pacman.conf,pacman.d,makepkg.conf} /mnt/HARDDISKBACKUP/new_files/
- Reinstallare i pacchetti
- Codice: Seleziona tutto
# cat /mnt/HARDDISKBACKUP/daily.0/local/home/NOMEUTENTE/.pkglist.lst | xargs pacman -S --noconfirm --needed
- Copiare i file di configurazione e quant'altro:
- Codice: Seleziona tutto
# cp -a /mnt/HARDDISKBACKUP/daily.0/local/home / (solo se è stata formattata anche la home, ovviamente)
# cp -a /mnt/HARDDISKBACKUP/daily.0/local/etc /
# cp -a /mnt/HARDDISKBACKUP/daily.0/local/usr/share /usr/
# cp -a /mnt/HARDDISKBACKUP/daily.0/local/opt /
# cp -a /mnt/HARDDISKBACKUP/daily.0/local/root /
# cp -a /mnt/HARDDISKBACKUP/new_files/* /etc/ (i nuovi file che avevamo salvato)
Quindi riavviare il sistema.
Spero possa giovare!
----------------------------------------------------------------
Fonti:
http://www.dei.unipd.it/~sbologna/backupinlinux3.html