mardi, 11 février 2014

Raspberry-pi : Sauvegarde ton pi

sauvegarde-donnees.jpegLa grande peur qui m'as terrifié pendant longtemps c'est de devoir tout recommencer sur mon raspberry pi, j'ai par mégarde déjà corrompu 4 fois ma SD soit par un reboot au mauvais moment soit une panne de courant et aussi sans avoir aucune idée.

Malheureusement le contenu est irrémédiablement perdu dans la plupart des cas. Fort heureusement des systeme permettent de faire des sauvegardes, d’ailleurs j'en avais parler dans le tuto du nas comment sauvegarder du contenu présent sur la carte SD sur le NAS ou encore de comment faire une copie de la carte SD dans mon premier tuto.

Mais dans le cas d'une corruption de la clé usb ou un problème avec celle ci, aucun backup ne pouvais ce faire et quand a sauvegarder la carte SD totalement c'est fort pratique pour restaurer tout mais cela prend du temps et nécessite de mettre offline le raspberry pi pour un certain moment. Vu que mon raspberry pi me sert de serveur domotique, je ne peu pas me permettre de le débrancher donc a présent je reviens vers vous avec un script qui sauvegardera en archives .zip votre dossier home ainsi que www directement sur le nas ainsi que tout fichiers important ou script que vous avez crée.


Ce tuto vous permettra de sauvegarder sur un raspberry avec samba ou sur un Nas votre contenu grâce a cifs-utils qui permet de monter des partages de dossier sous Linux, concrètement, cela vous permettra si vous avez un stockage réseau lié raspberry d'accéder a vos dossier présent sur le stockage réseau depuis votre Raspberry. Si vous suivez la logique, cela permettra donc d'envoyer nos backup générer sur le rapsberry à partir du rapberry vers le NAS.

Montage de l'emplacement de sauvegarde

Donc dans un premier temps vous devez allez sur la machine qui vous servira de stockage (votre 2eme raspberry pi ou votre serveur NAS), une fois sur la machine crée un dossier qui vous servira de point de sauvegarde, si vous avez appeler Vos raspberry, crée un dossier par celui la, moi dans mon cas j'ai un dossier "Raspberry".

Une fois le dossier crée on va crée un point de montage sur le PI qui porte le même nom se sera plus simple de déterminer le montage après donc on fait 

sudo mkdir /mnt/Raspberry

Ensuite, une fois que c'est fait, on va s'assuré que le cifs soit bien installer via la commande suivante, mais moi sur mon PI c'était déjà le cas, mais sur le votre je ne sais pas.

sudo apt-get install cifs-utils

donc ensuite pour un montage occasionnel pour tester il suffit de faire : 

sudo mount.cifs //192.168.1.44/Raspberry /mnt/Raspberry

A ce moment, normalement Si vous allez dans le Dossier Downloads et verifiez les fichiers via "ls" vous devriez voir les fichiers présent dans le disque Réseau.

Bien sur, pour démonté, suffit juste de faire 

umount /mnt/Raspberry/

J'en vois deja certains arriver en me disant que le dossier il est pas public et que ça marche pas, donc il faut faire par exemple ceci

mount.cifs //192.168.1.44/Raspberry /mnt/Raspberry -o user=viskor,pass=viskor

Maintenant, ce serais quand même mieux si tout ça était monter au boot non? rien de plus simple, il suffit d'aller dans le FSTAB

sudo nano /etc/fstab

Voici la ligne a rajouter en fin de fichier, une fois cela fait, un petit reboot pour tester si tout est OK!

//192.168.1.44/Raspberry /mnt/Raspberry cifs  username=viskor,password=viskor  0  0

 Une fois que le raspberry monte automatiquement le dossier ou doivent se mettre les sauvegardes on peu passer a la création du script.

Script de Sauvegarde

Pour notre script on va utiliser zip pour zipper donc on l'installe 

sudo apt-get install zip unzip

On peu placer le script n'importe ou, mais nous on va le placer dans le /usr/bin car cela nous permettra de lancer le script juste en tapant le nom, donc on va tout simplement aller sans /usr/bin puis crée le script qui nous permettra de faire tout de façon automatique

cd /usr/bin
sudo nano save-www

Pour ma part j'ai crée plusieurs variantes, vu que je m'en sert de serveur web et domotique via le www, j'ai crée un premier script qui créera un fichier du style : "2014-02-10-www.zip" par la suite je rajouterais en crontab le script save-nas pour faire une sauvegarde tout les 3 jours du www.

#!/bin/bash

DATE=`date +"%Y-%m-%d"`

cd /mnt/Raspberry

sudo zip -r $DATE-www.zip /var/www

