成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux內(nèi)核中的DeviceMapper機(jī)制

系統(tǒng) Linux
本文結(jié)合具體代碼對 Linux 內(nèi)核中的 device mapper 映射機(jī)制進(jìn)行了介紹。Device mapper 是 Linux 2.6 內(nèi)核中提供的一種從邏輯設(shè)備到物理設(shè)備的映射框架機(jī)制,在該機(jī)制下......

本文結(jié)合具體代碼對 Linux 內(nèi)核中的 device mapper 映射機(jī)制進(jìn)行了介紹。Device mapper 是 Linux 2.6 內(nèi)核中提供的一種從邏輯設(shè)備到物理設(shè)備的映射框架機(jī)制,在該機(jī)制下,用戶可以很方便的根據(jù)自己的需要制定實現(xiàn)存儲資源的管理策略,當(dāng)前比較流行的 Linux 下的邏輯卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于該機(jī)制實現(xiàn)的。理解該機(jī)制是進(jìn)一步分析、理解這些卷管理器的實現(xiàn)及設(shè)計的基礎(chǔ)。通過本文也可以進(jìn)一步理解 Linux 系統(tǒng)塊一級 IO的設(shè)計和實現(xiàn)。

Device Mapper 是 Linux2.6 內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機(jī)制,它為實現(xiàn)用于存儲資源管理的塊設(shè)備驅(qū)動提供了一個高度模塊化的內(nèi)核架構(gòu),如圖 1。

在內(nèi)核中它通過一個一個模塊化的 target driver 插件實現(xiàn)對 IO 請求的過濾或者重新定向等工作,當(dāng)前已經(jīng)實現(xiàn)的 target driver 插件包括軟 raid、軟加密、邏輯卷條帶、多路徑、鏡像、快照等,圖中 linear、mirror、snapshot、multipath 表示的就是這些 target driver。Device mapper 進(jìn)一步體現(xiàn)了在 Linux 內(nèi)核設(shè)計中策略和機(jī)制分離的原則,將所有與策略相關(guān)的工作放到用戶空間完成,內(nèi)核中主要提供完成這些策略所需要的機(jī)制。Device mapper 用戶空間相關(guān)部分主要負(fù)責(zé)配置具體的策略和控制邏輯,比如邏輯設(shè)備和哪些物理設(shè)備建立映射,怎么建立這些映射關(guān)系等等,而具體過濾和重定向 IO 請求的工作由內(nèi)核中相關(guān)代碼完成。因此整個 device mapper 機(jī)制由兩部分組成--內(nèi)核空間的 device mapper 驅(qū)動、用戶空間的device mapper 庫以及它提供的 dmsetup 工具。在下文中,我們分內(nèi)核和用戶空間兩部分進(jìn)行介紹。

內(nèi)核部分

Device mapper 的內(nèi)核相關(guān)代碼已經(jīng)作為 Linux 2.6 內(nèi)核發(fā)布版的一部分集成到內(nèi)核源碼中了,相關(guān)代碼在內(nèi)核源碼的 driver/md/ 目錄中,其代碼文件可以劃分為實現(xiàn) device mapper 內(nèi)核中基本架構(gòu)的文件和實現(xiàn)具體映射工作的 target driver 插件文件兩部分。文章下面的分析結(jié)果主要是基于上述源碼文件得到的。

用戶空間部分

Device mapper在用戶空間相對簡單,主要包括device mapper庫和dmsetup工具。Device mapper庫就是對ioctl、用戶空間創(chuàng)建刪除device mapper邏輯設(shè)備所需必要操作的封裝,dmsetup是一個提供給用戶直接可用的創(chuàng)建刪除device mapper設(shè)備的命令行工具。因為它們的功能和流程相對簡單,在本文中對它們的細(xì)節(jié)就不介紹了,用戶空間主要負(fù)責(zé)如下工作:

1、 發(fā)現(xiàn)每個mapped device相關(guān)的target device;

2、 根據(jù)配置信息創(chuàng)建映射表;

3、 將用戶空間構(gòu)建好的映射表傳入內(nèi)核,讓內(nèi)核構(gòu)建該mapped device對應(yīng)的dm_table結(jié)構(gòu);

4、 保存當(dāng)前的映射信息,以便未來重新構(gòu)建。

以下我們主要通過實例來說明dmsetup的使用,同時進(jìn)一步說明device mapper這種映射機(jī)制。用戶空間中最主要的工作就是構(gòu)建并保存映射表,下面給出一些映射表的例子:

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中將邏輯設(shè)備0~1023扇區(qū)、1024~1535扇區(qū)以及1536~1663三個地址范圍分別以線形映射的方式映射到/dev/sda設(shè)備第204號扇區(qū)、/dev/sdb設(shè)備第766號扇區(qū)和/dev/sdc設(shè)備的第0號扇區(qū)開始的區(qū)域。

