网易首页 > 网易号 > 正文 申请入驻

了解Linux系统中的Device Mapper机制:用户空间

0
分享至

Device mapper在用户空间相对简单,主要包括device mapper库和dmsetup工具。Device mapper库就是对ioctl、用户空间创建删除device mapper逻辑设备所需必要操作的封装,dmsetup是一个提供给用户直接可用的创建删除device mapper设备的命令行工具。

因为它们的功能和流程相对简单,在本文中对它们的细节就不介绍了,用户空间主要负责如下工作:

  1. 1. 发现每个mapped device相关的target device;

  2. 2. 根据配置信息创建映射表;

  3. 3. 将用户空间构建好的映射表传入内核,让内核构建该mapped device对应的dm_table结构;

  4. 4. 保存当前的映射信息,以便未来重新构建。

以下我们主要通过实例来说明dmsetup的使用,同时进一步说明device mapper这种映射机制。用户空间中最主要的工作就是构建并保存映射表,下面给出一些映射表的例子:

例1:

0 1024 linear /dev/sda 204
1024 512 linear /dev/sdb 766
1536 128 linear /dev/sdc 0
2) 0 2048 striped 2 64 /dev/sda 1024 /dev/sdb 0
3) 0 4711 mirror core 2 64 nosync 2 /dev/sda 2048 /dev/sdb 1024

例子1中将逻辑设备0~1023扇区、1024~1535扇区以及1536~1663三个地址范围分别以线形映射的方式映射到/dev/sda设备第204号扇区、/dev/sdb设备第766号扇区和/dev/sdc设备的第0号扇区开始的区域。

例子2中将逻辑设备从0号扇区开始的,长度为2048个扇区的段以条带的方式映射的到/dev/sda设备的第1024号扇区以及/dev/sdb设备的第0号扇区开始的区域。同时告诉内核这个条带类型的target driver存在2个条带设备与逻辑设备做映射,并且条带的大小是64个扇区,使得驱动可以该值来拆分跨设备的IO请求。

例子3中将逻辑设备从0号扇区开始的,长度为4711个扇区的段以镜像的方式映射到/dev/sda设备的第2048个扇区以及/dev/sdb设备的第1024号扇区开始的区域。

映射表确定后,创建、删除逻辑设备的操作就相对简单,通过dmsetup如下命令就可以完成相应的操作。

dmsetup create 设备名 映射表文件 /* 根据指定的映射表创建一个逻辑设备 */

dmsetup reload 设备名 映射表文件 /* 为指定设备从磁盘中读取映射文件,重新构建映射关系 */

dmsetup remove 设备名 /* 删除指定的逻辑设备 */

当用户空间根据映射表下达创建逻辑设备命令后,device mapper在内核中就根据传入的参数和映射关系建立逻辑地址到物理地址的映射关系。根据映射表例子1中的映射关系建立的设备如图4所示,图中的下半部分就抽象地描绘出了按照该映射表在内核中建立的逻辑地址到物理地址的映射关系。

Device mapper的用户空间部分对开发者要实现自己的存储管理工具来说是可选的,事实上,很多我们常见的逻辑卷管理器,比如LVM2、dmraid等工具都利用device mapper的提供的device mapper用户空间库,根据自己的管理需求建立独立的一套管理工具,而并没有使用它提供的dmsetup工具,甚至IBM的开源项目企业级的逻辑卷管理系统-EVMS,在实现中都没有采用device mapper的用户空间库,完全根据内核中的ioctl定义实现了一套自己的函数库。

Target Driver

Device mapper提供了一个统一的架构,通过target driver 插件的方式允许用户根据实际的需要指定自己的IO处理规则,因此target driver充分体现了device mapper的灵活性。在上文中我们已经不止一次的提到过target driver,也描述过target driver的功能,在这里我们结合最简单的linear target driver具体介绍target driver的实现。

