首頁 > php教程 > PHP开发 > 主體

Linux系統核心中的Device Mapper機制 (1)(5)

黄舟
發布: 2016-12-23 14:11:24
原創
1160 人瀏覽過

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、 建構target device 的方法;

2、刪除target device 的方法;

3、Target的對應IO 請求的方法;

3、Target的映射IO請求的方法;

5、暫停 target device讀寫的方法;

6、恢復 target device讀寫的存取;

7、 取得目前 target device狀態的存取;

8、Target 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程式碼。

(T114)

 以上就是Linux系統核心中的Device Mapper機制 (1)(5)的內容,更多相關內容請關注PHP中文網(www.php.cn)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!