树莓派系统备份

文章来源: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 loopdevice=`sudo losetup -f --show raspberrypi.img`
2 device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
3 device="/dev/mapper/${device}"
4 partBoot="${device}p1"
5 partRoot="${device}p2"

 

格式化虚拟磁盘分区

 

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 卸载虚拟磁盘 

1 sudo kpartx -d $loopdevice  
2 sudo losetup -d $loopdevice  

 

经过以上六步树莓派中的数据文件就全部备份到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  

 

 

执行完成后可以看到生成的备份文件

 

posted @ 2018-06-27 15:11  诺岚生  阅读(1032)  评论(0编辑  收藏  举报