6. 根文件系统备份与重新烧录¶
对系统镜像镜像完整备份的好处是处理方便,步骤简单。但是完整备份的系统镜像体积较大且无法使用量产工具进行烧录。
如果我们仅对根文件系统做出了修改,则可以单独备份根文件系统分区。同理,如果我们对boot分区或其他分区做出了修改, 也可以单独备份相应的分区。但是在开发过程中,我们一般不去修改别的分区,所以这里重点讲解rootfs分区的备份,其他分区的备份及烧录方式也类似。
6.1. 备份前的准备工作¶
为了顺利的进行根文件系统的备份,我们先要做一些准备工作。
将烧录到eMMC或SD卡的RK格式镜像源文件解包,得到各个分区的镜像。
用于后期镜像处理的Linux PC或虚拟机
如果备份的是eMMC,则需要一张已经烧录了板卡通用备份镜像的SD卡。
6.2. 根文件系统备份¶
为了验证rootfs分区是否被正确备份,我们将桌面背景图片换为下图所示的图片。
接着操作以下步骤,再次启动时会自动扩展分区。
专用镜像 执行以下操作:
1 2 3 4 5 6 7 | #删除此文件,再次启动时会自动扩展分区
rm /var/lib/misc/firstrun
# 删除完成后,关机
poweroff
通用镜像和专用镜像的扩容方法不同,分别对两种镜像进行讲解。
|
通用镜像 执行以下操作:
打开系统初始化脚本/etc/init.d/boot_init.sh,该脚本是初始化脚本,默认配置为了开机自启动。
1 | vim /etc/init.d/boot_init.sh
|
假定通用镜像的根文件系统分区为/dev/mmcblk0p3,可执行命令 df -h 进行确认,在系统初始化脚本末尾添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 | if [ ! -e "/boot/boot_dilatation_init" ] ;
then
#修改/dev/mmcblk0p3根文件系统分区空间配置
printf 'yes\n-1\nyes' | parted /dev/mmcblk0 resizepart 3 ---pretend-input-tty
#根据配置重新分配空间
resize2fs /dev/mmcblk0p3
#创建判断文件,第二次启动不再执行此扩容
touch /boot/boot_dilatation_init
fi
|
插入烧录了板卡通用备份镜像的SD卡,从SD卡启动系统。 如果是备份SD卡上的rootfs分区的话,这一步就是将要备份的SD卡插入Linux PC。
打开gparted磁盘管理工具,卸载并压缩要备份的rootfs分区。
应用我们做出的修改,缩小rootfs的体积
使用 mkdir
命令创建一个新的目录,用于存放从带镜像的SD卡中拷贝的镜像。
然后使用 dd
命令将带镜像的SD中的镜像拷贝到新创建的目录中,这里我们选择挂载的U盘。
刚才在压缩分区时我们得知eMMC的rootfs分区就是/dev/mmcblk0p6分区
1 2 3 4 5 6 7 8 9 10 | #挂载U盘
mount /dev/sda1 /mnt/udisk/
#将带镜像的SD卡中的镜像拷贝到创建的目录中
dd if=/dev/mmcblk0p6 of=/mnt/udisk/backup-rootfs.img bs=1024k conv=sync
#拷贝需要时间,请耐心等待,打印消息如下
3400+0 records in
3400+0 records out
3565158400 bytes (3.6 GB, 3.3 GiB) copied, 185.89 s, 19.2 MB/s
|
备份完成后我们poweroff命令关机,移除U盘,这样我们就得到了单独的rootfs.img分区镜像。
我们可以选择直接用开发工具进行分区烧录,也可以将备份的rootfs.img与其他分区合并成一个完整的镜像。
6.3. 分区烧录¶
使用开发工具导入对应的分区表,然后依次选择RK格式完整镜像解包后的各个分区镜像, 注意rootfs分区要选择我们刚刚备份得到的backup-rootfs.img镜像文件,然后进行烧录。
6.4. 打包成完整镜像后烧录¶
打开我们的打包工具,将之前解包的分区镜像和刚刚备份的backup-rootfs.img复制到Image目录下, 并将backup-rootfs.img重命名为rootfs.img替换原来的文件,然后运行rk356x-mkupdate.sh打包完整镜像。
将打包后的完整镜像update.img烧录到板卡中。
6.5. 验证修改结果¶
重新烧录镜像后,默认桌面背景仍然是我们原来修改的图片。