根文件系统备份与重新烧录

对系统镜像镜像完整备份的好处是处理方便,步骤简单。但是完整备份的系统镜像体积较大且无法使用量产工具进行烧录。

如果我们仅对根文件系统做出了修改,则可以单独备份根文件系统分区。同理,如果我们对boot分区或其他分区做出了修改, 也可以单独备份相应的分区。但是在开发过程中,我们一般不去修改别的分区,所以这里重点讲解rootfs分区的备份,其他分区的备份及烧录方式也类似。

备份前的准备工作

为了顺利的进行根文件系统的备份,我们先要做一些准备工作。

  • 将烧录到eMMC或SD卡的RK格式镜像源文件解包,得到各个分区的镜像。

  • 用于后期镜像处理的Linux PC或虚拟机

  • 如果备份的是eMMC,则需要一张已经烧录了板卡通用备份镜像的SD卡。

根文件系统备份

为了验证rootfs分区是否被正确备份,我们将桌面背景图片换为下图所示的图片。

../../_images/backup_rootfs01.png

接着操作以下步骤,再次启动时会自动扩展分区。

  • 专用镜像 执行以下操作:

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分区。

../../_images/backup_rootfs02.png

应用我们做出的修改,缩小rootfs的体积

../../_images/backup_rootfs03.png

使用 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与其他分区合并成一个完整的镜像。

分区烧录

使用开发工具导入对应的分区表,然后依次选择RK格式完整镜像解包后的各个分区镜像, 注意rootfs分区要选择我们刚刚备份得到的backup-rootfs.img镜像文件,然后进行烧录。

../../_images/backup_rootfs04.png

打包成完整镜像后烧录

打开我们的打包工具,将之前解包的分区镜像和刚刚备份的backup-rootfs.img复制到Image目录下, 并将backup-rootfs.img重命名为rootfs.img替换原来的文件,然后运行rk356x-mkupdate.sh打包完整镜像。

../../_images/backup_rootfs05.png ../../_images/backup_rootfs06.png

将打包后的完整镜像update.img烧录到板卡中。

../../_images/backup_rootfs07.png

验证修改结果

重新烧录镜像后,默认桌面背景仍然是我们原来修改的图片。