Lo script in la sezione chiamata «Script shell» consente solamente sette archivi differenti. Per un server i cui dati non cambiano molto spesso questo può essere sufficiente, ma se il server dispone di grossi quantitativi di dati è necessario avere uno schema di rotazione degli archivi più efficiente.
In questa sezione lo script verrà modificato per implementare uno schema di rotazione del tipo progenitore-genitore-figlio (mensile-settimanale-giornaliero).
La rotazione eseguirà un backup giornaliero dalla domenica al venerdì.
Il sabato, viene eseguito un backup settimanale consentendo di avere così quattro backup settimanali al mese.
Il backup mensile è eseguito il primo giorno del mese, ruotando due backup mensili se il mese è pari o dispari.
Questo è il nuovo script:
#!/bin/bash #################################### # # Backup to NFS mount script with # grandfather-father-son rotation. # #################################### # Di cosa fare il backup. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Dove fare il backup. dest="/mnt/backup" # Variabili per il nome del file dell'archivio day=$(date +%A) hostname=$(hostname -s) # Trovare quale settimana del mese è (1-4). day_num=$(date +%d) if (( $day_num <= 7 )); then week_file="$hostname-week1.tgz" elif (( $day_num > 7 && $day_num <= 14 )); then week_file="$hostname-week2.tgz" elif (( $day_num > 14 && $day_num <= 21 )); then week_file="$hostname-week3.tgz" elif (( $day_num > 21 && $day_num < 32 )); then week_file="$hostname-week4.tgz" fi # Trovare se il mese è pari o dispari. month_num=$(date +%m) month=$(expr $month_num % 2) if [ $month -eq 0 ]; then month_file="$hostname-month2.tgz" else month_file="$hostname-month1.tgz" fi # Creare il file dell'archivio. if [ $day_num == 1 ]; then archive_file=$month_file elif [ $day != "Saturday" ]; then archive_file="$hostname-$day.tgz" else archive_file=$week_file fi # Stampa messaggio di inizio backup. echo "Esecuzione del backup di $backup_files in $dest/$archive_file" date echo # Creazione del backup con tar. tar czf $dest/$archive_file $backup_files # Stampa messaggio finale. echo echo "Backup completato" date # Elenco dei file in $dest per controllarne la dimensione. ls -lh $dest/
Lo script può essere eseguito attraverso gli stessi metodi descritti in la sezione chiamata «Eseguire lo script».
È buona pratica conservare i dispositivi contenenti backup in un posto sicuro, in caso di disastri. Nello script di esempio, il dispositivo di backup consiste di un server con una condivisione NFS. Portare il server NFS in un'altra locazione non è praticabile, ma in base alla velocità di connessione potrebbe essere utile copiare i file attraverso un collegamento WAN verso un server in un'altra posizione.
Un'altra opzione potrebbe essere il copiare l'archivio in un disco esterno che può essere portato in altre luoghi. Dato che i prezzi dei dischi esterni è in continuo calo, potrebbe essere fattibile usare due dischi per ogni livello di archivio, consentendo così di avere un disco esterno collegato al server di backup e un altro in un'altra locazione.
Invece di usare una condivisione NFS, è possibile utilizzare un dispositivo a nastro collegato al server. Un dispositivo di questo tipo semplifica la rotazione degli archivi e il portare il dispositivo stesso in un'altra locazione.
Quando viene usato un dispositivo a nastro, la parte relativa al nome del file non è necessaria in quanto la data è inviata direttamente al dispositivo, ma sono necessari alcuni comandi per manipolare il nastro. In particolare mt, un'utilità di controllo nastri magnetici parte del pacchetto cpio.
Questo è lo script modificato per l'uso di un dispositivo a nastro:
#!/bin/bash #################################### # # Backup to tape drive script. # #################################### # Di cosa fare il backup. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Dove fare il backup. dest="/dev/st0" # Stampa messaggi di inizio. echo "Backu di $backup_files in $dest" date echo # Assicurarsi che il nastro sia riavvolto del tutto. mt -f $dest rewind # Backup dei file con tar. tar czf $dest $backup_files # Riavvolgere ed espellere il nastro. mt -f $dest rewoffl # Stampa messaggio finale. echo echo "Backup completato" date
![]() |
|
Il nome del device predefinito per un dispositivo a nastro SCSI è |
Ripristinare i dati da un dispositivo a nastro funziona allo stesso modo di ripristinare da un file. Riavvolgere il nastro e usare il percorso del dispositivo al posto del percorso al file. Per esempio, per ripristinare il file /etc/hosts
in /tmp/etc/hosts
:
mt -f /dev/st0 rewind tar -xzf /dev/st0 -C /tmp etc/hosts