Target driver主要定义对IO请求的处理规则,在device mapper中对target driver的操作已定义好了统一的接口,在实现中该接口由我们上文提到的target_type结构中定义,它定义了以下target driver的方法:

  1. 1. 构建target device 的方法;

  2. 2. 删除target device 的方法;

  3. 3. Target的映射IO请求的方法;

  4. 4. Target结束IO请求的方法;

  5. 5. 暂停target device读写的方法;

  6. 6. 恢复target device读写的访问;

  7. 7. 获取当前target device状态的访问;

  8. 8. Target 处理用户消息的方法;

用户可以根据具体需求选择性地实现上述方法,但一般最少要实现前3种方法,否则在device mapper下不能够正常的工作。linear target driver就只实现了前3种方法和方法7,它完成逻辑地址空间到物理地址空间的线性映射,可以将多个物理设备以线性连接的方式组成一个逻辑设备,就如图4中描述的那样,通过linear target driver将/dev/sda、/dev/sdb、/dev/sdc的三段连续空间组成了一个大的逻辑块设备。Linear target的实现很简单,它的创建和删除方法主要完成申请和释放描述linear target device所用结构的内存资源;IO映射处理方法的实现更是简单,如下代码所示:

static int linear_map(struct dm_target *ti, struct bio *bio,
union map_info *map_context)
{
struct linear_c *lc = (struct linear_c *) ti->private;
bio->bi_bdev = lc->dev->bdev;
bio->bi_sector = lc->start + (bio->bi_sector - ti->begin);
return 1;
}

该映射方法就是将发送给逻辑设备mapped device的bio请求,根据映射关系以线性的方式重新定向到linear target device所表示物理设备的相应位置,如代码所示具体实现方法就是修改bio的bi_bdev设备指针为target device对应的设备指针,并根据target device的起始地址和该bio请求在mapped device设备上的偏移值改变IO请求开始的扇区号bi_sector,从而完成IO请求的重定向。其他target driver的实现也都大同小异,按照device mapper所定义的接口规范,结合自己需要的功能进行实现即可,这里就不一一介绍了,有兴趣的读者可以看内核中具体的target driver代码。

总结

Device Mapper是Linux操作系统中块设备一级提供的一种主要映射机制,现在已被多数Linux下的逻辑卷管理器所采用。在该机制下,实现用户自定义的存储资源管理策略变得极其方便。理解device mapper所提供的映射机制,也是进一步理解Linux下一些常见逻辑卷管理器实现的基础。

原文来自:http://blog.chinaunix.net/uid-20214278-id-1720238.html
本文地址:https://www.linuxprobe.com/linux-device-mapper-user.html
Linux命令大全:https://www.linuxcool.com/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
亚洲首个要倒下的国家?曾被看好会取代中国,今却步入日本后尘

亚洲首个要倒下的国家?曾被看好会取代中国,今却步入日本后尘

珺瑶婉史
2026-05-02 19:10:06
梅根在瑞士出席活动着装引发网友不满,在社交媒体上遭到猛烈抨击

梅根在瑞士出席活动着装引发网友不满,在社交媒体上遭到猛烈抨击

无意争春
2026-05-19 13:10:27
收手吧钟汉良,假发边明显、疲态尽显,谁要看50岁装嫩谈恋爱?

收手吧钟汉良,假发边明显、疲态尽显,谁要看50岁装嫩谈恋爱?

一娱三分地
2026-04-14 13:56:40
特朗普访华结束后,印媒终于反应过来了:中国已经成为“美国+1”

特朗普访华结束后,印媒终于反应过来了:中国已经成为“美国+1”

小陆搞笑日常
2026-05-22 00:46:37
天津24岁女子跳伞溺亡后续!女方长的很漂亮,更多细节曝光

天津24岁女子跳伞溺亡后续!女方长的很漂亮,更多细节曝光

小鋭有话说
2026-05-19 08:16:41
对睡眠好的8种食物,每天换着吃,睡得快质量高,人也变得显年轻

对睡眠好的8种食物,每天换着吃,睡得快质量高,人也变得显年轻

美食店主
2026-05-18 07:30:25
文班:费大量精力追分却让胜利溜走感到沮丧,第四节我打得不好

文班:费大量精力追分却让胜利溜走感到沮丧,第四节我打得不好

懂球帝
2026-05-21 13:43:22
被戳伤眼球的女教师提了三个要求!

