[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 + !

3 Likes

Super, merci. As-tu essayé de restaurer et si oui cela a-t-il marché ? Je suppose que dans le cas d’une installation avec le boot sur un Pi et le reste de Yunohost sur un hdd attaché au Pi cela va compliquer les choses…si je veux faire une sauvegarde…

Salut,

Oui j’ai déjà essayé de restauré, plusieurs fois, et ça fonctionne nickel.

Le script est capable de prendre en compte ta config, regarde la documentation sur le site.
A +

1 Like

Bonjour,
Tout d’abord merci pour le partage :slightly_smiling_face:
Dans l’exemple que tu prends pour la restauration de tout le système, à savoir avec une carte SD fichue, comment t’y prends-tu pour restaurer? Faut il installer yunohost avant, puis le script, et choisir de restaurer via une option? Ou est-ce réalisable directement à partir de la sauvegarde? Ou simplement installer raspbian, le script, puis restaurer?

Salut,
En fait le gars qui a fait le script précise qu’il faut mieux lancer la restauration depuis le même système que celui sur lequel a été fait la sauvegarde.
Donc tout dépend de sur quoi tourne ton Yunohost.

Chez moi, cela tourne sur un raspberry, avec l’image fournie par Yunohost (donc Raspian), donc j’ai lancé mes restaurations depuis ce système sur une autre carte SD.

Cela veut dire que si jamais ta carte SD foire pour de vrai, il faudra 2 cartes SD supplémentaires :
-1 carte SD pour y mettre raspian (si possible, la version fournie par Yunohost, comme ça c’est exactement le même système que celui qui a fait la sauvegarde) ET le scrpit raspi-backup
-1 carte SD sur laquelle la restauration sera écrite.

Bonne journée !

1 Like

Merci pour les précisions, cependant j’ai des doutes sur les services à arrêter. Il y a par exemple Starting Advanced key-value store que je ne sais pas ce que c’est et pleins de services qui apparaissent dans le script que je ne sais pas si je dois les arrêter (atd,nscd, triggerhappy,postsrsd, etc…)
J’en profite pour te demander si synapse/matrix fonctionne bien sur raspberry et si oui, quelles fonctions? je n’ai jamais essayé synapse/matrix mais j’ai cru comprendre que ça faisait messagerie instantanée mais également visio-conférence ou appel audio. En l’occurrence c’est la visio-conférence à 2 utilisateurs qui m’intéresse.

Pour les services à arrêter, c’est un mélange de bon sens, de tests et de recherches sur google.

Tu peux te baser sur tail -n 500 /var/log/syslog que tu lances juste après un reboot.

Oui, Matrix-Synaspe fonctionne sur un raspberry 3+ pour de la messagerie instantannée chiffrée de bout en bout.
Je ne m’en sers pas pour des appels voix ou vidéo.

Bon courage !

1 Like