最近在调研ota的基本功能,之前根据安卓的文章可以知道安卓基于dm框架实现了virtual ab system,这里在linux也能实现,所以调研了一下dmsetup的基本功能,为ota升级做准备。
如果需要了解安卓的ab功能,可以如下链接:
https://source.android.com/docs/core/ota/virtual_ab
这里先将system分区抽象成dm-linear,这样system分区是super分区的多个块,如下
通过snapshot的基本功能,将系统分为origin和snapshot,这里origin是源设备分区,cow是写时复制分区,整个系统的快照由origin+COW组成,如下
为了能够基于安卓的理念实现ota,这里需要借助工具dm-setup,如下是测试上述功能的基本命令
# create all device dmsetup create origin_device --table "0 $(blockdev --getsz /dev/mmcblk0p6) linear /dev/mmcblk0p6 0" dmsetup create cow_device --table "0 $(blockdev --getsz /dev/mmcblk0p4) linear /dev/mmcblk0p4 0" dmsetup create origin --table "0 $(blockdev --getsz /dev/mmcblk0p6) snapshot-origin /dev/mapper/origin_device" dmsetup create cow --table "0 $(blockdev --getsz /dev/mmcblk0p6) snapshot /dev/mapper/origin_device /dev/mapper/cow_device P 8" # merge dmsetup suspend origin dmsetup remove cow # merge cow_device--->origin_device dmsetup reload origin --table "0 $(blockdev --getsz /dev/mmcblk0p6) snapshot-merge /dev/mapper/origin_device /dev/mapper/cow_device P 8" dmsetup resume origin # merge to origin dmsetup suspend origin dmsetup reload origin --table "0 $(blockdev --getsz /dev/mmcblk0p6) snapshot-origin /dev/mapper/origin_device" dmsetup resume origin # create cow for snapshot dmsetup create cow --table "0 $(blockdev --getsz /dev/mmcblk0p6) snapshot /dev/mapper/origin_device /dev/mapper/cow_device P 8"
至此,一个基本基于dmsetup的快照功能调研完成,快照,合并的基本功能均正常