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. # #################################### # What to backup. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Where to backup to. dest="/mnt/backup" # Setup variables for the archive filename. day=$(date +%A) hostname=$(hostname -s) # Find which week of the month 1-4 it is. 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 # Find if the Month is odd or even. 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 # Create archive filename. if [ $day_num == 1 ]; then archive_file=$month_file elif [ $day != "Saturday" ]; then archive_file="$hostname-$day.tgz" else archive_file=$week_file fi # Print start status message. echo "Backing up $backup_files to $dest/$archive_file" date echo # Backup the files using tar. tar czf $dest/$archive_file $backup_files # Print end status message. echo echo "Backup finished" date # Long listing of files in $dest to check file sizes. ls -lh $dest/
Lo script può essere eseguito attraverso gli stessi metodi descritti in la sezione chiamata «Eseguire lo script».
È utile, nel caso si verifichino disastri, che il dispositivo di backup sia in una località diversa. Nello script di esempio l'unità di backup è un server che fornisce una condivisione NFS: spostare questo server in un'altra località potrebbe non essere fattibile. In base alla velocità di connessione, potrebbe essere utile considerare di copiare il backup attraverso un collegamento WAn su un server remoto.
Un'altra opzione consiste nel copiare l'archivio su di un disco esterno che può essere spostato. Poiché il prezzo dei dischi portatili esterni è sempre in diminuzione, l'utilizzo di due dischi per ogni livello dell'archivio può risultare altamente vantaggioso: in questo modo è possibile avere un disco esterno collegato al server di backup e un altro in un altra località.
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. # #################################### # What to backup. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Where to backup to. dest="/dev/st0" # Print start status message. echo "Backing up $backup_files to $dest" date echo # Make sure the tape is rewound. mt -f $dest rewind # Backup the files using tar. tar czf $dest $backup_files # Rewind and eject the tape. mt -f $dest rewoffl # Print end status message. echo echo "Backup finished" 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