树莓派系统备份
文章来源:https://blog.csdn.net/iracer/article/details/51620051 版权归原作者所有
如果经过半天折腾完成了Pi的机器视觉编程环境搭建,担心出问题要重装的话,可以选择使用以下方法备份SD卡,它只备份SD卡使用到的空间,而非整个SD卡。
此方法参考文章
- http://www.fendou.info/raspberry-pi-sd-card-backup-and-recovery/comment-page-1/
- http://www.littledai.com/20140527/000753/3196
6.1 安装需要的软件
- dosfstools:fat32分区格式化工具
- dump:dump& restore 备份工具
- parted & kpartx:虚拟磁盘工具
1 sudo apt-get install dosfstools 2 sudo apt-get install dump 3 sudo apt-get install parted 4 sudo apt-get install kpartx
6.2 生成新的img文件
先使用df-h命令查看下树莓派实际使用空间然后在决定生成文件大小,只需看root后占用的空间,这里已经使用6.7G。
下面命令生成块大小为1MB,总大小为7500MB的镜像文件
1 sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=7500
6.3 分割虚拟磁盘
利用parted将刚才生成的虚拟盘分割成两个分区
- 第一个分割区采用FAT32格式,由sector 8192开始到sector 12879,约62.9MB
- 第二个分割区采用EXT4,由sector 122880开始到结束。
1 sudo parted raspberrypi.img --script -- mklabel msdos 2 sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s 3 sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1
6.4 挂载虚拟磁盘并格式化
loopdevice:执行 losetup连接 img文件的 loop device
device:执行完 kpartx后,虚拟磁盘代号。
partBoot:由 device加上 p1组合而成的 FAT32虚拟磁盘分区。
partRoot:由 device加上 p2组合而成的 EXT4 虚拟磁盘分区。
格式化虚拟磁盘分区
1 sudo mkfs.vfat $partBoot 2 sudo mkfs.ext4 $partRoot
6.5 开始备份
fat32虚拟磁盘分区建立好后直接用cp命令备份文件
1 sudo mount -t vfat $partBoot /media 2 sudo cp -rfp /boot/* /media/ 3 sudo umount /media
ext4linux虚拟磁盘分区用dump & restore备份
1 sudo mount -t ext4 $partRoot /media/ 2 cd /media 3 sudo dump -0uaf - / | sudo restore -rf - 4 cd 5 sudo umount /media
6.5 卸载虚拟磁盘
经过以上六步树莓派中的数据文件就全部备份到raspberrypi.img中了,你既可以在Windows中用Win32DiskImager将镜像恢复到SD卡,也可以在Linux用dd还原到SD卡,而且不要求恢复SD卡的大小跟原来的一样,这样就可以很方便的更换SD卡。在home/pi目录下生成了一个raspberrypi.img的备份文件如下:
6.6 一键备份设置
创建一个脚本文件,保存在任意位置(如home/pi/backup),任意文件名(如backup.sh)
1 cd backup 2 sudo nano backup.sh
向打开的文件中拷贝内容如下:
1 #!/bin/sh 2 sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=7500 3 sudo parted raspberrypi.img --script -- mklabel msdos 4 sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s 5 sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1 6 7 loopdevice=`sudo losetup -f --show raspberrypi.img` 8 device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` 9 device="/dev/mapper/${device}" 10 partBoot="${device}p1" 11 partRoot="${device}p2" 12 sudo mkfs.vfat $partBoot 13 sudo mkfs.ext4 $partRoot 14 sudo mount -t vfat $partBoot /media 15 sudo cp -rfp /boot/* /media/ 16 sudo umount /media 17 sudo mount -t ext4 $partRoot /media/ 18 cd /media 19 sudo dump -0uaf - / | sudo restore -rf - 20 cd 21 sudo umount /media 22 sudo kpartx -d $loopdevice 23 sudo losetup -d $loopdevice
按Ctrl+O保存文件,Ctrl+x退出,需要备份时可执行:
1 sudo sh backup.sh
执行完成后可以看到生成的备份文件