Sao lưu Raspberry Pi tự động, với các bản sao lưu gia tăng


14

Có một số câu hỏi và câu trả lời khác nhau về chủ đề này. Tuy nhiên, khi tìm kiếm tôi đã không thể tìm thấy một câu trả lời có thể được coi là "chính tắc" hoặc tập hợp các tùy chọn khác nhau ở một nơi.

Tôi muốn sao lưu nội dung của Raspberry Pi để cho phép khôi phục hoàn toàn nếu cần, dễ dàng và đáng tin cậy.

Những tính năng này sẽ rất lý tưởng:

  • Sao lưu được giữ ở vị trí bên ngoài (USB, DAS, NAS, Mạng máy tính, v.v.)
  • Tự động hóa, tăng dần hoặc thông qua lập kế hoạch
  • Đánh số phiên bản của bản sao lưu

Nhân bản thẻ SD dường như là một giải pháp phổ biến, nhưng theo bài đăng này của Goldilocks thì điều này là không nên vì một bản sao chứa các tệp chỉ được tải trong thời gian chạy, v.v.

Vì vậy, tôi giả định rằng một giải pháp tốt sử dụng một cái gì đó giống như rsynchoặc có thể mạnh mẽ hơn, một tiện ích có thể xử lý các phê bình ở trên.

Tình huống cụ thể của tôi: Tôi có Raspberry Pi trên mạng LAN nơi tôi có thể sao lưu vào máy tính Mac OS X, NAS Synology DiskStation hoặc vào thẻ nhớ USB được kết nối với Raspberry. Tôi không muốn sử dụng sau này.

Câu trả lời:


10

Rsnapshot đáp ứng các tiêu chí đó: 1

  • Có thể được sử dụng tại địa phương hoặc từ xa.

  • Có thể được tự động / theo lịch trình.

  • Sử dụng các bản sao lưu gia tăng được đánh số.

Tôi không có nhiều kinh nghiệm cá nhân với nó ngoài thực tế là nó được sử dụng trên các máy chủ mà tôi làm việc, nơi nó thỉnh thoảng lưu lại, nhưng dường như có một giới thiệu hay ở đây , wiki Arch linux, có xu hướng rất tuyệt tài liệu, có một trang (tôi chắc chắn rằng hầu hết những điều này cũng áp dụng tương tự cho các bản phát hành khác) và trang chủ đề cập đến một CÁCH mà tôi không thể tìm thấy trên mạng, nhưng việc tìm kiếm nó đã xuất hiện rất nhiều hướng dẫn, thảo luận, v.v. ngoài các liên kết này (cách thực hiện có thể được giữ ngoại tuyến để mọi người không bị nhầm lẫn khi sử dụng sai với phiên bản sai).


  1. Mặc dù rõ ràng bây giờ (2018), nó có thể không được biết đến để ủng hộ BorgBackup .

Cảm ơn! Tôi sẽ kiểm tra nó vào cuối tuần này và xác nhận câu trả lời của bạn nếu nó hoạt động.
Winterflags

1
Rnapshot không còn được duy trì. Các tác giả ban đầu chuyển sang sử dụng BorgBackup
lightswitch05

@ lightwitch05 Tốt để biết!
goldilocks

2

Tôi đã thử một số kỹ thuật sao lưu. Tôi sử dụng 2 một cách thường xuyên.

Tôi sao chép thẻ SD trên máy Mac của mình và nén hình ảnh. Tôi sử dụng điều này như một bản sao lưu bảo mật hoặc để tạo các thẻ trùng lặp. Tôi đồng ý đây không phải là một lý tưởng. Kịch bản của tôi là dưới đây.

Thường xuyên hơn, tôi sử dụng rsyncđể sao chép sang HD được gắn vào Pi. Xem /raspberrypi//a/28087/8697 để biết chi tiết.

Trong thực tế, tôi có các phiên bản hơi khác nhau để sao lưu hình ảnh Wheezy, Jessie và MATE (vào các thư mục khác nhau).

Tôi đã cố gắng rsync với máy Mac của mình, nhưng điều này chỉ hoạt động một phần. Vấn đề cơ bản là người dùng trên Mac và Pi không khớp nhau, chưa kể đến sự khác biệt giữa rsynccác nền tảng khác nhau. Với những thay đổi về bảo mật trong OS X mới nhất, có lẽ sẽ còn nhiều vấn đề hơn nữa.

Tôi đã sử dụng thành công một Pi để tạo bản sao lưu của một mạng khác qua mạng.

Tôi không biết làm thế nào điều này sẽ hoạt động với một NAS, nhưng nghi ngờ có thể có vấn đề với các liên kết cứng và quyền.

#!/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

Giải pháp DAS của bạn có thể dễ dàng thích ứng với thanh USB được kết nối với Pi, phải không? Thay vì bận tâm về việc thiết lập một bản sao lưu được nối mạng, tôi nghĩ đơn giản là thực hiện rsync với USB.
Winterflags

2

Nếu bạn xem xét 2 sự thật này, nó sẽ mở ra cho bạn các tùy chọn khác:

  1. Bạn có thể gắn cùng một thiết bị trong nhiều thư mục cùng một lúc.
  2. Bạn có thể tạo tmpfsgắn kết bất cứ nơi nào bạn muốn che dấu một thư mục.

Vì vậy, vâng, có nhiều đường dẫn mà bạn không muốn sao lưu. Bạn tránh hầu hết chúng bằng cách gắn phân vùng chính của bạn vào thư mục thứ 2. Những người khác sẽ vẫn có dữ liệu bạn không muốn sao lưu như /tmp, /dev, và /var/log.

Quá trình của tôi diễn ra như thế này ...

  1. SSH vào Raspberry Pi
  2. Mount chính xác tôi muốn sao lưu

    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. Thoát khỏi máy
  4. Sao chép dữ liệu qua 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. Hủy bỏ các gắn kết tạm thời

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

Khi bạn hài lòng với kết quả, bạn có thể đặt tất cả trong một tệp như ~/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

Và gọi như thế này ...

$ 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

GỢI Ý: Trong khi bạn đang thử nghiệm, thay đổi tar cf - *để tar cf - etctiết kiệm cho mình một bó thời gian trên mỗi lần chạy thử nghiệm.


2

Tôi đã có cùng một vấn đề với Raspis @ home của tôi. Đó là lý do tại sao tôi đã viết raspiBackup cho phép tạo các bản sao lưu dd, tar và rsync trên cơ sở thông thường mà không cần phát minh của người dùng. Chỉ cần cung cấp cho nó một thử.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.