[TUTORIEL] Faire de la sauvegarde / restauration en mode Snapshot de TOUT son yunohost avec raspiBackup.sh

Juste un petit mot d’abord pour remercier l’équipe derrière Yunohost.
C’est vraiment un chouette outil.
Bravo !

(english version here)

Alors, cela va faire un peu plus d’un an que j’utilise Yunohost et ses applications :

  • Nextcloud (et quelques app, calendrier, phone tracker, notes)
  • Wallabag
  • ttrss
  • Les emails (+ synchronisés sur mon smartphone, c’est bien cool)
  • Etherpad
  • Matrix-Synapse (pour remplacer Whatssap)
  • le hotspot WiFi

J’avais aussi quelques besoins spécifiques qui ne sont pas présents dans Yunohost donc j’y ai installé quelques trucs en plus :

  • Le client OpenVpn qui prend en charge le fichier de config client.ovpn standard (et qui du coup fonctionne avec le Hotspot WiFi comme sur une brique internet)

  • Un service qui difuse sur la sortie audio (sur laquelle est branchée à un petit emmeteur FM qui arose tout l’appart…) en permanence des radios françaises (vivant à l’étranger c’est vraiment très appréciable d’avoir FIP, France Culture, etc)

  • Un serveur de musique MPD. C’est un programme qui lit la musique / podcasts sur le serveur (qui l’envoie sur la sortie audio du raspberry) et qui se commande un peu comme une télécommande améliorée depuis une application client (smartphone ou ordinateur)

  • Un petit menu qui s’affiche lorsque je (ou madame) se connecte en ssh depuis le smartphone et qui permet de changer de radio, rebooter / arrêter la machine, etc. en 3 secondes.

Pour faire ça je me suis débrouillé à l’aide de petits scripts, de services systemd mis en place ou autres.
Au final c’est vrai que ça n’a pas l’air de grand chose mais pour avoir eu l’occasion de ré-installer le Yunohost en repartant de zéro : Ça représente quand même quelques heures de boulot et quelques jours pour affiner les réglages (il y a toujours le petit truc auquel on a pas pensé, etc.).

Le système de sauvegarde de Yunohost est très bien mais ne me convenait pas à 100% parce que :

  1. En cas de gros pépin qui oblige à réinstaller l’OS (carte SD corrompue, autre…), il faut d’abord ré-installer le système Yunohost avant de pouvoir restaurer; Donc du temps passé à retrouver ou télécharger l’image, la flasher, mettre à jour le système…
  2. Cela ne prenait pas en compte mes petites applications et services extra-yunohost qui prennent quelques heures à installer.

En cherchant je suis tombé sur raspiBackup (le site web est un peu old school)
Je vous laisse lire la page du script pour les détails, mais voilà grosomodo ce ce qui m’a séduit :

  • Il sauvegarde tout le système, absolument tout : Les données, le système, sa configuration, enfin tout quoi, comme un snapshot général.

  • On peut choisir entre plusieurs types de de sauvegarde dont rsync (il y a aussi dd, tar, etc) qui permet :

    1. les sauvegardes par duplication (il ne sauvegarde que les différences donc c’est très rapide et prend peu de place) et
    2. de pouvoir restaurer qu’un seul fichier/répertoire très facilement (avec un tout simple cp /chemin/sauvegarde/fichier /là/où/on/veut/le/restaurer/fichier)
  • La restauration de tout le système en une seule commande. Et c’est là que pour moi c’est intéressant : J’ai fais une boulette en installant une mauvaise app qui a tout fait foiré, ma carte SD est fichue suite à une coupure de courant, bref j’ai besoin de restaurer mon système, et bien le script peut flasher sur une carte SD tout le système (avec les différentes partitions, etc.) exactement comme il était depuis une sauvegarde on the fly :slight_smile: en une seule commande.

