自动备份Raspberry Pi,并进行增量备份


15

关于这个问题有一些不同的问题和答案。但是,在搜索时,我一直无法找到一个可以被认为是“规范的”答案或将各种选项集中在一处的答案。

我想备份Raspberry Pi的内容,以便在需要时轻松,可靠地进行完整还原。

这些功能将是理想的:

  • 备份保存在外部位置(USB记忆棒,DAS,NAS,网络计算机等)
  • 自动化,增量式或通过调度
  • 备份的版本号

克隆SD卡似乎是一种流行的解决方案,但是根据Goldilocks的这篇文章,这是不可取的,因为克隆包含仅在运行时等加载的文件。

因此,我假设一个好的解决方案使用的是类似rsync的工具,或者可能更健壮的工具,它可以处理上面的critera。

我的特殊情况: 我在LAN上有Raspberry Pi,可以在其中备份到Mac OS X计算机,Synology DiskStation NAS或连接到Raspberry的USB记忆棒。我宁愿不使用后者。


在Ubuntu站点上有很多备份选项(主要是非Ubuntu专用的),请问问题askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Answers:


10

Rsnapshot满足以下条件:1

  • 可以在本地或远程使用。

  • 可以自动/预定。

  • 使用编号的增量备份。

除了在我工作的服务器上使用它(偶尔在其中节省了一天)的事实之外,我对此没有太多的个人经验,但是在这里似乎有一个很好的介绍,Arch linux Wiki,它往往具有很棒的功能。文档,有一个页面(我敢肯定,大部分内容同样适用于其他发行版),并且主页引用了我无法在线找到的HOWTO,但通过搜索找到了很多教程,讨论等。除了这些链接之外(实际操作方法可能会保持离线状态,以使人们不会因使用错误的版本和错误的版本而感到困惑)。


  1. 尽管现在(2018)很明显,它可能无法得到BorgBackup的支持

谢谢!我将在本周末进行测试,并确定是否可以解决。
2015年

1
Rsnapshot不再维护。该原作者切换到使用BorgBackup
lightswitch05

@ lightswitch05真心知道!
goldilocks

2

我尝试了几种备份技术。我定期使用2。

我在Mac上克隆SD卡并压缩图像。我将此用作安全备份或制作重复卡。我同意这不是理想的选择。我的脚本在下面。

我经常将rsync其复制到Pi附带的HD。有关详细信息,请参见/raspberrypi//a/28087/8697

实际上,我将备份Wheezy,Jessie和MATE映像(到不同目录)的版本略有不同。

我确实尝试过与我的Mac进行rsync,但这仅部分起作用。根本问题是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

您的DAS解决方案应该易于适应连接到Pi的USB记忆棒,对吗?我不是在费心设置网络备份,而是在考虑将rsync同步到USB。
Winterflags 2015年

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备份。试一试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.