我想备份Raspberry Pi的内容以启用如果需要,可以轻松,可靠地进行完整还原。
这些功能非常理想:
备份保存在外部位置(USB记忆棒,DAS,NAS,网络计算机等)
以增量方式或通过调度实现自动化
备份的版本号
克隆SD卡似乎是一种流行的解决方案,但是根据Goldilocks的这篇文章不建议这样做,因为克隆包含仅在运行时等加载的文件。
因此,我假设一个好的解决方案使用诸如
rsync
之类的东西,或者说可能更可靠地使用可以处理critera的工具我的特殊情况:
我在LAN上有一个Raspberry Pi,可以在其中备份到Mac OS X计算机,Synology DiskStation NAS或到连接到Raspberry的USB记忆棒上。我不希望使用后者。
#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
评论
在Ubuntu网站上有很多备份选项(大多是非Ubuntu专用的)askubuntu.com/questions/2596/comparison-of-backup-tools/2903