转载自https://www.cnblogs.com/haochuang/p/6066532.html
一、安装需要的软件
dosfstools:fat32分区格式化工具
dump:dump & restore 备份工具
parted & kpartx:虚拟磁盘工具
执行安装脚本
sudo apt-get install dosfstools
sudo apt-get install dump
sudo apt-get install parted
sudo apt-get install kpartx
二、生成新的img文件
先df -h查看下树莓派实际使用空间然后在决定生成文件大小,下面命令生成块大小为1MB总大小为2500MB的镜像文件
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
三、分割虚拟磁盘
利用parted将刚才生成的虚拟盘分割成两个分区
- 第一个分割区采用FAT32格式,由sector 8192开始到sector 12879,约62.9MB
- 第二个分割区采用EXT4,由sector 122880开始到结束。
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1
四、挂载虚拟磁盘并格式化
- loopdevice:执行 losetup 连接 img 文件的 loop device
- device:执行完 kpartx 后,虚拟磁盘代号。
- partBoot:由 device 加上 p1 组合而成的 FAT32 虚拟磁盘分区。
- partRoot:由 device 加上 p2 组合而成的 EXT4 虚拟磁盘分区。
首先建立虚拟磁盘并分区
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"
格式化虚拟磁盘分区
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot
五、开始备份
fat32虚拟磁盘分区建立好后直接用cp命令备份文件
- sudo mount -t vfat $partBoot /media
- sudo cp -rfp /boot/* /media/
- sudo umount /media
ext4 linux虚拟磁盘分区用dump & restore 备份
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
六、卸载虚拟磁盘
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice
经过以上六步树莓派中的数据文件就全部备份到raspberrypi.img中了,你既可以在Windows中用Win32DiskImager将镜像恢复到SD卡,也可以在Linux用dd还原到SD卡,而且不要求恢复SD卡的大小跟原来的一样(不同品牌相同大小的SD卡实际可用空间不一样的,坑!),这样就可以很方便的更换SD卡。当用此SD卡启动树莓派的时候执行raspi-config ->Expand Filesystem 即可扩展未使用的空间。
这里就是最后的脚本,包含了以上六步,只需要编辑sudo vi backup.sh复制以下内容,sudo chmod 777 genimg.sh,然后sudo ./backup.sh就可以在当前脚本目录中生成树莓派的SD卡镜像了。
#!/bin/sh
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice
其余参考:
【树莓派】制作树莓派最小镜像:img裁剪瘦身: http://www.cnblogs.com/haochuang/p/6380839.html
制作树苺派SD卡备份镜像——树苺派系统备份与还原指南:http://blog.lxx1.com/1450
使用dump和restore来制作树莓派的img镜像:http://www.tyrantek.com/archives/508/
树莓派备份镜像 制作镜像 一键制作 脚本:http://www.jianshu.com/p/c6055f9545fd
(该文所附加脚本:https://github.com/Neutree/note/blob/master/tool/RaspberryPi/backup_system.sh)
使用GHO方式制作镜像:
使用Clonezilla对硬盘进行镜像和克隆:https://linux.cn/article-3888-1.html
Linux下类似ghost的备份与还原系统的工具:http://www.linuxdiyf.com/linux/30498.html
如何制作Ubuntu安装U盘:https://www.sysgeek.cn/make-ubuntu-usb-flash-drive/