증분 백업으로 Raspberry Pi 자동 백업


15

이 주제에 대한 몇 가지 다른 질문과 답변이 있습니다. 그러나 검색 할 때 "정식"으로 간주되거나 다양한 옵션을 한곳에서 모으는 답변을 찾을 수 없습니다.

필요한 경우 쉽고 안정적으로 완전 복원 할 수 있도록 Raspberry Pi의 내용을 백업하고 싶습니다.

이러한 기능은 이상적입니다.

  • 외부 위치에 보관 된 백업 (USB 스틱, DAS, NAS, 네트워크 컴퓨터 등)
  • 증분 또는 스케줄링을 통한 자동화
  • 백업 버전 번호

SD 카드 복제는 널리 사용되는 솔루션으로 보이지만 Goldilocks 의이 게시물에 따르면 복제본에는 런타임 등에로드 된 파일 등이 포함되어 있으므로 권장하지 않습니다.

따라서 좋은 솔루션은 rsync위의 기준을 처리 할 수있는 유틸리티 와 같은 또는 더 강력하게 사용하는 것으로 가정합니다 .

나의 특별한 상황 : LAN에 Raspberry Pi가 있는데, Mac OS X 컴퓨터, Synology DiskStation NAS 또는 Raspberry에 연결된 USB 메모리 스틱에 백업 할 수 있습니다. 나는 후자를 사용하지 않는 것을 선호합니다.


우분투 사이트 (대부분 우분투 이외의 사이트)에 askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

답변:


10

Rsnapshot 은 다음 기준을 충족합니다. 1

  • 로컬 또는 원격으로 사용할 수 있습니다.

  • 자동화 / 스케줄 가능

  • 번호가 지정된 증분 백업을 사용합니다.

나는 내가 일하는 서버에서 사용된다는 사실을 넘어서는 개인적인 경험이 많지 않습니다. 일상을 저축 한 곳이지만 아치 리눅스 위키 는 여기 에 훌륭하게 소개되어 있습니다. 문서 가 있고 페이지가 있습니다 (대부분의 다른 배포판에도 똑같이 적용됩니다). 홈 페이지는 온라인에서 찾을 수 없지만 검색하면 수많은 자습서, 토론 등이 나타났습니다. 이 링크 외에도 (실제 방법은 오프라인 상태로 유지되어 사람들이 잘못된 버전의 잘못된 링크를 사용하여 혼동하지 않도록 할 수 있습니다).


  1. 분명히 (2018) 분명히 BorgBackup 을 위해 유지되지 않을 수 있습니다 .

감사! 이번 주말에 테스트 해보고 문제가 해결되면 답변을 확인하겠습니다.
Winterflags

1
Rsnapshot은 더 이상 유지되지 않습니다. 원저작자가 전환 사용하여 BorgBackup을
lightswitch05

@ lightswitch05 알아두면 좋습니다!
goldilocks

2

몇 가지 백업 기술을 시도했습니다. 나는 정기적으로 2를 사용합니다.

Mac에서 SD 카드를 복제하고 이미지를 압축합니다. 보안 백업으로 사용하거나 중복 카드를 만듭니다. 나는 이것이 이상적이지 않다는 것에 동의한다. 내 스크립트는 다음과 같습니다.

더 자주, 나는 rsyncPi에 연결된 HD에 복사하는 데 사용 합니다. 자세한 내용은 /raspberrypi//a/28087/8697 을 참조하십시오.

사실 Wheezy, Jessie 및 MATE 이미지를 다른 디렉토리로 백업하는 버전이 약간 다릅니다.

Mac과 재 동기화를 시도했지만 부분적으로 만 작동했습니다. 근본적인 문제는 Mac과 Pi의 사용자 rsync가 서로 다른 플랫폼 의 차이점을 언급하지 않고 일치하지 않는다는 것 입니다. 최신 OS X의 보안 변경으로 인해 더 많은 문제가 발생했을 것입니다.

한 Pi를 사용하여 네트워크를 통해 다른 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 솔루션은 Pi에 연결된 USB 스틱에 쉽게 적용 할 수 있어야합니다. 네트워크 백업 설정에 신경 쓰지 않고 단순히 USB로 rsync를 수행하려고 생각합니다.
Winterflags

2

이 두 가지 사실을 고려하면 다른 옵션을 열 수 있습니다.

  1. 동일한 장치를 여러 디렉토리에 동시에 마운트 할 수 있습니다.
  2. tmpfs디렉토리를 마스크하려는 곳이면 어디든 마운트 를 만들 수 있습니다 .

예, 백업하고 싶지 않은 경로가 많이 있습니다. 1 차 파티션을 2 차 디렉토리에 마운트하여 대부분을 피할 수 있습니다. 다른 사람들은 여전히 같은 백업 원하지 않는 데이터를해야합니다 /tmp, /dev하고 /var/log.

내 프로세스는 다음과 같이 진행되었습니다 ...

  1. 라즈베리 파이에 SSH
  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 @ 홈과 동일한 문제가있었습니다. 그렇기 때문에 사용자 발명없이 정기적으로 dd, tar 및 rsync 백업을 만들 수있는 raspiBackup 을 작성했습니다. 시도해보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.