Certains dossier sont gros et ne nécésite pas forcement de sauvegarde tout les 3 jours, c'est notament le cas de mon /home qui fait 60mb donc cela prend beaucoup de temps pour sauvegarder, donc on va crée un nouveau script qui lui aura pour usage de faire une sauvegarde mensuellement mais rien ne vous empêche d'ajouter d'autre dossier qui doivent être sauvegarder tout les mois, il suffira d'adapter la ligne du zip a votre convenance, pour crée le script vu qu'on est toujours dans /usr/bin on tape tout simplement

sudo nano save-home

voici mon script pour le /home, comme vous pouvez le voir je n'ai mis que l'année et le mois pour la sauvegarde pour qu'il remplace d’éventuelle sauvegarde déjà faite pour le mois en cours

#!/bin/bash

DATE=`date +"%Y-%m"`

cd /mnt/Raspberry

sudo zip -r $DATE-home.zip /home/pi

Ensuite on va rendre le tout exécutable

sudo chmod 777 save-www
sudo chmod 777 save-home

Donc maintenant que les scripts sont fonctionnel, on peu simplement les lancer en faisant 'save-www' mais pour que cela se fasse automatique on va le rajouter au crontab via la commande

crontab -e

pour ma part j'ai choisit de faire tout les mois pour le save-home et tout les 3 jours pour le save-www(vu que je code beaucoup) donc on inscrit ceci a la fin a la fin du crontab

22 22 22 * * save-home
20 21 */3 * * save-www

Pour ceux qui n'ont pas compris, en bref tout les 22 a 22h22 mon /home/pi s'archivera et tout les 3 jours a 20h21 se sera le /var/www, maintenant on vérifie que tout c'est bien passer via crontab -l et ci c'est le cas le tour est jouer.

script pour backup sql

