Sauvegardez Raspberry Pi automatiquement, avec des sauvegardes incrémentielles


15

Il existe différentes questions et réponses à ce sujet. Cependant, lors de la recherche, je n'ai pas pu trouver une réponse qui pourrait être considérée comme «canonique» ou qui regroupe les différentes options en un seul endroit.

Je voudrais sauvegarder le contenu de mon Raspberry Pi pour permettre une restauration complète si nécessaire, facilement et de manière fiable.

Ces fonctionnalités seraient idéales:

  • Sauvegardes conservées sur un emplacement externe (clé USB, DAS, NAS, ordinateur réseau, etc.)
  • Automatisation, incrémentielle ou via programmation
  • Numérotation des versions des sauvegardes

Le clonage de la carte SD semble être une solution populaire, mais selon ce post de Goldilocks, cela n'est pas recommandé car un clone contient des fichiers qui ne sont chargés que lors de l'exécution, etc.

Je suppose donc qu'une bonne solution utilise quelque chose comme rsyncou peut-être plus robuste, un utilitaire qui peut gérer les critères ci-dessus.

Ma situation particulière: j'ai un Raspberry Pi sur un LAN où je peux sauvegarder sur un ordinateur Mac OS X, un Synology DiskStation NAS ou sur une clé USB connectée au Raspberry. Je préférerais ne pas utiliser ce dernier.


Il y a une longue liste d'options de sauvegarde sur le site Ubuntu (principalement non spécifiques à Ubuntu) askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Réponses:


10

Rsnapshot remplit ces critères: 1

  • Peut être utilisé localement ou à distance.

  • Peut être automatisé / planifié.

  • Utilise des sauvegardes incrémentielles numérotées.

Je n'ai pas beaucoup d'expérience personnelle avec elle au-delà du fait qu'elle est utilisée sur des serveurs sur lesquels je travaille, où elle a sauvé la journée de temps en temps, mais il semble y avoir une belle introduction ici , le wiki Arch linux, qui a tendance à avoir une grande documentation, a une page (je suis sûr que la plupart de cela s'applique également aux autres distributions), et la page d'accueil fait référence à un HOWTO que je ne peux pas trouver en ligne, mais sa recherche a donné lieu à de nombreux tutoriels, discussions, etc. en plus de ces liens (le mode d'emploi réel peut être conservé hors ligne afin que les gens ne se trompent pas en utilisant le mauvais avec la mauvaise version).


  1. Bien qu'apparemment maintenant (2018), il peut ne pas être maintenu en faveur de BorgBackup .

Merci! Je vais le tester ce week-end et confirmer votre réponse si cela fonctionne.
Winterflags

1
Rsnapshot n'est plus maintenu. L' auteur d'origine est passé à l'utilisation de BorgBackup
lightswitch05

@ lightswitch05 Bon à savoir!
goldilocks

2

J'ai essayé plusieurs techniques de sauvegarde. J'en utilise 2 régulièrement.

Je clone la carte SD sur mon Mac et compresse l'image. Je l'utilise comme sauvegarde de sécurité ou pour créer des cartes en double. Je suis d'accord que ce n'est pas un idéal. Mon script est ci-dessous.

Plus fréquemment, j'utilise rsyncpour copier sur un disque dur connecté au Pi. Voir /raspberrypi//a/28087/8697 pour plus de détails.

En fait, j'ai des versions légèrement différentes pour sauvegarder les images Wheezy, Jessie et MATE (dans différents répertoires).

J'ai essayé de rsync sur mon Mac, mais cela n'a fonctionné que partiellement. Le problème fondamental est que les utilisateurs sur Mac et Pi ne correspondent pas, sans parler des différences entre rsyncles différentes plateformes. Avec les modifications apportées à la sécurité dans le dernier OS X, il y aurait probablement encore plus de problèmes.

J'ai utilisé avec succès un Pi pour faire une sauvegarde d'un autre sur un réseau.

Je ne sais pas comment cela fonctionnerait sur un NAS, mais je soupçonne qu'il peut y avoir des problèmes avec les liens physiques et les autorisations.

