Scripts shell de sauvegarde
Une des façons les plus simples de sauvegarder un système utilise un script shell. Par exemple, un script peut être utilisé pour configurer les répertoires à sauvegarder et transmettre ces répertoires comme arguments à l’utilitaire tar, ce qui crée un fichier d’archive. Le fichier d’archive peut ensuite être déplacé ou copié dans un autre emplacement. L’archive peut également être créée sur un système de fichiers distant tel qu’un montage NFS.
L’utilitaire tar crée un fichier d’archive de plusieurs fichiers ou répertoires. tar peut également filtrer les fichiers par le biais des utilitaires de compression, réduisant ainsi la taille du fichier d’archive.
Script shell simple
Le script shell suivant se sert de tar pour créer une archive sur un montage NFS. Le nom de l’archive est défini en se servant de divers utilitaires en ligne de commande.
#!/bin/bash #################################### # # Backup to NFS mount script. # #################################### # What to backup. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Where to backup to. dest="/mnt/backup" # Create archive filename. day=$(date +%A) hostname=$(hostname -s) archive_file="$hostname-$day.tgz" # 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
$backup_files
: variable listant les répertoires que vous souhaitez sauvegarder. La liste doit être adaptée à vos besoins.$day
: une variable contenant le jour de la semaine (lundi, mardi, mercredi, etc.) Cette fonction est utilisée pour créer un fichier d’archive pour chaque jour de la semaine, ce qui donne un historique de sauvegarde de sept jours. Il y a d’autres façons d’accomplir cela, par exemple en utilisant l’utilitaire date.$hostname
: variable contenant le nom d’hôte de votre système en format court. Vous pourrez ainsi placer les archives quotidiennes de plusieurs hôtes dans un même répertoire.$archive_file
: le nom complet de l’archive.$dest
: destination du fichier d’archive. Le répertoire doit être créé et, dans ce cas monté avant d’exécuter le script de sauvegarde. Voir Network File System (NFS) pour des détails sur l’utilisation de NFS.status messages : messages optionnels affichés dans la console lors de l’utilisation de la commande echo.
tar czf $dest/$archive_file $backup_files
: la commande tar utilisée pour créer le fichier d’archive.c
: crée une archive.z
: compresser l’archive avec gzip.f
: sortie vers un fichier d’archive. Sinon, la sortie tar est envoyée versSTDOUT
.
ls -lh $dest
: instruction optionnelle affichant une liste du répertoire de destination détaillée-l
et au format lisible par facilement-h
. Ceci est utile pour vérifier rapidement la taille du fichier archive, mais ne devrait pas remplacer le test de celui-ci.
Voici un exemple simple de script shell de sauvegarde. Cependant, il y a beaucoup d’options qui peuvent être inclues dans un tel script. Voir Références pour avoir des liens vers des ressources fournissant des informations plus approfondies sur les scripts shell.
Exécution du script
Exécution à partir d’un terminal
La manière la plus simple d’exécuter le script de sauvegarde ci-dessus est de copier et coller le contenu dans un fichier. Backup.sh par exemple. Le fichier doit être rendu exécutable:
chmod u+x backup.sh
Ensuite, depuis une invite de terminal:
sudo ./backup.sh
C’est une excellente manière de tester le script pour s’assurer que tout fonctionne comme prévu.
Exécution avec cron
L’exécution du script peut être automatisée avec l’utilitaire cron
. Le démon cron permet d’exécuter des scripts ou des commandes, à une date et une heure déterminées.
cron
est configuré au travers d’entrées dans un fichier crontab
. Les fichiers crontab
sont séparés en champs:
# m h dom mon dow command
m
: minute de l’exécution de la commande, entre 0 et 59.h
: heure de l’exécution de la commande, entre 0 et 23.dom
: jour du mois durant lequel la commande s’exécute.mon
: mois de l’exécution de la commande, entre 1 et 12.dow
: le jour de la semaine (“day of week”) où la commande s’exécute (entre 0 et 7). Dimanche peut être spécifié à l’aide de 0 ou 7, les deux valeurs sont valides.command
: la commande à exécuter.
La commande crontab -e
doit être utilisée pour ajouter ou modifier les entrées d’un fichier crontab
. Le contenu d’un fichier crontab peut être affiché avec la commande crontab -l
.
Afin d’exécuter le script backup.sh
précédent en utilisant cron
, saisissez dans une invite de terminal :
sudo crontab -e
L’utilisation de sudo
avec la commande crontab -e
modifie le fichier crontab
de l’utilisateur root
. Cela est nécessaire si vous sauvegardez des répertoires accessibles uniquement par l’utilisateur root
.
Ajoutez l’entrée suivante au fichier crontab
:
# m h dom mon dow command 0 0 * * * bash /usr/local/bin/backup.sh
Le script backup.sh
sera maintenant lancé tous les jours à 12h00.
Le script backup.sh devra être copié dans le répertoire /usr/local/bin/
pour que cette entrée s’exécute correctement. Le script peut se trouver n’importe où sur le système de fichiers, il suffira de changer le chemin d’accès du script en conséquence.
Pour des options crontab plus détaillées, consultez Références.
Restauration à partir d’une archive
Il est important de vérifier une archive après sa création. Une archive peut être testée en listant les fichiers qu’elle contient, mais le mieux est de restaurer un fichier depuis cette archive.
Pour voir une liste du contenu de l’archive. Saisissez à partir d’un terminal:
tar -tzvf /mnt/backup/host-Monday.tgz
Pour restaurer un fichier à partir de l’archive dans un répertoire différent, tapez :
tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts
L’option
-C
pour tar redirige les fichiers extraits vers le répertoire spécifié. L’exemple ci-dessus va extraire le fichier/etc/hosts
vers/tmp/etc/hosts
. tar recrée l’arborescence des dossiers qu’il contient.Notez également que le premier « / » est enlevé du chemin du fichier à restaurer.
Pour restaurer tous les fichiers de l’archive saisissez ceci :
cd / sudo tar -xzvf /mnt/backup/host-Monday.tgz
Cela écrasera les fichiers actuellement sur le système de fichiers.