Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ceci est une ancienne révision du document !
Ce tuto donne une méthode pour sauvegarder son système d'exploitation debian et le répertoire /home
Motivation principale de ce tuto :
Hormis la sauvegarde du répertoire /home sur lequel on trouve pléthore d'excellentes solutions sur le net, ce tuto essaye d'apporter une façon de sauvegarder le système de façon légère et rapide. Légère en taille d'enregistrement en ne gardant que les fichiers utiles et rapide en ne sauvegardant que ce qui a changé entre deux sauvegardes.
Le système est sauvegardé alternativement dans deux conteneurs BANK1 et BANK2. dans le cas ou une sauvegarde serait corrompue la deuxième sert de roue de secours.
Pour le répertoire /home j'ai opté pour une sauvegarde incrémentale qui garde l'historique des fichiers modifiés ou supprimés. En cas de besoin il sera possible de revenir chercher des fichiers perdus à la demande des utilisateurs du PC.
Par défaut les sauvegardes sont programmées à intervalle minimale de 7 jours. Les utilisateurs du groupe “sauvegarde” pourront à tous moment déclencher ponctuellement une demande de sauvegarde.
Les sauvegardes ont lieu à l'arrêt du PC.
Bien sûr une sauvegarde sans méthode de restauration n'a aucun intérêt. C'est l'objet du deuxième tuto : lien .
Prérequis Matériel : Vous aurez besoin d'un support de sauvegarde dédié. Personnellement j'ai fait le choix d'un disque dur USB du commerce.
Le Disque dur est formaté dans un format équivalent à votre système (exemple ext4) du moins qui conserve les attribut des fichiers Linux.
Si besoin voir la commande mkfs https://debian-facile.org/doc:systeme:mkfs?s[]=ext4.
Dans ce que va suivre je pars du principe que c'est ce type de support qui est utilisé.
Maintenant en avant toute…
l'outil debconf-utils
Il permet de récupérer les configurations des paquets du système. Bien que je n'ai pas eu à m'en servir, ce serait bête de ne pas les avoirs sous la main le jour ou votre barbu local vous dira c'est c.. de ne pas les avoirs sauvegarder…
Pour l'installer
apt-get update && apt-get install debconf-utils
l'outil de chiffrage “encfs”
Afin de ne pas laisser les données personnelles à la merci des Rapetout en tout genre j'ai ajouté une petite fantaisie en utilisant l'outil “encfs” pour chiffrer mon /home.
Pour l'installer
apt-get update && apt-get install encfs
Créer le répertoire sauvegarde sur /mnt qui servira de point de montage :
cd /mnt mkdir sauvegarde
Brancher votre disque dur externe.
Récupérer l'UUID du disque de sauvegarde :
blkid
Repérez votre disque comme ici (Note : Sauvegarde c'est le petit nom que j'ai donné à mon disque)
LABEL="Sauvegarde" UUID="8498c62b-ad6f-4966-990e-822f729a01c3" TYPE="ext4" PARTUUID="f239042f-01"
Éditez votre fichier /etc/fstab avec votre éditeur favori (nano, vim) et ajoutez la ligne suivante
#UUID=8498c62b-ad6f-4966-990e-822f729a01c3 /mnt/sauvegarde ext4 defaults,nofail,noauto 0 2
La ligne est pour l'instant commentée (On enlèvera le “#” à la fin dès que l'on sera assuré que tout est OK).
Vérifier à l'aide de la commande suivante si votre disque est déjà monté. Taper la commande suivante :
mount
Si vous trouvez une ligne du genre ci dessous, démontez le disque dur (sans le déconnecter du port USB) ( voir https://debian-facile.org/doc:systeme:umount) :
/dev/sdb1 on /media/<USER>/Sauvegarde
Montage du disque dur dans le répertoire /mnt/sauvegarde :
fdisk -l
repérer le répertoire en /dev/sdbx de votre disque dur externe.
Supposons qu'il s'appelle /dev/sdb1. Monter le disque avec
mount /dev/sdb1 /mnt/sauvegarde
Placez-vous à la racine du disque :
cd /mnt/sauvegarde
Créer les répertoires suivants :
mkdir BANK1 mkdir BANK2
Créer le fichier suivant :
touch BANK.status
Editez-le et ajouter dedans le texte :
BANK2
Taper la commande :
encfs /mnt/sauvegarde/.backuphome /mnt/sauvegarde/backuphome
Créer les répertoires automatiquement et appliquer le mode normal (mode qui conserve les liens durs)
Répondre y puis y puis entrée
A la demande entrer votre “Monmotdepassesupersecret”
Ajoutez le fichier .superpointeur.txt et créer le répertoire “Actuel” dans backuphome :
cd backuphome touch .superpointeur.txt mkdir Actuel
Démonter le répertoire chiffré :
cd /mnt/sauvegarde fusermount -u /mnt/sauvegarde/backuphome
Créer le fichier suivant : sauvegarde.service dans le répertoire /etc/systemd/system/
[Unit] Description=Sauvegarde systeme et home Before=shutdown.target reboot.target halt.target [Service] Type=oneshot ExecStart=/bin/true ExecStop=/root/backup/rsync-backup.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
Ce groupe va permettre à des utilisateurs de confiance (vous à priori) à déclencher une sauvegarde ponctuelle.
Créer le groupe sauvegarde
addgroup sauvegarde
Ajout du groupe « sauvegarde » (GID 1003)... Fait.
Ajouter un ou plusieurs <USER> habilité(s) à déclencher une sauvegarde ponctuelle au groupe “sauvegarde”.
adduser <USER1> sauvegarde
Ajout de l'utilisateur « <USER1> » au groupe « sauvegarde »... Ajout de l'utilisateur <USER1> au groupe sauvegarde Fait.
Créer le répertoire /usr/local/sauvegarde/
cd /usr/local mkdir sauvegarde cd sauvegarde
A l'intérieur du répertoire faire un
touch rsync-backup-user.date touch rsync-backup-user.sh
Ajouter le script suivant au fichier rsync-backup-user.sh avec votre éditeur préféré :
#! /bin/sh touch /usr/local/sauvegarde/rsync-backup-user.date exit
Ajouter les deux fichier au groupe sauvegarde
chgrp sauvegarde rsync-backup-user.date chgrp sauvegarde rsync-backup-user.sh
Modifiez les droits des deux fichiers comme suit:
chmod 750 rsync-backup-user.sh chmod 660 rsync-backup-user.date
Vérifiez les droits :
ls -al
drwxr-sr-x 2 root staff 4096 juin 29 22:05 . drwxrwsr-x 11 root staff 4096 juin 29 22:03 .. -rw-rw---- 1 root sauvegarde 0 juin 29 22:03 rsync-backup-user.date -rwxr-x--- 1 root sauvegarde 68 juin 29 22:05 rsync-backup-user.sh
Créer le répertoire /root/backup/
cd /root mkdir backup cd backup
A l'intérieur créer les trois fichiers suivants :
touch rsync-backup.log touch rsync-backup.date touch rsync-backup.sh
Editer le fichier rsync-backup.sh et ajouter le script suivant:
#! /bin/sh SOURCE="/" MONTAGE="/mnt/sauvegarde" DESTINATION1="/mnt/sauvegarde/BANK1" DESTINATION2="/mnt/sauvegarde/BANK2" BANKSTATUS="/mnt/sauvegarde/BANK.status" JOURNAL="/root/backup/rsync-backup.log" LASTDATE="/root/backup/rsync-backup.date" NBJOUR=$((($(date -u +%s) - $(date -ur $LASTDATE +%s))/86400)) APPELUSER="/usr/local/sauvegarde/rsync-backup-user.date" NBJOURUSER=$((($(date -u +%s) - $(date -ur $APPELUSER +%s))/86400)) # test si la date d'échéance est arrivée if [ $NBJOUR -lt 7 ]; then echo "`date` Pas le moment" >> $JOURNAL if [ $NBJOURUSER -lt 7 ]; then touch -t 201701010000 $APPELUSER else exit fi fi # Essaye de monter le disque dur et recherche dans quel conteneur enregistrer la sauvegarde mount UUID=8498c62b-ad6f-4966-990e-822f729a01c3 $MONTAGE if [ -f $BANKSTATUS ]; then echo "`date` Montage disque OK" >> $JOURNAL VALSAUVEGARDE=`cat $BANKSTATUS` if [ "$VALSAUVEGARDE" = "BANK1" ]; then DESTINATION=$DESTINATION2 VALSAUVEGARDE="BANK2" elif [ "$VALSAUVEGARDE" = "BANK2" ]; then DESTINATION=$DESTINATION1 VALSAUVEGARDE="BANK1" else echo "`date` Echec sauvegarde SYSTEME: Contenu $BANKSTATUS non conforme" >> $JOURNAL umount $MONTAGE exit fi else echo "`date` Echec sauvegarde SYSTEME: fichier $BANKSTATUS introuvable" >> $JOURNAL exit fi # Sauvegarde du système if [ -d $DESTINATION ] ; then rsync_backup_include='/root/backup/rsync-backup-include' dpkg --get-selections "*" > $DESTINATION/dpkg-selections.list debconf-get-selections > $DESTINATION/debconf-selections /usr/bin/rsync -a --delete-after $SOURCE $DESTINATION --exclude-from=$rsync_backup_include --exclude='**' touch $LASTDATE echo "`date` Sauvegarde SYTEME OK: sur $DESTINATION" >> $JOURNAL echo $VALSAUVEGARDE > $BANKSTATUS # umount $MONTAGE else echo "`date` Echec sauvegarde SYSTEME: répertoire $DESTINATION introuvable" >> $JOURNAL umount $MONTAGE exit fi # Variables d'environnement SOURCE="/home" DESTINATION="/mnt/sauvegarde" ACTUEL="/mnt/sauvegarde/backuphome/Actuel" BACKUP="/mnt/sauvegarde/backuphome/$(date +'%d-%m-%Y')" T="$DESTINATION/backuphome/.superpointeur.txt" LISTEEXCLUSIONS="/root/backup/rsync-backup-include2" # Codes d'erreur E_REPABSENT=65 E_POINTEURABSENT=66 # test 1 if [ -d $DESTINATION/backuphome ] && [ -d $DESTINATION/.backuphome ] ; then # les répertoires existent echo "répertoires trouvés" else echo "`date` Echec sauvegarde HOME: répertoires de sauvegarde introuvables." >> $JOURNAL # Vérifier si le support de sauvegarde est monté umount $MONTAGE exit $E_REPABSENT fi # fin test 1 # Test 2 if [ -e "$T" ] ; then # le répertoire d'archivage sécurisé est déjà monté echo "`date` Echec sauvegarde HOME Le dossier sécurisé est déjà monté." >> $JOURNAL # Démonter le répertoire sécurisé avant l'utilisation du script." umount $MONTAGE exit $E_POINTEURABSENT else # Il faut monter le répertoire d'archivage sécurisé chmod 750 $DESTINATION/backuphome #Déchiffrage du répertoire cat /home/virtualdebian/Documents/.clefsauvegarde | encfs --stdinpass -v "$DESTINATION/.backuphome" "$DESTINATION/backuphome" # Coffre ouvert la sauvegarde sécurisée va démarrer! # crée le répertoire Backup du jour mkdir -p "$BACKUP" # crée la sauvegarde /usr/bin/rsync -a --delete --exclude-from $LISTEEXCLUSIONS --backup --backup-dir="$BACKUP" "$SOURCE" "$ACTUEL" --exclude='**' # supprime le répertoire backup s'il est vide rmdir --ignore-fail-on-non-empty "$BACKUP" # démonte le répertoire en clair fusermount -u "$DESTINATION/backuphome" chmod 440 $DESTINATION/backuphome echo "`date` Sauvegarde HOME OK" >> $JOURNAL umount $MONTAGE fi # fin test 2 exit 0
Modifier les droits du fichier rsync-backup.sh
chmod 700 rsync-backup.sh
faire un
touch rsync-backup-include
et ajouter les lignes suivantes :
# La commande rsync utilisée inclue / (root) et exclue tout. Cela ne sauvegarde rien. Le fichier rsync-backup-include permet d'inclure ce que l'on veur sauvegarder. # (note : pour plus d'information voir la page de manuel de rsync dans les sections : FILTER RULES, INCLUDE/EXCLUDE PATTTERN RULES, MERGE-FILE FILTviER RULES) # à la visite d'un dossier, penser à exclure ce que l'on ne veut pas sauvegarder avant de mettre la règle contenant les * # + [pattern] inclu un motif # - [pattern] exclu un motif # '*' remplace tout et s'arrête au premier slash. # '**' remplace tout, incluant les slashs. # + /dossier/ visite un dossier mais ne sauvegarde rien # + /dossier/ sauvegarde tous les fichiers et dossiers mais de manière non récursive (les dossiers seront vides) # + /dossier/** sauvegarde tous le contenu du dossier récursivement # exclure les fichiers - /initrd.img - /vmlinuz # sauvegarder le contenu du dossier /etc + /etc/ + /etc/** # sauvegarder le contenu du dossier /var + /var/ + /var/spool/ + /vat/spool/** + /var/backups/ + /var/backups/** + /var/lib/ + /var/lib/** + /var/games/ + /var/games/** + /var/lock/ + /var/lock/** + /var/log/ + /var/log/** + /var/mail/ + /var/mail/** + /var/opt/ + /var/opt/** + /var/cache/ + /var/cache/apt/ + /var/cache/apt/** # sauvegarder le contenu du dossier /usr + /usr/ + /usr/local/ + /usr/local/** # sauvegarder le contenu de /root + /root/ + /root/** # exclure tout (comme ça on est sûr) - **
faire un :
touch rsync-backup-include2
et ajouter les lignes suivantes :
# La commande rsync utilisée inclue / (root) et exclue tout. Cela ne sauvegarde rien. Le fichier rsync-backup-include permet d'inclure ce que l'on veur sauvegarder. # (note : pour plus d'information voir la page de manuel de rsync dans les sections : FILTER RULES, INCLUDE/EXCLUDE PATTTERN RULES, MERGE-FILE FILTER RULES) # à la visite d'un dossier, penser à exclure ce que l'on ne veut pas sauvegarder avant de mettre la règle contenant les * # + [pattern] inclu un motif # - [pattern] exclu un motif # '*' remplace tout et s'arrête au premier slash. # '**' remplace tout, incluant les slashs. # + /dossier/ visite un dossier mais ne sauvegarde rien # + /dossier/ sauvegarde tous les fichiers et dossiers mais de manière non récursive (les dossiers seront vides) # + /dossier/** sauvegarde tous le contenu du dossier récursivement # exclure les fichiers - /initrd.img - /vmlinuz - /home/<USER1>/.cache - /home/<USER2>/.cache # sauvegarder le contenu de /home + /home/ + /home/** # exclure tout (comme ça on est sûr) - **
Créer un fichier .clefsauvegarde dans le répertoire <USER> de confiance :
touch /home/<USER>/Documents/.clefsauvegarde
Editer le fichier et y écrire votre mot de passe super secret :
nano /home/<USER>/Documents/.clefsauvegarde
Monmotdepassesupersecret
Affecter les droits unique de lecture pour root.
chmod 400 /home/<USER>/Documents/.clefsauvegarde
Nous allons forcer les premières sauvegardes qui vont être naturellement de longues durées.
Effectuer les commandes suivantes:
cd /usr/local/sauvegarde ./rsync-backup-user.sh cd /root/backup ./rsync-backup.sh
Le système est sauvegardé sur la BANK1 et le /home dans le répertoire sécurisé.
Lancer à nouveau les mêmes commandes pour sauvegarder le système dans la BANK2 (comme le /home est déjà fait cela devrait prendre moins de temps).
Démonter le disque dur
cd / umount /mnt/sauvegarde
Puis démarrer le service en saisissant les commandes suivantes :
systemctl daemon-reload systemctl enable sauvegarde.service systemctl start sauvegarde.service
Éditez votre fichier /etc/fstab avec votre éditeur favori (nano, vim) supprimez le “#” en début de ligne
UUID=8498c62b-ad6f-4966-990e-822f729a01c3 /mnt/sauvegarde ext4 defaults,nofail,noauto 0 2
Voilà… C'est fini.
Les excellents tuto dont je me suis largement inspiré :
rsync-backup https://debian-facile.org/doc:systeme:rsync:backup.
J'ai repris beaucoup de principes de ce tuto, notamment l'admirable et instructive façon d'utiliser rsync (merci à gksam).
Deux tutos expliquant comment faire une sauvegarde - restauration complète du système (donc lourde) :
La référence debian : https://www.debian.org/doc/manuals/debian-reference/ch10.fr.html#_backup_and_recovery
Le tuto encfs de ubuntu : https://doc.ubuntu-fr.org/encfs