如果您考虑这两个事实,它将为您提供其他选择:
- 您可以将同一设备同时安装在多个目录中。
- 您可以
tmpfs
在要屏蔽目录的任何位置创建安装。
因此,是的,您不想备份许多路径。通过将主分区挂载在第二个目录中,可以避免大多数情况。其他人会仍然有你不想要的数据备份一样/tmp
,/dev
和/var/log
。
我的过程像这样...
- 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
对结果满意后,可以将其全部放入一个文件中,例如 ~/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
在每次测试运行时节省大量时间。