Alors, les désavantages :

  • Les sauvegardes ne sont pas chiffrées

  • Pour pouvoir sauvegarder tout le système, le script arrête les services, ce qui rend le Yunohost hors service le temps de la sauvegarde, et les relance après. Donc il faut que le Yunohost puisse être indisponible pendant quelques minutes (tout dépend bien sûr de la quantité de données à sauvegarder) une fois par jour (la nuit c’est bien) pendant la sauvegarde.

Comment ça se passe ?

Avant tout : Faite une image de votre système pour pouvoir repartir de là si vous foirez un truc.

La documentation d’installation à jour du site officiel est là.
Mais en gros :

  • On télécharge et exécute le script d’installation (différent du script de sauvegarde lui même)
  • On choisit le type de sauvegarde (rsync, dd, ou tar…)
  • On choisit l’emplacement de la sauvegarde (un disque dur externe, un montage nfs, etc.)
  • On choisir les services et surtout l’ordre dans lequel ils sont arrêtés / redémarrés : Pour ne rien foirer j’ai fait un reboot du serveur puis suis allé voir dans le syslog avec un petit tail -n 500 /var/log/syslog puis j’ai repéré les logs liées au reboot, qui ressemblent à ça :
Jan 13 07:56:48 box systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 13 07:56:48 box systemd[1]: Starting Fail2Ban Service...
Jan 13 07:56:48 box systemd[1]: Starting YunoHost Firewall...
Jan 13 07:56:48 box systemd[1]: Starting Synapse Matrix homeserver...
Jan 13 07:56:48 box systemd[1]: Starting YunoHost VPN Client....
Jan 13 07:56:48 box systemd[1]: Started Etherpad-lite, the collaborative editor..
Jan 13 07:56:48 box systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Jan 13 07:56:48 box systemd[1]: Starting coturn...
Jan 13 07:56:48 box systemd[1]: Started Music Player Daemon.
Jan 13 07:56:48 box systemd[1]: Starting MariaDB 10.1.38 database server...
Jan 13 07:56:48 box systemd[1]: Reached target Network is Online.
Jan 13 07:56:48 box systemd[1]: Mounting /mnt/podcasts...
Jan 13 07:56:48 box systemd[1]: Starting /etc/rc.local Compatibility...
Jan 13 07:56:48 box systemd[1]: Started Just plays FIP.
Jan 13 07:56:48 box systemd[1]: Started client OpenVPN.
Jan 13 07:56:48 box systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Jan 13 07:56:48 box systemd[1]: Started YunoHost API Server.
Jan 13 07:56:48 box systemd[1]: Starting Advanced key-value store...
Jan 13 07:56:48 box systemd[1]: Started /etc/rc.local Compatibility.
Jan 13 07:56:48 box systemd[1]: Started OpenBSD Secure Shell server.
Jan 13 07:56:48 box systemd[1]: Stopped VNC Server in Service Mode daemon.
Jan 13 07:56:48 box systemd[1]: Started VNC Server in Service Mode daemon.

Et je me suis basé là dessus pour l’ordre dans lequel le script arrête / redémarre les services.
Aussi, mettez à jour cette liste dès lors que vous rajoutez / désinstallez une application Yuinohost (1 application = 1 ou plusieurs services).

Pour retourner dans la configuration il faut relancer le script d’installation :
sudo raspiBackupInstallUI.sh

Une fois que tout est réglé, on lance le script avec la commande :
sudo raspiBackup.sh

Et c’est parti.
La première sauvegarde est longue parce que tout le système est sauvegardé, les suivantes sont plus courtes parce que seules les différences le sont.

Lorsque l’on a trouvé les bons réglages et que tout fonctionne, on peut rajouter un tache dans le cron pour que la sauvegarde se réalise toutes les nuits.

Moi j’alterne mes sauvegardes sur 2 clés USB.
J’en laisse en permanence une branchée sur le Yunohost et l’autre en sécurité au boulot.

N’hésitez pas à faire des retours (bons ou mauvais).

A + !

1 Like