日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
深入講解一下Linux的Device Mapper:用戶空間

Device mapper在用戶空間相對(duì)簡(jiǎn)單,主要包括device mapper庫(kù)和dmsetup工具。Device mapper庫(kù)就是對(duì)ioctl、用戶空間創(chuàng)建刪除device mapper邏輯設(shè)備所需必要操作的封裝,dmsetup是一個(gè)提供給用戶直接可用的創(chuàng)建刪除device mapper設(shè)備的命令行工具。

目前成都創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、青川網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

因?yàn)樗鼈兊墓δ芎土鞒滔鄬?duì)簡(jiǎn)單,在本文中對(duì)它們的細(xì)節(jié)就不介紹了,用戶空間主要負(fù)責(zé)如下工作:

發(fā)現(xiàn)每個(gè)mapped device相關(guān)的target device;
根據(jù)配置信息創(chuàng)建映射表;
將用戶空間構(gòu)建好的映射表傳入內(nèi)核,讓內(nèi)核構(gòu)建該mapped device對(duì)應(yīng)的dm_table結(jié)構(gòu);
保存當(dāng)前的映射信息,以便未來(lái)重新構(gòu)建。

以下我們主要通過(guò)實(shí)例來(lái)說(shuō)明dmsetup的使用,同時(shí)進(jìn)一步說(shuō)明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三個(gè)地址范圍分別以線形映射的方式映射到/dev/sda設(shè)備第204號(hào)扇區(qū)、/dev/sdb設(shè)備第766號(hào)扇區(qū)和/dev/sdc設(shè)備的第0號(hào)扇區(qū)開(kāi)始的區(qū)域。

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

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

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

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

dmsetup reload 設(shè)備名 映射表文件 /* 為指定設(shè)備從磁盤(pán)中讀取映射文件,重新構(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)系。

Device mapper的用戶空間部分對(duì)開(kāi)發(fā)者要實(shí)現(xiàn)自己的存儲(chǔ)管理工具來(lái)說(shuō)是可選的,事實(shí)上,很多我們常見(jiàn)的邏輯卷管理器,比如LVM2、dmraid等工具都利用device mapper的提供的device mapper用戶空間庫(kù),根據(jù)自己的管理需求建立獨(dú)立的一套管理工具,而并沒(méi)有使用它提供的dmsetup工具,甚至IBM的開(kāi)源項(xiàng)目企業(yè)級(jí)的邏輯卷管理系統(tǒng)-EVMS,在實(shí)現(xiàn)中都沒(méi)有采用device mapper的用戶空間庫(kù),完全根據(jù)內(nèi)核中的ioctl定義實(shí)現(xiàn)了一套自己的函數(shù)庫(kù)。

Target Driver

Device mapper提供了一個(gè)統(tǒng)一的架構(gòu),通過(guò)target driver 插件的方式允許用戶根據(jù)實(shí)際的需要指定自己的IO處理規(guī)則,因此target driver充分體現(xiàn)了device mapper的靈活性。在上文中我們已經(jīng)不止一次的提到過(guò)target driver,也描述過(guò)target driver的功能,在這里我們結(jié)合最簡(jiǎn)單的linear target driver具體介紹target driver的實(shí)現(xiàn)。

Target driver主要定義對(duì)IO請(qǐng)求的處理規(guī)則,在device mapper中對(duì)target driver的操作已定義好了統(tǒng)一的接口,在實(shí)現(xiàn)中該接口由我們上文提到的target_type結(jié)構(gòu)中定義,它定義了以下target driver的方法:

構(gòu)建target device 的方法;
刪除target device 的方法;
Target的映射IO請(qǐng)求的方法;
Target結(jié)束IO請(qǐng)求的方法;
暫停target device讀寫(xiě)的方法;
恢復(fù)target device讀寫(xiě)的訪問(wèn);
獲取當(dāng)前target device狀態(tài)的訪問(wèn);
Target 處理用戶消息的方法;

用戶可以根據(jù)具體需求選擇性地實(shí)現(xiàn)上述方法,但一般最少要實(shí)現(xiàn)前3種方法,否則在device mapper下不能夠正常的工作。linear target driver就只實(shí)現(xiàn)了前3種方法和方法7,它完成邏輯地址空間到物理地址空間的線性映射,可以將多個(gè)物理設(shè)備以線性連接的方式組成一個(gè)邏輯設(shè)備,就如圖4中描述的那樣,通過(guò)linear target driver將/dev/sda、/dev/sdb、/dev/sdc的三段連續(xù)空間組成了一個(gè)大的邏輯塊設(shè)備。Linear target的實(shí)現(xiàn)很簡(jiǎn)單,它的創(chuàng)建和刪除方法主要完成申請(qǐng)和釋放描述linear target device所用結(jié)構(gòu)的內(nèi)存資源;IO映射處理方法的實(shí)現(xiàn)更是簡(jiǎn)單,如下代碼所示:

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;
}

該映射方法就是將發(fā)送給邏輯設(shè)備mapped device的bio請(qǐng)求,根據(jù)映射關(guān)系以線性的方式重新定向到linear target device所表示物理設(shè)備的相應(yīng)位置,如代碼所示具體實(shí)現(xiàn)方法就是修改bio的bi_bdev設(shè)備指針為target device對(duì)應(yīng)的設(shè)備指針,并根據(jù)target device的起始地址和該bio請(qǐng)求在mapped device設(shè)備上的偏移值改變IO請(qǐng)求開(kāi)始的扇區(qū)號(hào)bi_sector,從而完成IO請(qǐng)求的重定向。其他target driver的實(shí)現(xiàn)也都大同小異,按照device mapper所定義的接口規(guī)范,結(jié)合自己需要的功能進(jìn)行實(shí)現(xiàn)即可,這里就不一一介紹了,有興趣的讀者可以看內(nèi)核中具體的target driver代碼。

總結(jié)

Device Mapper是Linux操作系統(tǒng)中塊設(shè)備一級(jí)提供的一種主要映射機(jī)制,現(xiàn)在已被多數(shù)Linux下的邏輯卷管理器所采用。在該機(jī)制下,實(shí)現(xiàn)用戶自定義的存儲(chǔ)資源管理策略變得極其方便。理解device mapper所提供的映射機(jī)制,也是進(jìn)一步理解Linux下一些常見(jiàn)邏輯卷管理器實(shí)現(xiàn)的基礎(chǔ)。


新聞標(biāo)題:深入講解一下Linux的Device Mapper:用戶空間
網(wǎng)站路徑:http://m.5511xx.com/article/cdihioi.html