Sauvegardez ! Qu'il disait, et raison, il avait.
Et oui, récemment, j'ai perdu mon /home, en voulant agrandir ma partition (je me suis dit, "agrandir, ça ne craint rien"), et ben faut croire que j'avais tord, surtout quand on agrandit à gauche[1].
Heureusement, j'avais un backup datant de... Novembre (époque où j'ai acheté mon disque dur sata seagate 7200 400Go, que je recommande) après avoir reformaté (oui, ma partition était irrécupérable), et tout reparamétré, je me suis penché sur la solution d'une sauvegarde hebdomadaire de tout mon système. On me conseilla cron et rsync.

RSYNC

Il s'agit d'un utilitaire en ligne de commande qui permet une copie avancée de fichiers, d'un emplacement distant ou local à un autre emplacement. Voici mon exemple, et après, les explications.

bckdir1=`date +%Y-%m-%d`
bckdir="/mnt/reminiscence/racine.bk/root-$bckdir1"
rsync --force --ignore-errors --delete --delete-excluded --exclude=var/spool/* --exclude=mnt/* --exclude=var/tmp/* --exclude=proc/* --exclude=tmp/* --exclude=dev/* --exclude=sys/* --backup --backup-dir="$bckdir" -Pia /* /mnt/reminiscence/racine.bk/root/

Donc un petit fichier backup.sh avec lequel je sauvegarde / et /home.

alors, les options importantes:

  • --exclude permet de ne pas sauvegarder des éléments, comme les répertoires temporaires (/tmp,/sys,/proc...) et les autres partitions (/mnt). On peut faire plus court (cf. man rsync)
  • --backup enregistre les fichiers déjà existant avant de les écraser avec les nouveaux fichiers
  • --backup-dir met ces fichiers dans le dossier spécifié
  • -P (Progress) montre la progression
  • -a (archive) sauvegarde les droits et autres caractéristiques et ce, récursivement (il descend dans les répertoires)
  • -i (itemize-changes) donne un résumé des opérations effectuées


donc, quand je lance backup.sh (ne pas oublier de faire chmod +x pour pouvoir l'exécuter) rsync,

  • regarde s'il y a des fichiers intrus dans le répertoire /mnt/reminiscence/racine.bk/root/,
  • les efface (--delete),
  • regarde si il y a des fichiers exclus présents dans /mnt/../racine.bk.root/ (--exclude et --delete-excluded),
  • regarde les fichiers qui ont été modifiés depuis la dernière sauvegarde (date de modification),
  • les déplace de /mnt/.../root/ dans le dossier /mnt/../root-AA-MM-DD/ (--backup et --backup-dir),
  • puis déplace les nouveaux fichiers de / dans /mnt/../root/.

Bon, déjà, on a un beau script de backup, plus d'infos sur ce site: linuxfocus.org.

CRON

Je suppose que tout le monde en a entendu parler, il s'agiger d'un logiciel permettant de faire des tâches programmées. Plus d'info dans la merveilleuse doc gentoo.

En ce qui me concerne, j'ai choisis le cron de Vixie:
emerge sys-process/vixie-cron
emerge sys-process/cronbase
cronbase permettant d'avoir accès à tout plein d'outils.

Ensuite, on fait
crontab -e
pour éditer votre fichier de tâches, sachez qu'il y a un fichier de tâche par utilisateur, par conséquent, cette commande permet de configurer de le fichier de tâche de l'utilisateur courant. il est possible de modifier la crontab d'un autre utilisateur en faisant crontab -u utilisateur -e.

On s'attaque maintenant à la syntaxe du crontab. C'est pas très dur, une ligne par tâche:

min heure jour mois jour_de_la_semaine tache
avec

  • min qui va de 0 à 59
  • heure de 0 à 23
  • jour de 1 à 31
  • mois de 1 à 12 ou jan,feb...
  • jour_de_la_semaine de 0 à 7 ou de sun à sat (0 et 7 correspondent au dimanche)
  • tache la tâche à exécuter.

Et maintenant, comment on les utilise:

  • '*' effectue la tâche tout les "champ renseigné" (sans les ' )
  • 5 effectue la tâche le 5 du "champ renseigné"
  • 2,3 effectue la tâche le 2 et le 3
  • 3-5 effectue la tâche le 3,4,5
  • /10 indique un pas de 10, par exemple */10 * * * * effectue la tâche toutes 10 minutes ou 1-7/2 effectue la tâche le 1,3,5 et 7

Ce qui est bien avec vixie-cron, c'est que l'on peut utiliser les variables d'environnement dans la tâche, comme $HOME. On peut aussi les forcer comme par exemple:

SHELL=/bin/bash
On oblige cron à utiliser bash comme shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin
les dossiers d'exécutables
MAILTO=root
On verra tout à l'heure ;-)
HOME=/root
on dit que le home, ben c'est /root (là où se trouve mon script backup.sh en l'occurrence)

Et enfin pour une sauvegarde tout les lundi à 12h30, on fait:

30 12 * * 1 $HOME/backup.sh

SSMTP

Bon, c'est bien beau tout ça, mais comment être sûr que la sauvegarde est bien effectuée, et puis, pourquoi mettre l'option -i ou -P (quoique, P, on peut l'enlever) si on est pas devant l'écran pour regarder? Il existe ssmtp, qui est un MTA, permettant d'installer un pseudo serveur mail, mais sans l'installer, enfin... c'est pas un serveur mail, car il ne permet que d'envoyer les mails.

On l'installe:

emerge mail-mta/ssmtp

et on configure:

vim /etc/ssmtp/ssmtp.conf

Ou avec tout autre éditeur de texte (bouh emacs) et on met:

root=votreadresse@domaine
adresse de l'utilisateur qui recevra les mails pour les users d'uid<1000
mailhub=smtp.votrefai.fr
le serveur smtp que vous utilisez habituellement
rewriteDomain=methrilla@free.fr
c'est sensé remplir le champ "de:" ou "from:" mais ça marche pas très bien chez moi.

vous pouvez tout de suite tester votre config en lançant un mail en étant root:

ssmtp votreadresse@domaine.fr
subject: test
corps du message
.
le point final sur une ligne. Et là, mystère, j'avoue n'avoir toujours pas compris comment quitter ssmtp correctement, apparemment, avec "quit" puis un blanc, mais cela ne marche pas toujours[2].
Ce qui importe, c'est qu'après le "." final, le mail est envoyé, consulter votre boite mail, si il est là, c'est bon, si vous recevez un message d'erreur de votre fai, c'est presque bon, si il n'y a rien, c'est pas bon du tout.

Maintenant, vous comprenez pourquoi j'avais mis un mailto=ROOT, cela permettra de recevoir toutes les sorties (stdout et stderr) en mail. Si il y a des tâches pour lesquelles vous ne voulez pas de mail, il suffit de mettre un >/dev/null en fin de ligne.

À vos sauvegardes !

Notes

[1] En effet, les données relatives au filesystem se trouve à gauche dans la partition (soit au début) donc si on veut l'agrandir, il faut décaler toutes les données à gauche et agrandir à droite.

[2] En faisant un ssmtp -s recipient@domaine et à la fin . puis quit et plusieurs fois "entrée", ça à l'air de quitter à tous les coups, bizarre...