Резервне копіювання Raspberry Pi автоматично, з покроковими резервними копіями


15

На цю тему є кілька різних питань та відповідей. Однак під час пошуку я не зміг знайти відповідь, яку можна було б вважати "канонічною" або яка збирає різні варіанти в одному місці.

Я хотів би створити резервну копію вмісту мого Raspberry Pi, щоб забезпечити повне відновлення, якщо це потрібно, легко і надійно.

Ці функції були б ідеальними:

  • Резервні копії, що зберігаються на зовнішньому місці (USB-накопичувач, DAS, NAS, мережевий комп'ютер тощо)
  • Автоматизація, поступово, або за допомогою планування
  • Нумерація версій резервних копій

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

Тож я припускаю, що гарне рішення використовує щось на кшталт rsyncабо, можливо, більш надійне, утиліту, яка може працювати з критерами вище.

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


На сайті Ubuntu довгий перелік варіантів резервного копіювання (в основному не для Ubuntu) askubuntu.com/questions/2596/comppare-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. Докладніше дивіться на /raspberrypi//a/28087/8697 .

Насправді у мене є трохи інші версії для резервного копіювання зображень Wheezy, Jessie та MATE (у різних каталогах).

Я намагався rsync на своєму Mac, але це лише частково спрацювало. Принципова проблема полягає в тому, що користувачі Mac і Pi не збігаються, не кажучи вже про відмінності між rsyncрізними платформами. Зі змінами безпеки в останній ОС 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

Ваше рішення DAS повинно легко адаптуватися до USB-накопичувача, підключеного до Pi, правда? Замість того, щоб перейматися налаштуванням мережевої резервної копії, я думаю просто зробити rsync на USB.
Winterflags

2

Якщо ви врахуєте ці два факти, це відкриє вам інші варіанти:

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

Так, так, є багато шляхів, які ви не хочете робити резервні копії. Ви уникаєте більшості з них, монтуючи свій основний розділ у 2-му каталозі. Інші по - , як і раніше є дані , які ви не хочете зробити резервну копію , як /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 @. Ось чому я написав raspiBackup, який дозволяє створювати резервні копії dd, tar та rsync на регулярній основі без винаходів користувача. Просто спробуйте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.