(文章來源:itworld123)
企業(yè)級(jí)存儲(chǔ)系統(tǒng)通常也是運(yùn)行在常規(guī)操作系統(tǒng)之上的,比如早期的EMC的中端存儲(chǔ)是運(yùn)行在Windows XP平臺(tái)上的,而國內(nèi)的存儲(chǔ)廠商的產(chǎn)品通常是基于Linux平臺(tái)。分布式存儲(chǔ)更是不例外,目前分布式存儲(chǔ)通常都是運(yùn)行在Linux操作系統(tǒng)之上。
為了更好地理解存儲(chǔ)技術(shù),從操作系統(tǒng)層面理解磁盤就顯得尤為重要了。為了便于學(xué)習(xí),本文以Linux操作系統(tǒng)作為參考,介紹磁盤在Linux操作系統(tǒng)層面的相關(guān)內(nèi)容。我們通常看到的磁盤是在/dev目錄下的文件(設(shè)備)。在Linux操作系統(tǒng)中一切皆文件,因此磁盤設(shè)備本身也是以文件的形態(tài)呈現(xiàn)的。比如某個(gè)操作系統(tǒng)下面我們可能會(huì)看到如下內(nèi)容。
上述設(shè)備中形似sdX的設(shè)備為SCSI磁盤設(shè)備。無論是基于SAS、iSCSI還是FC的磁盤設(shè)備,大概都是這個(gè)樣子。形似dm-X的是Device Map塊設(shè)備,也就是通過LVM進(jìn)行管理的設(shè)備,這種設(shè)備是一種邏輯設(shè)備。在Linux操作系統(tǒng)中塊設(shè)備的種類很多,有本地磁盤設(shè)備、有SAN設(shè)備還有基于網(wǎng)絡(luò)的塊設(shè)備。在虛擬機(jī)中塊設(shè)備又呈現(xiàn)為另外一種文件名,比如在Xen虛擬機(jī)中偽xvdX。
雖然名稱差異很大,但是在Linux操作系統(tǒng)內(nèi)核中的實(shí)現(xiàn)確實(shí)非常簡單。在內(nèi)核中任何磁盤塊設(shè)備都是通過調(diào)用add_disk函數(shù)完成的。在《Linux設(shè)備驅(qū)動(dòng)程序》這本書對(duì)塊設(shè)備進(jìn)行了詳細(xì)的介紹,并且可以通過非常簡單的代碼實(shí)現(xiàn)一個(gè)自己的塊設(shè)備。
SAN的全稱是存儲(chǔ)區(qū)域網(wǎng)絡(luò),也就是通過網(wǎng)絡(luò)的形式實(shí)現(xiàn)計(jì)算節(jié)點(diǎn)(客戶端)對(duì)存儲(chǔ)系統(tǒng)的訪問。在存儲(chǔ)系統(tǒng)中可以劃分若干個(gè)LUN,這些LUN通過網(wǎng)絡(luò)的方式連接,在客戶端呈現(xiàn)為一個(gè)磁盤。如圖所示,存儲(chǔ)系統(tǒng)的資源在計(jì)算節(jié)點(diǎn)以磁盤的形式呈現(xiàn)。
對(duì)于Linux操作系統(tǒng)來說,塊設(shè)備就好像一個(gè)文件一樣。任何讀寫數(shù)據(jù)都是以偏移和長度為基本信息下發(fā)到磁盤塊設(shè)備進(jìn)行處理。因此,對(duì)于塊設(shè)備來說,它并不關(guān)系這些數(shù)據(jù)在底層是如何存儲(chǔ)。對(duì)于SAN存儲(chǔ)來說,當(dāng)塊設(shè)備接收到請(qǐng)求后,會(huì)調(diào)用底層協(xié)議層的接口將請(qǐng)求轉(zhuǎn)發(fā)出去。SAN存儲(chǔ)使用的是SCSI協(xié)議,因此,塊設(shè)備的請(qǐng)求都會(huì)轉(zhuǎn)換為SCSI協(xié)議進(jìn)行處理。
Linux內(nèi)核實(shí)現(xiàn)了一個(gè)SCSI子系統(tǒng),所有SCSI設(shè)備及驅(qū)動(dòng)都基于該子系統(tǒng)實(shí)現(xiàn)。該SCSI子系統(tǒng)分為3層,SCSI上層、SCSI中層和SCSI下層。其中上層是設(shè)備層,實(shí)現(xiàn)比如磁盤驅(qū)動(dòng)、磁帶驅(qū)動(dòng)或者光盤等所有的塊設(shè)備。中層是通用層,實(shí)現(xiàn)SCSI的公共功能,比如錯(cuò)誤處理等內(nèi)容。下層是硬件驅(qū)動(dòng)層,比如FC-HBA驅(qū)動(dòng)和SAS-HBA卡驅(qū)動(dòng)等等。
針對(duì)Linux磁盤設(shè)備來說,其發(fā)送的請(qǐng)求經(jīng)過SCSI層后會(huì)封裝為SCSI協(xié)議包,然后通過底層的協(xié)議發(fā)送出去。對(duì)于塊設(shè)備,底層協(xié)議對(duì)用戶來時(shí)是透明的,用戶在使用塊設(shè)備的時(shí)候也不用關(guān)心塊設(shè)備底層所使用的通信協(xié)議。但是對(duì)于SCSI子系統(tǒng)來說是需要關(guān)系底層通信協(xié)議的,因?yàn)樗{(diào)用底層驅(qū)動(dòng)的接口將數(shù)據(jù)通過該驅(qū)動(dòng)發(fā)送出去。對(duì)底層驅(qū)動(dòng)的調(diào)用是通過其回調(diào)函數(shù)完成的,回調(diào)函數(shù)的注冊(cè)發(fā)生在設(shè)備初始化的時(shí)候。
至此,我們了解到SAN存儲(chǔ)磁盤與本地磁盤并無本質(zhì)的差別,核心差異在與其數(shù)據(jù)需要通過某種協(xié)議與比較遠(yuǎn)的設(shè)備進(jìn)行數(shù)據(jù)的交換。SAN存儲(chǔ)最早只支持FC協(xié)議。后來隨著以太網(wǎng)技術(shù)的飛速發(fā)展,IBM發(fā)明了iSCSI協(xié)議,該協(xié)議是基于TCP/IP協(xié)議實(shí)現(xiàn)的存儲(chǔ)協(xié)議。iSCSI協(xié)議可以簡單地理解為一個(gè)應(yīng)用層的協(xié)議,類似HTTP協(xié)議。只不過HTTP協(xié)議用于傳輸Web內(nèi)容,而iSCSI協(xié)議則用于傳輸磁盤內(nèi)容。
可以看出,iSCSI其實(shí)就是對(duì)SCSI協(xié)議的封裝,然后通過以太網(wǎng)進(jìn)行傳輸。說白了,iSCSI就是以以太網(wǎng)作為傳輸媒介的SCSI協(xié)議。iSCSI協(xié)議分為客戶端和服務(wù)端兩部分,在iSCSI協(xié)議中稱為啟動(dòng)器和目標(biāo)器。其中啟動(dòng)器就是計(jì)算端,而目標(biāo)器就是存儲(chǔ)端。
(責(zé)任編輯:fqj)
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7142瀏覽量
125545 -
磁盤
+關(guān)注
關(guān)注
1文章
390瀏覽量
25819
發(fā)布評(píng)論請(qǐng)先 登錄
深度操作系統(tǒng)deepin 25正式發(fā)布
國產(chǎn)操作系統(tǒng)都是誰在用?國內(nèi)企事業(yè)單位真實(shí)使用情況深度解析

理想汽車智駕操作系統(tǒng)解讀

deepin深度操作系統(tǒng)適配Milk-V Megrez開發(fā)板
【「鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)」閱讀體驗(yàn)】01-初始華為鴻蒙
DeepEdge10芯片成功適配國產(chǎn)鴻蒙操作系統(tǒng)
國產(chǎn)銀河麒麟操作系統(tǒng)V10和星光麒麟V1.0操作系統(tǒng)如何選擇?

deepin操作系統(tǒng)介紹

名單公布!【書籍評(píng)測活動(dòng)NO.53】鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)
工控機(jī)支持什么操作系統(tǒng)
全志Linux磁盤操作基礎(chǔ)命令
簡單認(rèn)識(shí)RTOS實(shí)時(shí)操作系統(tǒng)
操作系統(tǒng)的內(nèi)存布局介紹

Linux磁盤IO詳細(xì)解析

評(píng)論