被戳伤眼球的女教师提了三个要求!

新动察
2026-05-21 14:18:11
50岁母亲遭儿子长期侵害求助无门,怒而杀子法院判三缓四藏深意

50岁母亲遭儿子长期侵害求助无门,怒而杀子法院判三缓四藏深意

华夏新声
2026-05-15 06:12:32
经纪人:国米应该不会和阿切尔比续约;因扎吉没有回欧洲的想法

经纪人:国米应该不会和阿切尔比续约;因扎吉没有回欧洲的想法

懂球帝
2026-05-21 15:09:16
男子买1万多元榴莲错付成11万多元,几个月后才发现,原是销售员谎称办退款偷偷侵占,商家:员工已被警方抓获,自己先垫付了10万余元给买家

男子买1万多元榴莲错付成11万多元,几个月后才发现,原是销售员谎称办退款偷偷侵占,商家:员工已被警方抓获,自己先垫付了10万余元给买家

极目新闻
2026-05-21 17:07:16
95岁巴菲特押注大暴跌:手握4000亿现金,真正的聪明人都在等风暴

95岁巴菲特押注大暴跌:手握4000亿现金,真正的聪明人都在等风暴

魏家东
2026-05-05 10:13:24
美国学者:如果不是毛主席当年那个决定,中国早已重蹈苏联覆辙

美国学者:如果不是毛主席当年那个决定,中国早已重蹈苏联覆辙

春日在捕月
2026-05-21 22:36:07
中国不再隐藏实力了,准备要给全世界上一课

中国不再隐藏实力了,准备要给全世界上一课

贱议你读史
2026-05-21 00:07:31
四川今年首发山洪灾害蓝色预警、暴雨蓝色预警!暴雨、大暴雨,9级大风都要来

四川今年首发山洪灾害蓝色预警、暴雨蓝色预警!暴雨、大暴雨,9级大风都要来

鲁中晨报
2026-05-21 17:34:25
6死7伤!乡政府大楼被炸震惊中央,四川凉山州6.26特大爆炸案始末

6死7伤!乡政府大楼被炸震惊中央,四川凉山州6.26特大爆炸案始末

易玄
2024-09-11 10:52:41
乌克兰通过法律程序,将“俄乌战争”,命名为“乌克兰独立战争”

乌克兰通过法律程序,将“俄乌战争”,命名为“乌克兰独立战争”

我心纵横天地间
2026-01-22 18:41:25
全球首部95分钟AI长片将在戛纳电影节首映,由Seedance 2.0制作

全球首部95分钟AI长片将在戛纳电影节首映,由Seedance 2.0制作

IT之家
2026-05-20 18:27:26
如何看待2025年上海新出生人口仅有10.7万,评论区吵翻天…

如何看待2025年上海新出生人口仅有10.7万,评论区吵翻天…

慧翔百科
2026-05-21 08:29:04
厦门中毒事故致1死3伤,10人被处理,公司104万罚款未缴

厦门中毒事故致1死3伤,10人被处理,公司104万罚款未缴

娱乐的硬糖吖
2026-05-22 01:24:23
2026-05-22 04:11:00
孙有匪 incentive-icons
孙有匪
科技
1595文章数 2008关注度
往期回顾 全部

科技要闻

小米YU7 GT正式发布:售价38.99万元

头条要闻

女子高空跳伞遇难 原计划今年订婚

头条要闻

女子高空跳伞遇难 原计划今年订婚

体育要闻

常住人口7000的小镇,拥有了一支德甲球队

娱乐要闻

反转!金秀贤与金赛纶未成年时交往不实

财经要闻

潮水退去,裸泳的一定不止五粮液

汽车要闻

雷军:YU7首战Model Y八败两胜 输给全球销冠不丢人

态度原创

本地
教育
手机
数码
公开课

本地新闻

用云锦的方式,打开江苏南京

教育要闻

高考地理|气候详解

手机要闻

AYANEO Pocket AIR Mini安卓掌机Arcade Home联名款发布,739元起

数码要闻

精准操控不误触!一加Ace 6至尊版让点击精准如物理外挂

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版