重要概念
struct linear_c ;
該target device的定義相當簡單,就只包括了表示對應物理裝置的dm_dev結構指標和在該物理裝置中以扇區為單位的偏移位址start。上述幾個資料結構關係如圖3所示:
io流1、 將這些bio在本驅動內部排隊等待以後進行處理;
2、 將bio重新定向到乙個或多個target device上或者每個target device上的不同扇區;
io請求就按照上文中描述的過程在圖2中所示的裝置樹中逐層進行處理,直到io請求結束。小結
2、 根據配置資訊建立對映表;
4、 儲存當前的對映資訊,以便未來重新構建。
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 裝置名 /* 刪除指定的邏輯裝置 */
圖4 根據例子1中對映表在核心中建立的邏輯裝置
1、 構建target device 的方法;
2、 刪除target device 的方法;
3、 target的對映io請求的方法;
4、 target結束io請求的方法;
5、 暫停target device讀寫的方法;
6、 恢復target device讀寫的訪問;
7、 獲取當前target device狀態的訪問;
8、 target 處理使用者訊息的方法;
static int linear_map(struct dm_target *ti, struct bio *bio,union map_info *map_context)
Linux系統的幫助系統
事實上,linux系統中本身就帶有很多很多很多的命令,並且隨著有越來越多的開發者做出的第三方貢獻,導致命令越來越來越多,講這些命令一一記下基本是不太可能的.所以linux系統就有了幫助系統,來幫助我們檢視某個命令具體是怎麼用的,以及這個命令的效果等等資訊.為什麼說是幫助系統呢?因為他的功能真的很大很...
linux系統的時間
linux系統的時間 通常,作業系統可以使用三種方法來表示系統的當前時間與日期 最簡單的一種方法就是直接用乙個64位的計數器來對時鐘滴答進行計數。第二種方法就是用乙個32位計數器來對秒進行計數,同時還用乙個32位的輔助計數器對時鐘滴答計數,之子累積到一秒為止。因為232超過136年,因此這種方法直至...
Linux的系統架構
linux系統從應用角度來看,分為核心空間和使用者空間兩個部分。核心空間是linux作業系統的主要部分,但是僅有核心的作業系統是不能完成使用者任務。1.程序排程 程序排程指的是系統對程序的多種狀態之間轉換的策略。linux下的程序排程有3種策略 sched other sched fifo和sche...