一种基于android容器的devicemapper隔离方法与流程

文档序号:11176838阅读:739来源:国知局
一种基于android容器的device mapper隔离方法与流程

本发明涉及隔离方法,尤其涉及一种基于android容器的devicemapper隔离方法。



背景技术:

随着android的发展,在android上基于容器的多系统方案已经被提了出来,其中实现了进程隔离,文件系统隔离,网络隔离等。android容器方案是基于linuxkernel(操作系统内核)提供的namespace(命名空间)和cgroups技术,在单个kernel上隔离出来多个完整的虚拟空间。

为了说明后面的机制,先说下基于单内核多系统的方案中文件系统的隔离是如何实现的。文件系统的隔离是通过chroot(changeroot,也就是改变程序执行时所参考的根目录位置)和mntnamespace实现,通过chroot切换一个新空间的rootfs(根文件系统),这样我们可以在新的rootfs中就可以创建和单系统上一样的目录结构。

devicemapper(devicemapper是linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构)是linuxblock设备的虚拟,非常适合在块设备基础上集成多种功能。devicemapper可以实现软raid、软加密、逻辑卷条带、多路径、镜像、快照等多种功能。google在android上用devicemapper实现了system分区签名,完整性校验和userdata分区加密功能。

在android上单内核多系统方案中,每个系统都用devicemapper来实现system校验和userdata加密,且目录结构一样。原生的devicemapper使用挂载点来区分不同的devicemapper实体,那么基于单内核多系统的方案中就会出现通过/system这个挂载点创建成功devicemapper以后,第二个系统就无法使用同样名称的挂载点创建devicemapper的问题。

一个可行的解决方案是将不同的系统中需要使用devicemapper机制的文件系统换成不同的挂载点,但该方案需要修改很多使用该文件系统的代码,且新增加的服务都需要注意该问题。



技术实现要素:

为了解决现有技术中的问题,本发明提供了一种基于android容器的devicemapper隔离方法。

本发明提供了一种基于android容器的devicemapper隔离方法,包括以下步骤:

s1、为操作系统内核中的mntnamespace结构添加一个链表头dm_list,该mnt_namespace结构用于创建devicemapper,将新创建的devicemapper挂到以mnt_namespace的链表头dm_list为头的链表上,每个mntnamespace都有一个devicemapper链表;

s2、所有需要查询devicemapper的操作,都需要先确定要寻找的devicemapper所在的mntnamespace,然后在该mntnamespace的链表头dm_list上查找。

作为本发明的进一步改进,devicemapper的创建步骤为:在操作系统内核中,找到当前进程对应的mntnamespace,判断在该mntnamespace上是否有同名挂载点的devicemapper,如果有,则返回错误,如果没有,则创建devicemapper,并挂载到对应mntnamespace的链表头dm_list上。

本发明的有益效果是:由于devicemapper是kernel的虚拟驱动,所以不存在不同的android机器不兼容的问题,提高了兼容性。

附图说明

图1是本发明一种基于android容器的devicemapper隔离方法的devicemapper链表示意图。

图2是本发明一种基于android容器的devicemapper隔离方法的devicemapper的创建流程图。

具体实施方式

下面结合附图说明及具体实施方式对本发明作进一步说明。

为了解决单内核多系统上的devicemapper同名挂载点冲突的问题本发明提出一种基于linuxnamespace的方案,在devicemapper的驱动中解决该问题。

如图1至图2所示,一种基于android容器的devicemapper隔离方法,包括以下步骤:

1、为kernel中的structmnt_namespace添加一个链表头dm_list,该结构用于后面创建devicemapper时,将新创建的devicemapper挂到以mnt_namespace的dm_list为头的链表上。

2、当通过clone()等系统调用创建一个新的mntnamespace时,在内核中为该mntnamespace的。

3、当某个系统创建一个devicemapper时,通过该进程对应的mntnamespace,然后将新创建的devicemapper结构挂到对应mntnamespace的dm_list上。

4、所有需要查询devicemapper的操作,都需要先确定要寻找的devicemapper所在的mntnamespace,然后在该mntnamespace的dm_list上查找。

如图1所示,每个mntnamespace都有一个devicemapper链表。

devicemapper的创建步骤为:在操作系统内核中,找到当前进程对应的mntnamespace,判断在该mntnamespace上是否有同名挂载点的devicemapper,如果有,则返回错误,如果没有,则创建devicemapper,并挂载到对应mntnamespace的链表头dm_list上。

本发明提供的一种基于android容器的devicemapper隔离方法具有以下优点:

1.由于devicemapper是kernel的虚拟驱动,所以不存在不同的android机器不兼容的问题。

2.不需要考虑修改android中使用到devicemapper的接口。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。



技术特征:

技术总结
本发明提供了一种基于android容器的device mapper隔离方法,包括以下步骤:S1、为操作系统内核中的mnt namespace结构添加一个链表头dm_list,该mnt_namespace结构用于创建device mapper,将新创建的device mapper挂到以mnt_namespace的链表头dm_list为头的链表上,每个mnt namespace都有一个device mapper链表。本发明的有益效果是:由于Device Mapper是kernel的虚拟驱动,所以不存在不同的android机器不兼容的问题,提高了兼容性。

技术研发人员:王晓华;张韵;江滨;邓永德
受保护的技术使用者:北京海杭通讯科技有限公司
技术研发日:2017.05.10
技术公布日:2017.10.03
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1