关于此主题有一些不同的问题和答案。但是,在搜索时,我找不到一个可以被认为是“规范”的答案,或者无法将某个选项收集到一个地方。

我想备份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

#1 楼

Rsnapshot满足以下条件:1


可以在本地或远程使用。
可以自动/安排使用。
使用编号的增量备份。

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



尽管现在(2018年)显然已经不再受到BorgBackup的支持了。


评论


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

– P A N
15年11月11日在18:15

Rsnapshot不再维护。原始作者改用BorgBackup

–lightswitch05
18年4月4日在21:06

@ lightswitch05真心知道!

– goldilocks♦
18年4月5日在11:18

#2 楼

如果考虑到这两个事实,它将为您提供其他选择:


您可以同时将同一设备安装到多个目录中。掩盖目录。

因此,是的,您不想备份许多路径。通过将主分区挂载在第二个目录中,可以避免大多数情况。其他人仍然会有您不想备份的数据,例如tmpfs/tmp/dev

我的进程像这样...


SSH进入Raspberry Pi

完全要我要备份

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/


退出计算机

将数据复制到通过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.



卸下临时安装座

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



对结果满意后,可以将其全部放在一个文件中,例如/var/log

#!/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:", }' < /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:", }'
MD5: d3d9181374f3ec8e4e721c786eca9f71
 348MB 0:04:50 [ 1.2MB/s] [                 <=>                                ]
MD5: d3d9181374f3ec8e4e721c786eca9f71


提示:在进行实验时,请将~/backup.sh更改为tar cf - *,以节省每次测试的时间。

#3 楼

我尝试了几种备份技术。我经常使用2。

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

我经常使用rsync复制到Pi附带的HD。有关详细信息,请参见https://raspberrypi.stackexchange.com/a/28087/8697。

实际上,我备份Wheezy,Jessie和MATE映像(到不同目录)的版本略有不同。 />
我确实尝试过与Mac进行rsync,但这仅部分起作用。根本问题是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]\).*//' | 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。

– P A N
15年11月14日在20:32

#4 楼

我的Raspis @ home遇到了同样的问题。这就是为什么我写了raspiBackup,它允许在没有用户发明的情况下定期创建dd,tar和rsync备份。试一试。