Services

Sauvegarde distante sur un disque dur externe chiffré

Dernière mise à jour : 02/03/2023 à 18h08
Table des matières Aujourd'hui, un petit article sur la mise en place d'une sauvegarde "distante" de ses fichiers sur un disque dur externe chiffré branché sur un raspberry.
Je vais vous décrire cela sur un disque dur que j'ai à la maison, mais je l'ai autrefois fait sur un disque dur installé chez quelqu'un, cela fonctionne aussi. Il est juste nécessaire dans ce cas que la personne chez qui vous déposez le raspberry ait une ip fixe ou un nom de domaine et de rediriger les ports qui vont bien vers le raspberry.

Comme souvent, la majorité des commandes sont à faire en root ou avec sudo.

Etape 1 : accès SSH sans mot de passe



Je ne vais pas vous redécrire l'opération, vous trouverez cela facilement sur internet, j'ai également un article en cours de rédaction sur le sujet.
C'est important pour automatiser la sauvegarde.

Etape 2 : La création du volume chiffré sur son disque dur externe



Rendez-vous sur le raspberry où est branché votre disque dur externe, ou bien vous pouvez brancher le disque dur sur votre ordinateur.
Il sera nécessaire de supprimer les données du disque ou au moins de la partition que l'on veut chiffrer.

Il est d'abord nécessaire d'installer cryptsetup si ce n'est pas le cas, exemple sur une debian :

Code BASH :
apt install cryptsetup


On cherche notre disque dur :

Code BASH :
lsblk


On créé la partition qui sera chiffrée ensuite sur le disque trouvé (attention à ne pas se tromper de disque) :

Code BASH :
cfdisk /dev/sda


Vous arriverez sur l'interface de cfdisk qui vous permettra de supprimer la ou les partitions que vous souhaitez puis d'en créer une nouvelle à chiffrer.
On ne formate pas la partition nouvellement créée.

On chiffre la nouvelle partition :

Code BASH :
cryptsetup --verify-passphrase luksFormat /dev/sda1


Cherchez dans le manuel de cryptsetup mais on peut spécifier des paramètres :

Code BASH :
cryptsetup --verify-passphrase --cipher serpent-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sda1


On vous demandera confirmation pour effacer les données et d'entrer votre nouvelle passphrase (deux fois).

