Резервное копирование Raspberry Pi автоматически, с добавочным резервным копированием

15

Есть несколько разных вопросов и ответов на эту тему. Однако при поиске я не смог найти ответ, который можно было бы считать «каноническим» или который собирал различные варианты в одном месте.

Я хотел бы сделать резервную копию содержимого моего Raspberry Pi, чтобы обеспечить полное восстановление в случае необходимости, легко и надежно.

Эти функции будут идеальными:

  • Резервные копии хранятся на внешних носителях (USB-накопитель, DAS, NAS, сетевой компьютер и т. Д.)
  • Автоматизация, инкрементная или по расписанию
  • Нумерация версий резервных копий

Клонирование SD-карты, кажется, популярное решение, но согласно этому сообщению Goldilocks это не рекомендуется, потому что клон содержит файлы, которые загружаются только во время выполнения и т. Д.

Поэтому я предполагаю, что хорошее решение использует что-то вроде rsyncили, возможно, более надежно, утилиту, которая может обрабатывать критерии выше.

Моя конкретная ситуация: у меня Raspberry Pi в локальной сети, где я могу выполнить резервное копирование на компьютер Mac OS X, NAS-устройство Synology DiskStation или на карту памяти USB, подключенную к Raspberry. Я бы предпочел не использовать последний.

Winterflags
источник
На сайте Ubuntu есть длинный список параметров резервного копирования (в основном, не относящихся к Ubuntu) askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Ответы:

10

Rsnapshot удовлетворяет этим критериям: 1

  • Может использоваться локально или удаленно.

  • Может быть автоматизировано / запланировано.

  • Использует пронумерованные инкрементные резервные копии.

У меня нет особого личного опыта, за исключением того факта, что он используется на серверах, на которых я работаю, где он время от времени спасал, но, кажется, здесь есть хорошее введение , вики Arch linux, которая имеет большое значение документация, имеет страницу (я уверен, что большинство из них в равной степени применимо и к другим дистрибутивам), а домашняя страница ссылается на HOWTO, который я не могу найти в Интернете, но поиск по нему привел к многочисленным учебникам, дискуссиям и т. д. в дополнение к этим ссылкам (фактические инструкции могут храниться в автономном режиме, чтобы люди не запутались, используя неправильную версию с неправильной версией).


  1. Хотя, по-видимому, сейчас (2018 год) он может остаться без поддержки в пользу BorgBackup .
Златовласка
источник
Благодарность! Я протестирую это на этих выходных и подтвердлю ваш ответ, если получится.
Winterflags
1
Rsnapshot больше не поддерживается. Оригинальный автор перешел к использованию BorgBackup
lightswitch05
@ lightswitch05 Полезно знать!
Златовласка
2

Я пробовал несколько методов резервного копирования. Я использую 2 на регулярной основе.

Я клонирую SD-карту на моем Mac и сжимаю изображение. Я использую это как резервную копию или для создания дубликатов карт. Я согласен, что это не идеал. Мой скрипт ниже.

Чаще я использую rsyncдля копирования на HD, прикрепленный к Pi. См. Https://raspberrypi.stackexchange.com/a/28087/8697 для получения подробной информации.

На самом деле у меня есть несколько разные версии для резервного копирования образов Wheezy, Jessie и MATE (в разные каталоги).

Я попытался rsync для моего Mac, но это только частично сработало. Основная проблема заключается в том, что пользователи Mac и Pi не совпадают, не говоря уже о различиях между rsyncразличными платформами. С изменениями в безопасности в последней OS X у него, вероятно, будет еще больше проблем.

Я успешно использовал один Pi, чтобы сделать резервную копию другого по сети.

Я не знаю, как это будет работать с NAS, но подозреваю, что могут быть проблемы с жесткими ссылками и разрешениями.

#!/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
источник
Ваше решение DAS должно легко адаптироваться к USB-накопителю, подключенному к Pi, верно? Вместо того, чтобы беспокоиться о настройке сетевого резервного копирования, я думаю просто выполнить rsync для USB.
Winterflags
2

Если вы рассмотрите эти 2 факта, это откроет вам другие варианты:

  1. Вы можете монтировать одно устройство в несколько каталогов одновременно.
  2. Вы можете создать tmpfsмонтирование в любом месте, где хотите замаскировать каталог.

Итак, да, есть много путей, которые вы не хотите создавать резервные копии. Вы избегаете большинства из них, монтируя основной раздел во второй каталог. Другие по - прежнему есть данные , которые вы не хотите сделать резервную копию , как /tmp, /devи /var/log.

Мой процесс пошел так ...

  1. SSH в Raspberry Pi
  2. Смонтировать точно хочу, хочу бэкап

    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. Выход из машины
  4. Скопируйте данные через 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. Удалить временные крепления

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

Как только вы довольны результатами, вы можете поместить все это в один файл, например ~/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

И звонки идут так ...

$ 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

СОВЕТ: Пока вы экспериментируете, переключитесь tar cf - *на, tar cf - etcчтобы сэкономить кучу времени при каждом запуске теста.

Бруно Броноски
источник
2

У меня была такая же проблема с моим Raspis @ home. Вот почему я написал raspiBackup, который позволяет создавать резервные копии dd, tar и rsync на регулярной основе без пользовательских изобретений. Просто попробуйте.

framp
источник