## Rotazione degli archivi

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.

### Rotazione degli archivi NFS

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.

### Dispositivi a nastro

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 è `/dev/st0`, utilizzare il percorso al device appropriato per il proprio sistema.

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

Script shell |  | Bacula