最小化备份树莓派系统镜像

87
0
5天前

准备工具:需要备份的SD卡,读卡器,PC(Linux)

1、安装必备工具软件:

sudo apt-get install dosfstools dump parted kpartx

2、将装载sd卡的读卡器插入PC,查看sd卡使用的空间

df -h

如图,此次sd卡对应的设备名为/dev/sde,其中sde1为boot文件,sde2为/根目录文件。可见,sd卡使用了7.5G+20M,则镜像预设的大小为8G即可。

微信图片_20201014205844

3、建立工作目录

mkdir ~/backupimg

cd ~/backupimg/

4、挂载源sd卡

mkdir src_boot

mkdir src_Root

sudo mount -t vfat -o uid=pcl-02,gid=pcl-02,umask=0000 /dev/sde1 ./src_boot/

sudo mount -t ext4 /dev/sde2 ./src_Root/

注意,第三行指令的uid和pid为此次备份我使用的PC的系统的用户id和组id,使用不同的PC或不同的账户需要做相应修改。

微信图片_20201014211231

5、建立一个8000M的空白img文件

sudo dd if=/dev/zero of=ardusub-raspbian-ros.img bs=1M count=8000

建立过程需要时间,可以在新终端通过以下指令观察img文件大小变化可以查看进度。

watch –d –n 5 ls –lh ~/backupimg

微信图片_20201014211938

6、给镜像文件分区

cd ~/backupimg

sudo parted ardusub-raspbian-ros.img –script — mklabel msdos

sudo parted ardusub-raspbian-ros.img –script — mkpart primary fat32 8192s 122479s

sudo parted ardusub-raspbian-ros.img — mkpart primary ext4 122880s -1

微信图片_20201014212158

7、检查分区是否成功

sudo parted ardusub-raspbian-ros.img

输入print free可以显示分区内容,输入quit退出。

微信图片_20201014212322

8、img文件对应的loop device的设置

sudo losetup -f –show ardusub-raspbian-ros.img

通过输出结果可知此次对应的device号为18

sudo kpartx -va /dev/loop18

ls /dev/mapper/loop18p*

微信图片_20201014212454

如上图,loop0p1对应的是img文件上的/boot,loop0p2对应的是/根目录

9、格式化img文件中的两个分区

sudo mkfs.vfat -n boot /dev/mapper/loop18p1

sudo mkfs.ext4 /dev/mapper/loop18p2

10、挂载img文件的两个分区

mkdir tgt_boot

mkdir tgt_Root

sudo mount -t vfat -o uid=pcl-02,gid=pcl-02,umask=0000 /dev/mapper/loop18p1 ./tgt_boot/

sudo mount -t ext4 /dev/mapper/loop18p2 ./tgt_Root/

微信图片_20201014212658

注意,第三行指令的uid和pid为此次备份我使用的PC的系统的用户id和组id,使用不同的PC或不同的账户需要做相应修改。

11、备份/boot

sudo cp -rfp ./src_boot/* ./tgt_boot/

12、备份/(根目录文件)

由于使用dump/restore的方法遇到了不少问题,故采用了tar压缩复制解压的方法。

首先对目标挂载点设置合适的权限,并清空。

sudo chmod 777 tgt_Root

sudo chown pcl-02.pcl-02 tgt_Root

sudo rm -rf ./tgt_Root/*

注意第二行指令的pid.uid为pcl-02.pcl-02为此次PC的用户ID和组ID,需要根据实际情况更改。微信图片_20201014213416

然后压缩根目录下文件

cd src_Root/

sudo tar pcf ../backup.tar .

压缩过程需要较长时间,可以在新终端通过以下指令观测backup.tar大小估计压缩进度.

watch –d –n 5 ls –lh ~/backupimg/

打包过程结束后将tar包解压缩至img文件的根文件系统。删除压缩文件

cd ../tgt_Root/

sudo tar pxf ../backup.tar

cd ..

sudo rm backup.tar

微信图片_20201014213618

13、修改PARTUUID

首先获取PARTUUID

sudo blkid

微信图片_20201014213722

找到loop18p1和loop18p2的PARTUUID。

修改相应PARTUUID参数:

sudo vim ./tgt_boot/cmdline.txt

sudo vim ./tgt_Root/etc/fstab

得到结果如下图:

微信图片_20201014213856

微信图片_20201014214022

14、卸载各挂载的分区

sudo umount src_boot src_Root tgt_boot tgt_Root

15、删除loop device

sudo kpartx -d /dev/loop18

sudo losetup -d /dev/loop18

16、删除挂载点目录

rmdir src_boot src_Root tgt_boot tgt_Root

17、此时,工作目录下只剩下备份好的img镜像文件,在linux下可以使用dd指令进行烧录,在windows下可以使用etcher进行烧录

若是觉得img镜像文件还是太大,可以再进行压缩

zip -r ardusub-raspbian-ros.img.zip ardusub-raspbian-ros.img

得到的zip文件才2G多一点,该zip文件也使用etcher可以直接烧录。

微信图片_20201014214322

18、使用etcher烧录至sd卡后,开机可能会出现sd卡空间未充分使用的情况。即系统提示只有10G的可用空间,而sd卡有32G的使用空间。此时可参照以下博客

https://blog.csdn.net/weixin_40490238/article/details/89320293

借助ubuntu下gparted工具,步骤基本为:

①打开gparted;②选择sd卡;③umount  sd卡;④调整sd卡空间大小;⑤应用修改。

发表评论

后才能评论