例子2中將邏輯設(shè)備從0號扇區(qū)開始的,長度為2048個扇區(qū)的段以條帶的方式映射的到/dev/sda設(shè)備的第 1024號扇區(qū)以及/dev/sdb設(shè)備的第0號扇區(qū)開始的區(qū)域。同時告訴內(nèi)核這個條帶類型的target driver存在2個條帶設(shè)備與邏輯設(shè)備做映射,并且條帶的大小是64個扇區(qū),使得驅(qū)動可以該值來拆分跨設(shè)備的IO請求。

例子3中將邏輯設(shè)備從0號扇區(qū)開始的,長度為4711個扇區(qū)的段以鏡像的方式映射到/dev/sda設(shè)備的第2048個扇區(qū)以及/dev/sdb設(shè)備的第1024號扇區(qū)開始的區(qū)域。

映射表確定后,創(chuàng)建、刪除邏輯設(shè)備的操作就相對簡單,通過dmsetup如下命令就可以完成相應(yīng)的操作。

dmsetup create 設(shè)備名 映射表文件 /* 根據(jù)指定的映射表創(chuàng)建一個邏輯設(shè)備 */

dmsetup reload 設(shè)備名 映射表文件 /* 為指定設(shè)備從磁盤中讀取映射文件,重新構(gòu)建映射關(guān)系 */

dmsetup remove 設(shè)備名 /* 刪除指定的邏輯設(shè)備 */

當(dāng)用戶空間根據(jù)映射表下達(dá)創(chuàng)建邏輯設(shè)備命令后,device mapper在內(nèi)核中就根據(jù)傳入的參數(shù)和映射關(guān)系建立邏輯地址到物理地址的映射關(guān)系。根據(jù)映射表例子1中的映射關(guān)系建立的設(shè)備如圖4所示,圖中的下半部分就抽象地描繪出了按照該映射表在內(nèi)核中建立的邏輯地址到物理地址的映射關(guān)系。

【編輯推薦】

  1. Linux內(nèi)核的文件預(yù)讀詳細(xì)解析
  2. Linux下用gdb檢測內(nèi)核rootkit的方法
  3. 詳解LINUX 2.4.x 內(nèi)核網(wǎng)絡(luò)安全框架
責(zé)任編輯:趙寧寧 來源: chinaitlab
相關(guān)推薦

2019-04-10 13:43:19

Linux內(nèi)核進(jìn)程負(fù)載

2017-08-16 16:20:01

Linux內(nèi)核態(tài)搶占用戶態(tài)搶占

2025-04-18 04:05:00

2020-11-20 07:55:55

Linux內(nèi)核映射

2025-03-31 00:01:12

2009-09-29 10:45:17

UnixLinuxshell

2011-01-14 13:50:37

2009-09-28 10:09:09

Linux內(nèi)核Linux循環(huán)鏈表

2023-05-15 08:58:41

塊設(shè)備驅(qū)動Linux

2015-08-26 11:27:26

DockerDeviceMappe分層鏡像

2016-09-20 15:21:35

LinuxInnoDBMysql

2025-01-03 08:53:59

2009-12-29 10:24:51

Linux內(nèi)核循環(huán)鏈表

2010-07-20 10:04:25

Linux內(nèi)核編譯

2017-03-30 10:13:11

Linux內(nèi)核文件系統(tǒng)

2023-04-28 08:42:08

Linux內(nèi)核SPI驅(qū)動

2017-08-01 17:34:47

Linux內(nèi)核驅(qū)動文件讀寫

2023-05-12 07:27:24

Linux內(nèi)核網(wǎng)絡(luò)設(shè)備驅(qū)動

2016-12-26 08:56:09

LinuxDTraceBPF

2017-09-04 15:15:48

Linux內(nèi)核內(nèi)存屏障
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 免费在线成人网 | 国产精品视频一区二区三区不卡 | 国产激情小视频 | 国产精品免费一区二区三区 | 日韩成人影院 | 亚洲综合色视频在线观看 | 成在线人视频免费视频 | 一级毛片视频在线 | 伊人亚洲| 一区二区免费视频 | 欧洲一区视频 | 97视频网站| 日本一区二区三区在线观看 | 国产在线中文字幕 | 亚洲高清在线观看 | 免费 视频 1级 | 亚洲国产精品第一区二区 | 91久久久久久 | 先锋av资源网 | 婷婷在线网站 | 日韩av手机在线观看 | 国产色99精品9i | 日韩免费av网站 | 精品蜜桃一区二区三区 | 一级黄色片免费 | 免费啪啪 | 成人精品| 一级黄色片网站 | 久久久国产一区二区三区四区小说 | 国产欧美一区二区在线观看 | 国产成人精品一区二区三区在线观看 | 99精品视频在线 | 一区二区免费高清视频 | 国产色婷婷精品综合在线手机播放 | 日韩中文字幕免费 | 在线观看国产视频 | 成人高清网站 | 9久9久9久女女女九九九一九 | 日韩欧美一区在线 | 国产日韩欧美一区二区在线播放 | 日本网站免费在线观看 |