Documentazione di Ubuntu → Ubuntu 10.04 → Guida a Ubuntu server → Backup → Rotazione degli archivi

## 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.
    #
    ####################################

    # 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 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.
    #
    ####################################

    # 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 è `/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