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

It is good practice to take backup media off site in case of a disaster. In the shell script example the backup media is another server providing an NFS share. In all likelihood taking the NFS server to another location would not be practical. Depending upon connection speeds it may be an option to copy the archive file over a WAN link to a server in another location.

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
[Nota]

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