#!/bin/bash
# script to backup Pi SD card
# 2017-06-05
# DSK='disk4'   # manual set disk
OUTDIR=~/temp/Pi
# Find disk with Linux partition (works for Raspbian)
# Modified for PINN/NOOBS
export DSK=`diskutil list | grep "Linux" | sed 's/.*\(disk[0-9]\).*/\1/' | uniq`
if [ $DSK ]; then
    echo $DSK
    echo $OUTDIR
else
    echo "Disk not found"
    exit
fi

diskutil unmountDisk /dev/$DSK
echo please wait - This takes some time
echo Ctl+T to show progress!
time sudo dd if=/dev/r$DSK bs=4m | gzip -9 > $OUTDIR/Piback.img.gz

#rename to current date
echo compressing completed - now renaming
mv -n $OUTDIR/Piback.img.gz $OUTDIR/Piback`date +%Y%m%d`.img.gz

Votre solution DAS devrait être facilement adaptable à une clé USB connectée au Pi, non? Plutôt que de prendre la peine de configurer une sauvegarde en réseau, je pense simplement à faire rsync sur l'USB.
Winterflags

2

Si vous considérez ces 2 faits, cela vous ouvrira à d'autres options:

  1. Vous pouvez monter le même appareil dans plusieurs répertoires simultanément.
  2. Vous pouvez créer des tmpfsmontures où vous voulez masquer un répertoire.

Donc, oui, il existe de nombreux chemins que vous ne souhaitez pas sauvegarder. Vous évitez la plupart d'entre eux en montant votre partition principale dans un deuxième répertoire. D' autres encore ont des données que vous ne voulez pas sauvegarder comme /tmp, /devet /var/log.

Mon processus s'est déroulé comme ceci ...

  1. SSH dans le Raspberry Pi
  2. Monter exactement ce que je voulais sauvegarder

    sudo mount                     /dev/mmcblk0p2    /tmp/root/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/var/log/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/tmp/
    sudo mount                     /dev/mmcblk0p1    /tmp/root/boot/
    
  3. Quittez la machine
  4. Copiez les données via ssh + tar

    ssh pi@raspberry.local 'cd /tmp/root; sudo tar cf - * | gzip;' | pv > rpi.tgz
    # NOTE: The `pv` command gives you a progress meter but can be left out.
    
  5. Retirez les supports temporaires

    for m in /var/log/ /dev/ /boot/ /; do sudo umount /tmp/root${m}; done
    

Une fois que vous êtes satisfait des résultats, vous pouvez tout mettre dans un seul fichier comme ~/backup.sh

#!/bin/bash -eu

dir=$(mktemp -d)

cleanup(){
    cd /tmp/ # You can't umount or rm a directory while you are in it.
    for m in /dev/ /tmp/ /var/log/ /boot/ /; do
        sudo umount ${dir}${m}
    done
    rm -rf ${dir}
}

do_mounts(){
    sudo mount                     /dev/mmcblk0p2    ${dir}/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/tmp/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/var/log/
    sudo mount                     /dev/mmcblk0p1    ${dir}/boot/
}

send_data(){
    cd ${dir}; sudo tar cf - * | gzip | tee >(md5sum > /tmp/backup.md5);
}

give_feedback(){
    awk '{print "MD5:", $1}' < /tmp/backup.md5 >&2
}

trap cleanup EXIT INT TERM
do_mounts
send_data
give_feedback

Et appeler va comme ça ...

$ ssh pi@raspberry.local ./backup.sh | pv | tee rpi.tgz | md5sum | awk '{print "MD5:", $1}'
MD5: d3d9181374f3ec8e4e721c786eca9f71
 348MB 0:04:50 [ 1.2MB/s] [                 <=>                                ]
MD5: d3d9181374f3ec8e4e721c786eca9f71

CONSEIL: Pendant que vous expérimentez, passez tar cf - *à tar cf - etcpour vous faire gagner beaucoup de temps à chaque test.


2

J'ai eu le même problème avec mon Raspis @ home. C'est pourquoi j'ai écrit raspiBackup qui permet de créer des sauvegardes dd, tar et rsync sur une base régulière sans invention de l'utilisateur. Essayez-le.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.