Création d'un script de sauvegarde
Avant de démarrer le tuto, il faut installer rsync avec la commande suivante : sudo apt-get install rsync
Nous allons créer un petit script bash qui va utiliser la commande rsync pour sauvegarder un dossier vers un autre.
Créer un fichier appelé backup.sh dans votre répertoire home par exemple
#!/bin/bash
rsync -a /var/www /home/backup/
rsync va synchroniser le répertoire /var/www avec le répertoire /home/backup
Noubliez pas dappliquer un chmod 755 pour rendre exécutable le script
Autre script possible
Dans ce deuxième exemple, on va faire la sauvegarde de la config de Firefox et de Thunderbird (ainsi que tous les e-mails) et du dossier "Images" sur un ordinateur distant, et créer des sauvegardes de tous les fichiers modifiés ou supprimés dans des dossiers correspondant à leur date de modification. Pour ma part, je fais un backup sur mon serveur dédié. Voici donc notre fichier ~/backup_pc.sh :
#!/bin/sh
# Source du backup (dossier local contenant les dossier qu on va synchroniser) SRC=~/ # Destination du backup (dossier distant) DST=root@123.123.123.123:/home/user/backup/ # Date de la forme jour-mois-année DATE=`date +%d-%m-%y` # Dossier de backup des fichiers supprimés BCK=/home/user/backups_del
# Rsync avec backup /usr/bin/rsync -avz --delete --backup --backup-dir=$BCK --include=Images --include=.mozilla --include=.mozilla-thunderbird --exclude=/* $SRC $DST
On utilise ici les options -avz --delete --backup --backup-dir --include --exclude de rsync :
-a équivaut aux options -rlptgoD (récursivité, conservation des liens symboliques, des permissions, des dates, du groupe, du propriétaire, et des périphériques) -v active le mode "bavard" : une liste de toutes les actions effectuée s'affiche -z active la compression des données pour un transfert plus rapide (indispensable pour des transferts distants). Notez que seul l'envoi est compressé, les fichiers au final ne sont pas compressés. --delete supprime les fichiers du dossier de destination qui ne sont pas présents dans la source. Indispensable pour une copier conforme --backup active la sauvegarde séparée des fichiers supprimés --backup-dir=DIR spécifie dans quel dossier il faut faire la sauvegarde des fichiers supprimés --include=PATTERN spécifie un dossier à inclure dans la synchronisation --exclude=PATTERN spécifie un dossier à exclure de la synchronisation. Ici on exclut (/*) tout et on inclut les dossiers qui nous intéressent
Dans ce bash, on fait la sauvegarde dans le dossier /home/user/backup/ de l'utilisateur root à l'adresse 123.123.123.123, et bien sûr il faut avoir la permission de cet ordinateur pour lui envoyer des données. Pour cela, vous avez deux solutions :
- Soit vous installez openssh-server sur l'ordinateur distant (si ce n'est déjà fait, et vous exécutez cette commande pour que votre ordinateur puisse s'y connecter par ssh ou rsync sans avoir à entrer le mot de passe. Il faut d'abord générer la clé :
ssh-keygen -t dsa
On vous demandera où placer la clé, répondez par default. Et on vous demandera une passphrase pour crypter votre certificat, ne mettez rien, appuyez simplement sur Entrée.
Ensuite, pour copier la clé sur l'ordinateur distant : ssh-copy-id -i ~/.ssh/id_dsa.pub root@123.123.123.123
Cette commande ne fait quajouter votre clé publique dans un fichier sur le serveur. Voici une commande équivalente : cat ~/.ssh/id_dsa.pub | ssh root@123.123.123.123 "cat - >> ~/.ssh/authorized_keys"
Voila, vous pouvez desormais vous identifier sur le serveur sans mot de passe.
- Soit vous n'avez pas peur de stocker le mot de passe de l'ordinateur distant en clair, alors on peut faire plus simple : créez un fichier ~/.backup_password contenant uniquement le mot de passe de l'ordinateur distant, et ajoutez l'option "--password-file=~/.backup_password" à rsync dans le bash. Il est tout de même conseillé de ne donner les droits de lecture pour ce fichier qu'à vous. Pour cela :
chmod 700 ~/.backup_password
Remarques : Ici, on se connecte avec l'utilisateur root à l'ordinateur distant, mais on peut prendre un autre utilisateur. De plus nous utilisons une ip (123.123.123.123 à remplacer par l'ip de l'ordinateur distant). Si elle est dynamique, il faut s'assurer qu'elle n'a pas changé avant de lancer le transfert. Vous pouvez aussi utiliser un dyndns.
Automatisation de la procédure
Pour automatiser la procédure de sauvegarde il va falloir mettre en place un cron
Pour ce faire rien de plus simple exécuter la commande crontab -e (ou crontab -e root si vous nêtes pas déjà sous root)
Placer vous sur la dernière ligne et rajouter # m h dom mon dow command 0 1 * * 1 /usr/bin/backup.sh
Ici la sauvegarde sera effectuée tous les lundis à 1h00.
- m correspond aux minutes (0 à 59) - h aux heures (0 à 23) - dom à un jour dans le mois (1 à 31) - mon aux mois (1 à 12) - dow à un jour dans la semaine (1 à 7)
seules les valeurs numériques sont acceptées !
Imaginons que vous souhaitez exécuté le script tous les mercredi du mois à 12h33, rien de plus simple # m h dom mon dow command 33 12 * * 3 /usr/bin/backup.sh
Ou bien toutes les 15 minutes # m h dom mon dow command */15 * * * * /bin/sh /usr/bin/backup.sh
Il ne vous reste plus quà sauvegarder votre fichier crontab et a redémarrer cron /etc/init.d/cron restart
Autre procédure possible
pour lister les tâches déjà paramétrées, tapez simplement la commande : crontab -l
pour modifier vos tâches automatisées, tapez simplement la commande : crontab -e
Votre fichier de configuration de cron s'ouvrira alors dans vim ou nano. Nano est facile à utiliser, les commande sont décrites en bas de la fenêtre (Ctrl+X pour quitter...). Nano est en permanence en mode édition Vim requiert un petit peu plus de connaissance, mais le principal à savoir est :
- touche Inser pour activer le mode édition - touche Ech pour revenir en mode commande (vim fonctionne par commandes) - commande :q! pour quitter sans enregistrer - commande :qw pour quitter en enregistrant
Une ligne du fichier correspond à une tâche automatisée. Vous pouvez en ajouter en vous plaçant en mode édition (Inser sous vim). Voici la syntaxe à respecter : mm hh jj MMM JJJ tâche > log
Dans cette syntaxe :
- mm représente les minutes (de 0 à 59) - hh représente l'heure (de 0 à 23) - jj représente le numéro du jour du mois (de 1 à 31) - MMM représente le numéro du mois (de 1 à 12) ou l'abréviation du nom du mois en anglais (jan, feb, mar, apr, ...) - JJJ représente l'abréviation du nom du jour ou le chiffre correspondant au jour de la semaine (0 représente le dimanche, 1 représente le lundi, ...) - tâche représente la commande ou le script shell à exécuter - log représente le nom d'un fichier dans lequel stocker le journal des opérations. Si la clause "> log" n'est pas spécifiée, cron enverra automatiquement un courriel de confirmation. Pour éviter cela il suffit de spécifier > /dev/null
Pour chaque unité de temps (minute/heure/...) les notations sont possibles:
- * : a chaque unité de temps - 2-5 : les unités de temps (2,3,4,5) - */3 : toutes les 3 unités de temps (0,3,6,...) - 5,8 : les unités de temps 5 et 8
Nous allons donc automatiser nos backups backup_musiques.sh et backup_pc.sh : # Synchro des fichiers tous les jours à 2h15 du matin avec création d un log : 15 2 * * * /bin/sh /home/user/backup_pc.sh > /home/user/backup_pc.log
# Synchro des musiques un jour sur deux à 20h : 0 20 */2 * * /bin/sh /home/user/backup_musiques.sh > /dev/null
Note : Pensez à remplacer tout au long de ce tuto "/home/user" par l'adresse de votre dossier perso. Possibilité de remplacer le > par >> si vous voulez rajouter les informations à la suite.
|
| | |