(modifié le 11 novembre 2021 à 22:58)

J'ai conçu un script bash permettant de sauvegarder rapidement les fichiers importants de mon Raspberry Pi vers mon NAS Synology.

Vous l'attendiez, voici enfin bm-PiBackup 🙂

Principe de fonctionnement

A partir d'une liste de fichiers et/ou de dossier le Raspberry crée une archive tar.gz qui est stockée sur un partage de fichiers CIFS (SMB) monté à la volée.

En effet il n'est pas rare qu'une carte microSD vous claque dans les doigts : aurevoir tous les scripts sympas ou les fichiers de configuration sur lesquels  vous avez passé des heures !

Le script est stocké sur mon github : backupToNas.sh (raw)

Téléchargez-le et ajoutez le droit d'exécution.

Variables

Modifiez les variables en début de script, à savoir :

  • PARTAGE : chemin CIFS (SMB)
  • PARTAGEMNT : point de montage local pour le partage (sera créé s'il n'existe pas)
  • PARTAGENAME : description purement visuelle et sans incidence sur le déroulement du script
  • USERNAME : nom d'utilisateur ayant le droit d'écrire sur le partage CIFS
  • PASSWORD : mot de passe de USERNAME

Ce partage peut bien sûr être tout et n'importe quoi, un Windows Server comme un NAS. C'est mon cas puisque mon Synology de backup assure ce rôle à la maison.

Pour éviter de saisir un identifiant / mot de passe en clair d'un compte important j'ai créé un compte dédié pour le Raspberry Pi. Ce compte a uniquement les droits lecture/écriture dans un partage dédié qui se nomme "pi_backup"ayant pour login "raspberry" et "backup" comme mot de passe.

Enfin il faut préciser les fichiers ou dossiers que vous souhaitez sauvegarder (l.90 environ). Le slash de fin n'est pas obligatoire mais peut vous aider à différencier les fichiers des dossiers. Le script contient des exemples :

tar zcf "$TAR" \
/etc/cron.daily \
/etc/cron.hourly \
/etc/cron.monthly \
/etc/init.d \
/etc/network/interfaces \
/etc/modules \
/etc/modprobe.d/ \
/etc/udev \
/etc/wpa_supplicant \
/var/www \
/home/pi \
/tmp/crontab \
/root/*.sh* \
/root/.bash* \
--exclude '/home/pi/Desktop' \
--exclude '/home/pi/motion' \
--exclude '/home/pi/photos' \
--exclude '/home/pi/homebridge' \
--exclude '/home/pi/.node-*' \
> /dev/null 2>&1

Pour éviter de surcharger le CPU du Pi vous pouvez faire des exclusions comme le montre les dernières lignes "--exclude". Le joker "*" étant supporté.

Vous remarquerez que je ne sauvegarde pas mon dossier root en totalité mais seulement les scripts sh et les fichiers ".bash*" (ex : .bash_profile, .bashrc etc.).

Résultat

Le résultat du backup sera stocké sous cette forme :

hostname_raspberryPi-AAAA-MM-JJ_HHhMM.tar.gz

Exemple :

domoPi-2017-05-15_22h09.tar.gz

L'archive de destination reprendra l'arborescence d'origine, c'est pourquoi j'aime beaucoup ce mode de fonctionnement.

MàJ 11/09/2018

Depuis peu la commande mount.cifs tente de se connecter en SMB version 3 par défaut.

Si votre Synology en face n'accepte pas SMB 3 vous aurez cette erreur :

"mount error(95): Operation not supported Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)"

J'ai donc ajouté un argument vers=2.0 pour forcer la connexion avec SMB version 2 pour des questions de compatibilité avec la plupart des partages CIFS.

Toutefois je vous recommande d'activer SMB3 dans DSM : Pann. de conf. > Service de fichiers > SMB/AFP/NFS > Paramètres Avances :

  • Protocole maximum = 3.0
  • Protocole minimum = 2.0

Valider avec "Appliquer" (implique un redémarrage des services associés).

Enfin si vous avez toujours l’erreur :

sudo apt install --reinstall cifs-utils -y && reboot

Conclusion

Je vous laisser tester et améliorer le script si besoin, j'ai mis un peu de couleur et le "OK!" apparaît vraiment au moment où l'action en question s'est réalisée. Avant j'ajoutais bêtement un "OK" à la ligne mais je trouve que c'est bien mieux intégré comme ça 🙂

Bien sûr ce script peut servir dans bien d'autres occasions et pas seulement avec un Raspberry Pi. Attention tout de même à la compression en tar.gz qui est assez consommatrice en ressources.

Vous pouvez aussi uploader ce backup avec cURL faire un backup complet de la carte microSD ou bien d'autres méthodes telles que rsync ou image-utils.

Avec un Raspberry Pi B+ connecté en WiFi 54 mbps le script sauvegarde 120 mo en 13 minutes (1850 fichiers).

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter