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.
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/
Το σενάριο μπορεί να εκτελεστεί χρησιμοποιώντας τις ίδιες μεθόδους όπως στο “Εκτέλεση του σεναρίου εντολών”.
Είναι καλή πρακτική να κρατάτε τις συσκευές στις οποίες διατηρείτε αντίγραφα ασφαλείας εκτός της περιοχής σας για περίπτωση καταστροφής. Σε αυτό το παράδειγμα σεναρίου κελύφους η συσκευή με τα αντίγραφα ασφαλείας είναι ένας άλλος εξυπηρετητής που παρέχει έναν κοινόχρηστο πόρο 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 είναι |
Η επαναφορά από μία συσκευή δισκέτας είναι βασικά το ίδιο με την επαναφορά από ένα αρχείο. Απλά γυρίστε την κασέτα στην αρχή και χρησιμοποιήστε τη διαδρομή της συσκευής αντί για μία διαδρομή αρχείου. Για παράδειγμα για να επαναφέρετε το αρχείο /etc/hosts στο /tmp/etc/hosts εκτελέστε τα ακόλουθα:
mt -f /dev/st0 rewind tar -xzf /dev/st0 -C /tmp etc/hosts

