dm-verity

一、Device Mapper:

dm-verity是内核子系统的Device Mapper中的一个子模块,所以在介绍dm-verity之前先要介绍一下Device  Mapper的基础知识。

Device Mapper为Linux内核提供了一个从逻辑设备到物理设备的映射框架,通过它,用户可以定制资源的管理策略。当前Linux中的逻辑卷管理器如LVM2(Linux Volume Manager 2)、EVMS(Enterprise Volume Mageagement System)、dmraid等都是基于该机制实现的。

Device Mapper有三个重要的概念:映射设备(Mapped Device)、映射表、目标设备(Target Device);

映射设备是一个逻辑块设备,用户可以像使用其他块设备那样使用映射设备。映射设备通过映射表描述的映射关系和目标设备建立映射。对映射设备的读写操作最终要映射成对目标设备的操作。而目标设备本身不一定是一个实际的物理设备,它可以是另一个映射设备,如此反复循环,理论上可以无限迭代下去。映射关系本质上就是表明映射设备中的地址对应到哪个目标设备的哪个地址。

Device Mapper是一个灵活的架构,映射设备映射一个或多个目标设备,每个目标设备属于一个类型,类型不同,对I/O处理不同,构造目标设备的方法也不同。映射设备可以映射多个不同类型的目标设备。

Dm-verity规定只能有两个目标设备,一个是数据设备(Data Device),另一个是哈希设备(Hash Device);

 参考IBM博客,世界厉害的人真的多,不得不佩服:

https://www.ibm.com/developerworks/cn/linux/l-devmapper/

二、dm-verity简介:

 dm-verity是Device mapper架构下的一种目标设备类型,通过它来保障设备或设备分区的完整性,它的典型架构是:

dm-verity类型的设备需要两个底层设备,一个是数据设备,顾名思义是用来存储数据,实际上就是要保障完整性的设备,另一个是哈希设备,用来存储哈希值,在校验数据设备完整性时需要。

 图中映射设备和目标设备是一对一关系,对映射设备的读操作被映射成对目标设备的读操作,在目标设备中,dm-verity又将读操作映射为数据设备(Data Device)的读操作。但是在读操作的结束处,dm-verity加了一个额外的校验操作,对读到的数据计算一个hash值,用这个哈希值和存储在哈希设备

(Hash Device)中的值做比较,如果不同,则本次读操作被标记为错误。

假设数据设备和哈希设备中每块大小均为4KB,再假设使用hash算法SHA256,即每块数据的哈希值为32B(256bits),则哈希设备中的每块(4KB)存储有4096/32=128个哈希值。所以在layer0中一个哈希设备的块对应数据设备的128个块。到这里似乎完整了,数据设备中存储数据,哈希设备存储哈希值。

在读取数据时,dm-verity还要防备哈希设备中存储的哈希值被篡改的情况。所以要加上layer1,在layer1中的每块数据对应layer0的128个块,layer1中的数据就是对layer0中的数据(hash设备和数据设备中的数据)计算hash值,如果layer1中只有一块,那么就此停止,否则继续增加layer,直到layer n只有一块。最后对layer n再计算hash值,称这个hash值为root hash。

这个root hash就可以反应数据设备和hash设备的变化。通过验证root hash 就可以校验数据是否被篡改。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

浅谈 MySQL 集群高可用架构

新年快乐 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库...

35615
来自专栏Netkiller

分布式计划任务设计与实现

分布式计划任务设计与实现 摘要 本文主要通过分布式计划任务软件设计讲述分布式软件开发。 我的系列文档 Netkiller Architect 手札 Netk...

2805
来自专栏云原生架构实践

部署模式 - 每个主机多个服务实例

已经通过微服务架构的分解模式(参考按业务领域分解模式划分微服务),将整个应用程序划分为多个独立的微服务。

826
来自专栏搜云库

手把手教你 MongoDB 的安装与详细使用(一)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

3167
来自专栏程序员互动联盟

误删了,如何恢复硬盘数据?

经常见到有小伙伴在编程的群里问,误删了文件怎么去恢复?很多不明白原理的小伙伴可能就纳闷了,明明是删除的文件是怎么找回来的哪?这点先要从硬盘的储存原理说起。 硬盘...

3388
来自专栏架构师之路

数据库秒级平滑扩容架构方案

一、缘起 (1)并发量大,流量大的互联网架构,一般来说,数据库上层都有一个服务层,服务层记录了“业务库名”与“数据库实例”的映射关系,通过数据库连接池向数据库路...

4328
来自专栏Java编程技术

Dubbo剖析-服务降级

dubbo提供了一些服务降级措施,当服务提供端某一个非关键的服务出错时候,dubbo可以对消费端的调用进行降级,这样服务消费端就避免了在去调用出错的服务提供端,...

1002
来自专栏北京马哥教育

etcd:从应用场景到实现原理的全方位解读

马哥linux运维 | 最专业的linux培训机构 ---- 随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作...

38812
来自专栏.NET后端开发

RabbitMQ消息队列系列教程(一)认识RabbitMQ

摘要 RabbitMQ是最为流行的消息中间件,是处理高并发业务的利器。本系列教程,将跟大家一起学习RabbitMQ。 目录 RabbitMQ是什么? Rabbi...

2998
来自专栏匠心独运的博客

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(一)

摘要:如何构建具备作业分片和弹性扩缩容的定时任务系统是每个大型业务系统在设计时需要考虑的重要问题? 对于构建一般的业务系统来说,使用Quartz或者Sprin...

1032

扫码关注云+社区