Archive Rotation

The shell script in section “Σενάρια εντολών κελύφους” only allows for seven different archives. For a server whose data doesn't change often this may be enough. If the server has a large amount of data a more robust rotation scheme should be used.

Rotating NFS Archives

In this section the shell script will be slightly modified to implement a grandfather-father-son rotation scheme (monthly-weekly-daily):

  • The rotation will do a daily backup Sunday through Friday.

  • On Saturday a weekly backup is done giving you four weekly backups a month.

  • The monthly backup is done on the first of the month rotating two monthly backups based on if the month is odd or even.

Αυτό είναι το νέο σενάριο εντολών:

#!/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/

Το σενάριο μπορεί να εκτελεστεί χρησιμοποιώντας τις ίδιες μεθόδους όπως στο &#x201C;Εκτέλεση του σεναρίου εντολών&#x201D;.

Είναι καλή πρακτική να κρατάτε τις συσκευές στις οποίες διατηρείτε αντίγραφα ασφαλείας εκτός της περιοχής σας για περίπτωση καταστροφής. Σε αυτό το παράδειγμα σεναρίου κελύφους η συσκευή με τα αντίγραφα ασφαλείας είναι ένας άλλος εξυπηρετητής που παρέχει έναν κοινόχρηστο πόρο NFS. Σε κάθε περίπτωση, η μεταφορά του εξυπηρετητή NFS σε μία άλλη τοποθεσία δεν θα ήταν πρακτική. Ανάλογα με τις ταχύτητες της σύνδεσής σας, μπορεί να αποτελεί πιθανή επιλογή η αντιγραφή του συμπιεσμένου αρχείου μέσω μιας σύνδεσης WAN σε έναν εξυπηρετητή που βρίσκεται σε άλλη τοποθεσία.

Μία άλλη επιλογή είναι η αντιγραφή του συμπιεσμένου αρχείου σε έναν εξωτερικό σκληρό δίσκο που μπορεί μετά να μεταφερθεί εκτός της τοποθεσίας σας. Αφού η τιμές των εξωτερικών σκληρών δίσκων συνεχίζουν να μειώνονται, μπορεί να είναι οικονομικά αποδοτικό να χρησιμοποιείτε δύο σκληρούς δίσκους για κάθε επίπεδο αρχείων. Αυτό θα σας επέτρεπε να έχετε έναν εξωτερικό δίσκο συνδεδεμένο με τον εξυπηρετητή αντιγράφων ασφαλείας και έναν σε μία άλλη τοποθεσία.

Συσκευές κασέτας

A tape drive attached to the server can be used instead of a NFS share. Using a tape drive simplifies archive rotation, and taking the media off site as well.

Όταν χρησιμοποιείτε συσκευή κασέτας, τα μέρη του σεναρίου που έχουν να κάνουν με το όνομα των αρχείων δεν χρειάζονται επειδή η ημερομηνία στέλνεται απευθείας στην συσκευή κασέτας. Χρειάζονται κάποιες εντολές για τον χειρισμό της κασέτας. Ο χειρισμός πραγματοποιείται με τη χρήση του mt, ένα εργαλείο ελέγχου μαγνητικών κασετών που είναι μέρος του πακέτου cpio.

Αυτό είναι το σενάριο κελύφους τροποποιημένο ώστε να χρησιμοποιεί μια συσκευή κασέτας:

#!/bin/bash
##########################################
#
# Σενάριο δημιουργίας αντιγράφων ασφαλείας σε συσκευή κασέτας.
#
##########################################

# Τι θα αντιγραφεί. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Πού θα δημιουργηθεί το αντίγραφο ασφαλείας.
dest="/dev/st0"

# Εμφάνιση μηνύματος έναρξης.
echo "Δημιουργείται αντίγραφο των αρχείων $backup_files στο $dest"
date
echo

# Επιβεβαίωση πως η κασέτα έχει γυριστεί στην αρχή.
mt -f $dest rewind

# Δημιουργία αντιγράφου των αρχείων με τη χρήση του tar.
tar czf $dest $backup_files

# Γύρισμα της κασέτας στην αρχή και εξαγωγή της.
mt -f $dest rewoffl

# Εμφάνιση μηνύματος ολοκλήρωσης.
echo
echo "Η δημιουργία αντιγράφου ασφαλείας ολοκληρώθηκε"
date
[Σημείωση]

Το προεπιλεγμένο όνομα για μία συσκευή κασέτας SCSI είναι /dev/st0. Χρησιμοποιήστε την κατάλληλη διαδρομή συσκευής για το σύστημά σας.

Η επαναφορά από μία συσκευή δισκέτας είναι βασικά το ίδιο με την επαναφορά από ένα αρχείο. Απλά γυρίστε την κασέτα στην αρχή και χρησιμοποιήστε τη διαδρομή της συσκευής αντί για μία διαδρομή αρχείου. Για παράδειγμα για να επαναφέρετε το αρχείο /etc/hosts στο /tmp/etc/hosts εκτελέστε τα ακόλουθα:

mt -f /dev/st0 rewind
tar -xzf /dev/st0 -C /tmp etc/hosts