Automatycznie twórz kopie zapasowe Raspberry Pi z przyrostowymi kopiami zapasowymi

15

Istnieje kilka różnych pytań i odpowiedzi na ten temat. Jednak podczas wyszukiwania nie byłem w stanie znaleźć odpowiedzi, którą można by uznać za „kanoniczną” lub która gromadziłaby różne opcje w jednym miejscu.

Chciałbym wykonać kopię zapasową zawartości mojego Raspberry Pi, aby umożliwić pełne przywrócenie w razie potrzeby, łatwo i niezawodnie.

Te funkcje byłyby idealne:

  • Kopie zapasowe przechowywane w lokalizacji zewnętrznej (pamięć USB, DAS, NAS, komputer sieciowy itp.)
  • Automatyzacja przyrostowa lub poprzez harmonogram
  • Numeracja wersji kopii zapasowych

Klonowanie karty SD wydaje się być popularnym rozwiązaniem, ale zgodnie z tym postem Goldilocks nie jest to zalecane, ponieważ klon zawiera pliki, które są ładowane tylko w czasie wykonywania itp.

Zakładam więc, że dobre rozwiązanie wykorzystuje coś podobnego rsynclub być może bardziej niezawodnego, narzędzie, które poradzi sobie z powyższą krytyką.

Moja szczególna sytuacja: mam Raspberry Pi w sieci LAN, gdzie mogę wykonać kopię zapasową na komputerze Mac OS X, Synology DiskStation NAS lub na karcie pamięci USB podłączonej do Raspberry. Wolałbym nie używać tego drugiego.

Winterflags
źródło
Na stronie Ubuntu znajduje się długa lista opcji tworzenia kopii zapasowych (głównie nie związanych z Ubuntu) askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Odpowiedzi:

10

Rsnapshot spełnia następujące kryteria: 1

  • Może być używany lokalnie lub zdalnie.

  • Może być zautomatyzowany / zaplanowany.

  • Wykorzystuje numerowane przyrostowe kopie zapasowe.

Nie mam z tym większego osobistego doświadczenia poza faktem, że jest on używany na serwerach, na których pracuję, gdzie od czasu do czasu oszczędzał dzień, ale wydaje się, że jest tutaj miłe wprowadzenie , wiki Arch linux, która zwykle ma świetne dokumentacja, ma stronę (jestem pewien, że większość z nich odnosi się równie dobrze do innych dystrybucji), a strona główna odnosi się do HOWTO, którego nie mogę znaleźć w Internecie, ale po jej wyszukaniu pojawiły się liczne samouczki, dyskusje itp. oprócz tych linków (faktyczne instrukcje mogą być trzymane w trybie offline, aby ludzie nie mylili się przy użyciu niewłaściwego z niewłaściwą wersją).


  1. Chociaż najwyraźniej teraz (2018) może być nieobsługiwany na korzyść BorgBackup .
Złotowłosa
źródło
Dzięki! Przetestuję to w ten weekend i potwierdzę twoją odpowiedź, jeśli się uda.
Winterflags,
1
Rsnapshot nie jest już utrzymywany. Oryginalny autor włączony do korzystania BorgBackup
lightswitch05
@ lightswitch05 Dobrze wiedzieć!
Złotowłosa
2

Wypróbowałem kilka technik tworzenia kopii zapasowych. Używam 2 regularnie.

Klonuję kartę SD na komputerze Mac i kompresuję obraz. Używam tego jako kopii bezpieczeństwa lub do tworzenia duplikatów kart. Zgadzam się, że to nie jest ideał. Mój skrypt jest poniżej.

Częściej używam rsyncdo kopiowania na HD załączony do Pi. Szczegółowe informacje można znaleźć na stronie /raspberrypi//a/28087/8697 .

W rzeczywistości mam nieco inne wersje do tworzenia kopii zapasowych obrazów Wheezy, Jessie i MATE (do różnych katalogów).

Próbowałem zsynchronizować rsync z komputerem Mac, ale to tylko częściowo zadziałało. Podstawowym problemem jest to, że użytkownicy komputerów Mac i Pi nie pasują, nie mówiąc już o różnicach między rsyncróżnymi platformami. Przy zmianach bezpieczeństwa w najnowszym systemie OS X prawdopodobnie miałby jeszcze więcej problemów.

Z powodzeniem wykorzystałem jedno Pi do wykonania kopii zapasowej drugiego w sieci.

Nie wiem, jak to by działało na serwerze NAS, ale podejrzewam, że mogą występować problemy z hardlinkami i uprawnieniami.

#!/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
Milliways
źródło
Twoje rozwiązanie DAS powinno być łatwe do dostosowania do pamięci USB podłączonej do Pi, prawda? Zamiast zawracać sobie głowę konfigurowaniem sieciowego backupu, myślę o rsync na USB.
Winterflags
2

Jeśli weźmiesz pod uwagę te 2 fakty, otworzysz się na inne opcje:

  1. Możesz zamontować to samo urządzenie w wielu katalogach jednocześnie.
  2. Możesz tworzyć tmpfswierzchowce gdziekolwiek chcesz zamaskować katalog.

Tak, istnieje wiele ścieżek, których nie chcesz tworzyć kopii zapasowej. Większość z nich można uniknąć, instalując partycję podstawową w drugim katalogu. Inni nadal będą mieć dane, których nie chcesz tworzyć kopii zapasowej/tmp , /devi /var/log.

Mój proces przebiegał tak ...

  1. SSH do Raspberry Pi
  2. Zamontuj dokładnie, co chciałem wykonać kopię zapasową

    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. Wyjdź z maszyny
  4. Skopiuj dane poprzez ssh + tar

    ssh [email protected] '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. Usuń tymczasowe mocowania

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

Gdy jesteś zadowolony z wyników, możesz umieścić wszystko w jednym pliku, takim jak ~/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

A dzwonienie przebiega w ten sposób ...

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

WSKAZÓWKA: Podczas eksperymentów zmień tar cf - *na, tar cf - etcaby zaoszczędzić sporo czasu na każdym uruchomieniu testowym.

Bruno Bronosky
źródło
2

Miałem ten sam problem z moim Raspis @ home. Dlatego napisałem raspiBackup, który pozwala regularnie tworzyć kopie zapasowe dd, tar i rsync bez inwencji użytkownika. Po prostu daj temu szansę.

framp
źródło