Si vous voulez vous rajouter des scripts en plus pas de soucis, par exemple je vais me faire un script pour la sauvegarde de ma base sql toutes les 5 heures sur mon nas (car j'ai perdu 3 jours de donnée lors du crash de ma SD), de ce fait 

cd /usr/bin
sudo nano save-sql

voici mon script pour le backup du sql, comme vous pouvez le voir je n'ai mis que l'année, mois et jour pour la sauvegarde pour qu'il remplace d’éventuelle sauvegarde déjà faite pour le jours en cours et ainsi mettre 1 seul backup par jour puis par la suite je créerais un script pour ne garder que les 3 plus récents. Donc pour ma part je vais sauver 2 base de donnée maintenant j'aurais pu en mettre 3 ou 4 mais je n'ai que 2 DB.

#!/bin/bash

DATE=`date +"%Y-%m-%d"`

cd /mnt/Raspberry

sudo zip -r $DATE-sql.zip /var/www/tmp/temp.db /var/www/hcc2/temp.db

Ensuite on va rendre le tout exécutable

sudo chmod 777 save-sql

Donc maintenant que le script se lance on peu simplement le lancer en faisant 'save-sql' mais pour que cela se fasse automatique on va le rajouter au crontab via la commande

crontab -e

pour ma part j'ai choisit de faire toutes les 5 heures pour le save-sql donc on inscrit ceci a la fin a la fin du crontab

15 */5 * * * save-sql

 

Script de sauvegarde des config

Il y a quelques fichiers qu'on a eu du mal a être configuré, je parle du nginx, minidlna, samba, torrent, jdownloader, fail2ban, fstab ... En bref plein de petit fichier un peu cacher partout, donc j'ai eu l'idée de faire un script allant copier chaque fichier dans mon /home/pi pour me permettre d'avoir une sauvegarde de mes configuration dans le cas ou j'en rate une, ou encore d'avoir une archive sur mon NAS dans le cas ou le pire arriverai.

Donc on va crée un le dossier dans le home de pi ou se copiera les cfg comme cela chaque mois j'ai une sauvegarde en plus de ma sauvegarde.

sudo mkdir /home/pi/save

Ensuite on va crée le script

cd /usr/bin
sudo nano save-cfg

Bon le plus dur c'est de se rappeler ou sont situé tout les cfg qu'on a pu modifier, pour ma part c'est plus simple vu que mes fichier de config sont en fait les cfg de tout mes tutos.

#!/bin/bash

DATE=`date +"%Y-%m"`
DATE2=`date +"%Y-%m-%d"`

sudo rm -R /home/pi/save/$DATE-cfg
sudo mkdir /home/pi/save/$DATE-cfg
cd /home/pi/save/$DATE-cfg
sudo mkdir script
sudo chmod -R 777 /home/pi/save



cp /etc/network/interfaces $DATE-network-interfaces
cp /etc/nginx/sites-available/default $DATE-nginx-default
cp /etc/fstab $DATE-fstab
cp /etc/samba/smb.conf $DATE-smb.conf
cp /etc/raspcontrol/database.aptmnt $DATE-raspcontrol-database.aptmnt
cp /etc/minidlna.conf $DATE-minidlna.conf
cp /home/pi/.vnc/xstartup $DATE-xstartup
cp /etc/transmission-daemon/settings.json $DATE-transmission-settings.json
cp /etc/fail2ban/jail.conf $DATE-jail.conf
cp /var/www/hcc2/temp.db $DATE2-temp.db

cd script

cp /etc/init.d/tightvncserver $DATE-tightvncserver
cp /etc/init.d/launchnoip $DATE-lauchnoip
cp /usr/bin/temperature $DATE-temperature
cp /usr/bin/temperatureext $DATE-temperatureext
cp /usr/bin/temperaturesalon $DATE-temperaturesalon
cp /usr/bin/ephemeride $DATE-ephemeride
cp /usr/bin/save-www $DATE-save-www
cp /usr/bin/save-home $DATE-save-home
cp /usr/bin/save-sql $DATE-save-sql
cp /usr/bin/save-cfg $DATE-save-cfg


cd /mnt/Raspberry 
sudo zip -r $DATE-cfg.zip /home/pi/save/$DATE-cfg

Ensuite on va rendre le tout exécutable

sudo chmod 777 save-cfg

J'ai rajouter les scripts que j'utilise pour mon systeme de domotique pour toujours avoir une version du script, mais si vous avez aussi des scripts exécutable a sauvegarder vous pouvez adapter en vous basant sur celui ci, mais ne faite pas un simple copier/coller de mon script, il faut impérativement que vous l'adaptiez a vos paramètre a vous! Voici ce que j'obtient comme résultat

Capture d'écran 2014-02-11 12.17.07.png

Et sur mon NAS sa ressemnble a ceci

Capture d'écran 2014-02-11 12.21.22.png

Une fois le script fini et fonctionnel parfaitement vous pouvez faire un crontab pour que le script se lance tout les mois dans un soucis de simplicité j'ai choisit de faire le 23 de chaque mois a 23h23 et il suffit de rajouter en fin de crontab cette commande 

23 23 23 * * save-cfg

J'espère que ce tuto vous aura aider dans le cas ou vous voulez sauvegarder votre raspberry sans avoir a faire une copie intégrale de votre carte SD

Je vais centraliser les informations du premier post ici pour avoir plus simple et tout avoir sur la même page.

 

 

Sauvegarde de l’âme de pi(via Win32 Disk imager)

Si tout comme moi vous avez peur de tout perdre, ce que vous avez mis des jours a crée, vous allez aimer ce que je vais vous apprendre, vous avez déjà le logiciel pour faire la sauvegarde de la carte SD

wB2kEkm.png

il vous suffira d'introduire un nom en cliquant sur le dossier bleu, par exemple "Raspbian-config-viskor.img" bien choisir le lecteur de la carte SD puis faire [READ] vous aurez alors un fichier .img :)

Restaurer l'âme de Pi(via Win32 Disk imager)

C'est tout simple, vous rechercher via le dossier bleu l'img que vous avez sauver, ensuite vous sélectionner le bon lecteur et vous cliquer sur [Write] l'avantage? c'est qu'on peu ecrire sur une autre carte SD, pour ma part j'ai 2 carte SD clone, une de 4 go ou j’installe le définitif et une de 8 go ou je fais les test, si la 8go foire ou deviens instable je restaure une vielle version ou je reprend la version qui est sur ma carte de 4 go, l'avantage d'avoir 2 système les même c'est que je ne suit pas embarrasser si mes système de webserver ne marche plus suite a une SD défectueuse, car j'ai eu l'erreur de mettre tout sur une seule SD, mais suite a une panne de courant la carte SD avait des fichiers morts et j'ai du tout recommencer, donc maintenant je fais ainsi et j'ai plus de problème.

Copier l'image du Pi(Depuis le raspberry)

Si vous allez entreprendre quelque choses qui pourais etre dangereux ou qui dois etre fait dans l'imédiat sans que votre raspberry pi ne doivent etre eteint vous pouvez normalement faire une copie de la partition systeme grace a cette commande

sudo dd if=/dev/mmcblk0 | gzip -9 > /mnt/1USB/Backup/pi-sauvegarde.img.gz

Il va de soit que vous devez faire cette commande en direction d'un endroit qui a l'espace suffisant pour faire la copie, dans mon cas ici j'ai pris /mnt/1USB qui est l'endroit ou j'ai monter ma clé USB

 

Mise a jour: j'avais oublier quelques commandes donc quand j'ai reinstaller les scripts j'ai adapter le tuto.

Écrit par Viskor dans Astuces, Raspberry-Pi |  Facebook | |