On ouvre ensuite le conteneur en lui donnant un nom (ici, je l'appelle cryptWD, on pourra le changer à chaque fois qu'on l'ouvrira) :

Code BASH :
cryptsetup luksOpen /dev/sda1 cryptWD


La partition sera alors accessible via /dev/mapper/cryptWD

Il suffit ensuite de formater la partition :

Code BASH :
mkfs.ext4 /dev/mapper/cryptWD


Enfin, on monte la partition :

Code BASH :
mount /dev/mapper/cryptWD /mnt 


Etape 3 : Automatisation de l'ouverture du conteneur



Nous avons créé notre conteneur et vu comment l'ouvrir puis le monter.
Pour automatiser l'ouverture et le montage, rendez-vous sur cet article qui décrit toute la démarche.

Etape 4 : La sauvegarde



Tout est en place maintenant pour faire la sauvegarde :
  • notre disque dur contient une partition chiffrée qui s'ouvre et se monte automatiquement au démarrage du système
  • nous avons accès à notre système distant sans mot de passe


Nous allons maintenant passer au script de sauvegarde.
Je vous mets en exemple, le script bash que j'utilise. Il est à adapter :
  • SOURCE >> les fichiers à sauvegarder
  • LOGFILE >> où vous sauvegarder les logs de la sauvegarde
  • SERVDEST >> ip de mon raspberry où est branché le disque dur chiffré


J'ai crée une fonction pour chaque dossier, cela me permet de bien séparer les choses et d'en ajouter ou supprimer facilement.

Mon fichier exclusions_rsync.txt contient les lignes suivantes :

Code BASH :
 
.recycle
@Recycle
.Trash
 
 


Code BASH :
 
#! /bin/bash
#Variables
PORT=22
EXCLUDEFILE="/srv/mergerfs/DATA/Informatique/Backups/Rsync_RPI/exclusions_rsync.txt"
DATEFICHIER=$(date +%Y.%m.%d_%H.%M.%S)
LOGFILE="/srv/mergerfs/DATA/Informatique/Backups/Rsync_RPI/logs/rsync_$DATEFICHIER.log"
SOURCE="/srv/mergerfs/DATA/"
USER="user"
SERVDEST="192.168.1.51"
PATHDEST="/mnt/cryptWD/"
OPTIONS="-ah --ignore-existing --info=MISC2,PROGRESS2,STATS2 --exclude-from=$EXCLUDEFILE --log-file=$LOGFILE --log-file-format="
DATEDEBUT=$(date +%Y.%m.%d_%H.%M.%S)
DebutFichier(){
    echo "Début de la sauvegarde - $DATEDEBUT" >> $LOGFILE
    echo "" >> $LOGFILE
}
SauvegardeHomes(){
    echo "Sauvegarde du dossier Homes" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Homes/" $USER@$SERVDEST:$PATHDEST"Homes/"
    echo "" >> $LOGFILE
}
SauvegardeInformatique(){
    echo "Sauvegarde du dossier Informatique" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Informatique/" $USER@$SERVDEST:$PATHDEST"Informatique/"
    echo "" >> $LOGFILE
}
SauvegardeLivres(){
    echo "Sauvegarde du dossier Livres" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Livres/" $USER@$SERVDEST:$PATHDEST"Livres/"
    echo "" >> $LOGFILE
}
SauvegardeMusique(){
    echo "Sauvegarde du dossier Musique" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Musique/" $USER@$SERVDEST:$PATHDEST"Musique/"
    echo "" >> $LOGFILE
}
SauvegardePhotos(){
    echo "Sauvegarde du dossier Photos" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Photos/" $USER@$SERVDEST:$PATHDEST"Photos/"
    echo "" >> $LOGFILE
}
SauvegardePublic(){
    echo "Sauvegarde du dossier Public" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Public/" $USER@$SERVDEST:$PATHDEST"Public/"
    echo "" >> $LOGFILE
}
SauvegardeTelechargements(){
    echo "Sauvegarde du dossier Telechargements" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Telechargements/" $USER@$SERVDEST:$PATHDEST"Telechargements/"
    echo "" >> $LOGFILE
}
SauvegardeVideos(){
    echo "Sauvegarde du dossier Videos" >> $LOGFILE
    rsync -e "ssh -p $PORT" $OPTIONS $SOURCE"Videos/" $USER@$SERVDEST:$PATHDEST"Videos/"
}
FinFichier(){
    DATEFIN=$(date +%Y.%m.%d_%H.%M.%S)
    echo "Fin de la sauvegarde - $DATEFIN" >> $LOGFILE
}
EnvoiMail(){
    echo "La sauvegarde s'est terminée" | mutt -s "Sauvegarde réussie" -a $LOGFILE -- adressemail@fournisseur.fr
}
main(){
    DebutFichier
    SauvegardeHomes
    SauvegardeInformatique
    SauvegardeLivres
    SauvegardeMusique
    SauvegardePhotos
    SauvegardePublic
    SauvegardeTelechargements
    SauvegardeVideos
    FinFichier
    EnvoiMail
}
main
 



Il vous suffit ensuite de tester le script avant de passer à l'étape suivante.

Planification de la sauvegarde



Enfin, on planifie la sauvegarde avec un petit crontab -e et on ajoute la ligne qui va bien, pour mon exemple :

Code BASH :
30 3 * * 7 bash /srv/mergerfs/DATA/Informatique/Backups/Rsync_RPI/sauvegarde.sh


Me permet de faire ma sauvegarde toutes les semaines le lundi matin à 3h30.

Cette page a été vue 414 fois