Rotation des archives
The shell script in Scripts shell 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 complex rotation scheme should be used.
Rotation des archives NFS
Dans cette section, le script shell sera légèrement modifié pour mettre en œuvre un système de rotation grand père-père-fils (mensuel, hebdomadaire, quotidien):
-
La rotation va effectuer une sauvegarde journalière du dimanche au vendredi.
-
Le samedi une sauvegarde hebdomadaire est effectuée donnant 4 sauvegardes hebdomadaires par mois.
-
La sauvegarde mensuelle est effectuée le premier du mois avec une rotation bi-mensuelle en fonction de la parité du mois.
Voici le nouveau script:
#!/bin/bash #################################### # # Sauvegarde vers un point de montage NFS en utilisant # une rotation grand-parent - parent - enfant # #################################### # Ce qu'il faut sauvegarder backup_files="/home /var/spool/mail /etc /root /boot /opt" # Où le sauvegarder dest="/mnt/backup" # Initialisation des variables utilisées dans le nom de l'archive day=$(date +%A) hostname=$(hostname -s) # Déterminer le numéro de semaine (1-4) du mois en cours 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 # Déterminer si le mois est pair ou impair 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 # Création du nom de l'archive if [ $day_num == 1 ]; then archive_file=$month_file elif [ $day != "Saturday" ]; then archive_file="$hostname-$day.tgz" else archive_file=$week_file fi # Affichage du commencement des opérations echo "Sauvegarde de $backup_files vers $dest/$archive_file" date echo # Sauvegarde des fichiers à l'aide de tar. tar czf $dest/$archive_file $backup_files # Affichage de la fin des opérations echo echo "Sauvegarde terminée" date # Listing détaillé des fichiers de $dest pour vérifier leur poids ls -lh $dest/
Le script peut être exécuté en utilisant les mêmes méthodes que dans Exécution du script.
Il est conseillé de prendre des supports de sauvegarde hors site en cas de catastrophe. Dans l'exemple de ce script shell le support de sauvegarde est un autre serveur fournissant un partage NFS. Selon toute vraisemblance, prendre le serveur NFS vers un autre emplacement ne serait pas pratique. Selon les vitesses de connexion, une option possible est de copier le fichier d'archive via une liaison WAN à un serveur à un autre endroit.
Une autre option est de copier le fichier d'archive vers un disque dur externe qui peut ensuite être retiré du site. Comme le prix des disques durs externes continue de diminuer, il peut être rentable d'utiliser deux lecteurs pour chaque niveau d'archive. Cela vous permettra d'avoir un disque dur externe connecté au serveur de sauvegarde et un dans un autre emplacement.
Lecteurs de bande
Un lecteur de bande connecté au serveur peut être utilisé au lieu d'un partage NFS. L'utilisation d'un lecteur de bande simplifie la rotation des archives, et permet également de prendre les médias hors du site plus facilement.
Lors de l'utilisation d'un lecteur de bandes, les parties de nom de fichier du script ne sont pas nécessaires parce que les données sont envoyées directement au périphérique à bande. Certaines commandes de manipulation de la bande sont nécessaires. Ceci est accompli en utilisant mt, un utilitaire de contrôle de bandes magnétiques faisant parti du paquet cpio.
Voici le script shell modifié pour l'utilisation d'un lecteur de bande:
#!/bin/bash #################################### # # Sauvegarde vers une cassette # #################################### # Ce qu'il faut sauvegarder backup_files="/home /var/spool/mail /etc /root /boot /opt" # Où le sauvegarder dest="/dev/st0" # Affichage du commencement des opérations echo "Backing up $backup_files to $dest" date echo # S'assurer que la cassette est rembobinée mt -f $dest rewind # Sauvegarde à l'aide de tar. tar czf $dest $backup_files # Rembobinage et ejection de la cassette mt -f $dest rewoffl # Affichage de la fin des opérations echo echo "Sauvegarde terminée" date
Le nom de périphérique par défaut pour un lecteur de bandes SCSI est /dev/st0. Employez le chemin correspondant à votre système.
La restauration à partir d'un lecteur de bandes est essentiellement équivalente à la restauration à partir d'un fichier. Il suffit de rembobiner la bande et remplacer le chemin du fichier par celui du périphérique. Par exemple, pour restaurer le fichier /etc/hosts vers /tmp/etc/hosts :
mt -f /dev/st0 rewind tar -xzf /dev/st0 -C /tmp etc/hosts