專利名稱:利用iSCSI協(xié)議訪問邏輯設(shè)備的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種iSCSI協(xié)議實現(xiàn)方法,特別是涉及一種利用iSCSI協(xié)議訪問邏輯設(shè)備的方法。
背景技術(shù):
iSCSI(互聯(lián)網(wǎng)小型計算機系統(tǒng)接口),即internet SCSI,是一種在Internet協(xié)議網(wǎng)絡(luò)上,特別是以太網(wǎng)上進行數(shù)據(jù)塊傳輸?shù)臉?biāo)準。從根本上說,iSCSI協(xié)議是一種跨過IP網(wǎng)絡(luò)來傳輸潛伏時間短的SCSI數(shù)據(jù)塊的方法。
SCSI(小型計算機系統(tǒng)接口)是一種廣泛使用的連接硬盤和計算機的技術(shù)標(biāo)準,iSCSI這種技術(shù)則是將該技術(shù)應(yīng)用到網(wǎng)絡(luò)連接上。SCSI是一個在物理設(shè)備(如驅(qū)動器、打印機、計算機等等)之間通信的面向數(shù)據(jù)塊的客戶機/服務(wù)器的I/O協(xié)議。發(fā)送一個SCSI指令的設(shè)備叫做發(fā)起設(shè)備(Initiator),也就是發(fā)出存取數(shù)據(jù)要求的一方,通常為服務(wù)器端或使用者計算機。接收并響應(yīng)要求的一方為目標(biāo)設(shè)備(Target),通常為儲存設(shè)備端。發(fā)起設(shè)備負責(zé)發(fā)送命令數(shù)據(jù)塊(Command Data Block,CDB),命令數(shù)據(jù)塊中包含有必須由接收CDB的目標(biāo)設(shè)備執(zhí)行的參數(shù)。SCSI傳輸器把這些CDB消息映像為物理的互聯(lián)以傳播這些信息。發(fā)起設(shè)備將SCSI任務(wù)發(fā)送給目標(biāo)設(shè)備以執(zhí)行一次OS級數(shù)據(jù)傳輸操作。一個目標(biāo)設(shè)備有一個或多個邏輯單元處理發(fā)起設(shè)備的請求命令,每個邏輯單元被分配給一個標(biāo)示編號或邏輯單元號(LogicalUnit Numbers,LUN)。每個包含處理命令的邏輯單元都被包含在一個CDB中,并由發(fā)起設(shè)備向目標(biāo)設(shè)備特定的邏輯單元發(fā)送。例如發(fā)起者請求讀取指定的數(shù)據(jù)塊,目標(biāo)設(shè)備的邏輯單元向發(fā)設(shè)備傳送相應(yīng)的數(shù)據(jù)塊,并通過中斷狀態(tài)指明請求已完成。而iSCSI的主要任務(wù)是,通過IP網(wǎng)絡(luò)在發(fā)起設(shè)備和目標(biāo)設(shè)備之間完成CDB的封裝、可靠轉(zhuǎn)送等處理。
iSCSI協(xié)議實現(xiàn)了在TCP/IP網(wǎng)絡(luò)上傳輸SCSI指令,使用戶能夠通過目前最被廣泛使用的以太網(wǎng)來訪問在網(wǎng)絡(luò)任何地點服務(wù)器上的塊(block)存儲設(shè)備。這些存儲設(shè)備可為硬盤、CD-ROM或其它硬件設(shè)備,但這些設(shè)備必須都能夠執(zhí)行SCSI指令。
在Linux中,幾乎所有的硬件設(shè)備都有其相應(yīng)的設(shè)備文件,如硬盤、CPU等等,并且許多生成的設(shè)備如磁盤冗余數(shù)組(Raid)也會有其對應(yīng)的設(shè)備文件。而Linux內(nèi)核通過設(shè)備文件和進程對話,所以內(nèi)核中的設(shè)備驅(qū)動程序可以通過它們和物理設(shè)備通信或執(zhí)行指令。
請參見圖1,目前在Linux下,此協(xié)議的大部分的目標(biāo)設(shè)備120端的實現(xiàn)辦法都是寫成一個Linux kernel module(內(nèi)核模塊),經(jīng)編譯后裝載到內(nèi)核之中,然后此Module便會在內(nèi)核中充當(dāng)網(wǎng)絡(luò)子系統(tǒng)(Network Subsystem)121和SCSI子系統(tǒng)(SCSI Subsystem)123的橋梁。iSCSI協(xié)議就是一個在網(wǎng)絡(luò)上封包和解包的過程,在網(wǎng)絡(luò)的一端,數(shù)據(jù)包被封裝成包括TCP/IP頭、iSCSI識別包和SCSI數(shù)據(jù)的三部分內(nèi)容,傳輸?shù)骄W(wǎng)絡(luò)另一端時,這三部分內(nèi)容分別被順序地解開。
首先從網(wǎng)絡(luò)子系統(tǒng)121中取得從發(fā)起設(shè)備110傳來的iSCSI PDU(協(xié)議數(shù)據(jù)單元),然后根據(jù)在PDU中不同的iSCSI指令,做相應(yīng)的處理及響應(yīng),然后傳回網(wǎng)絡(luò)子系統(tǒng)121。有很多PDU包含SCSI CDB,而這些CDB便會遞交至SCSI子系統(tǒng)123去處理,而處理完后的響應(yīng)便會以CDB的形式傳遞上來,iSCSI模塊122便再做相關(guān)的處理,然后再將這些PDU傳送至網(wǎng)絡(luò)子系統(tǒng)121。因此,目前的模塊(Module)只能將SCSI物理設(shè)備,如驅(qū)動器、打印機、計算機等等,提供給用戶來使用。但若服務(wù)器為了性能、容錯、擴展性或方便管理的目的,通常會構(gòu)造出一些邏輯設(shè)備(或稱為虛擬設(shè)備),例如將硬盤重新組織為其它方式(如RAID)、邏輯卷等,并想將這些方式通過Module提供給用戶來使用,這在iSCSI協(xié)議中是不能直接做到的。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明為解決上述問題而提出一種利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,主要目的在于使iSCSI協(xié)議不僅僅只能提供給SCSI物理設(shè)備,也可將RAID、邏輯卷等這樣的邏輯設(shè)備提供給用戶,從而實現(xiàn)發(fā)起設(shè)備與邏輯目標(biāo)設(shè)備之間的通信。
所以為達到上述目的,本發(fā)明中提供一種利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其可實現(xiàn)發(fā)起設(shè)備到邏輯目標(biāo)設(shè)備的數(shù)據(jù)傳輸,其中包括如下步驟賦予每個目標(biāo)設(shè)備文件一組ID與邏輯單元號;接收該發(fā)起設(shè)備的訪問請求,同時建立該發(fā)起設(shè)備與該目標(biāo)設(shè)備的連接;自該連接中提取SCSI協(xié)議數(shù)據(jù)單元;自該協(xié)議數(shù)據(jù)單元中提取SCSI命令數(shù)據(jù)塊;確定該命令數(shù)據(jù)塊中的ID與邏輯單元號對應(yīng)的設(shè)備文件,同時根據(jù)該命令數(shù)據(jù)塊中的SCSI指令,對該設(shè)備文件進行相應(yīng)處理,并制造出相應(yīng)的響應(yīng);及將該響應(yīng)構(gòu)造成SCSI協(xié)議數(shù)據(jù)單元放入連接中回送至該發(fā)起設(shè)備。
本發(fā)明的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法使iSCSI協(xié)議不僅僅只能提供SCSI物理設(shè)備,也可將RAID、邏輯卷等邏輯設(shè)備,提供給用戶使用,因此用戶可直接享受到服務(wù)器帶來的便利及性能的提升,而不用在自己本機上多增加硬件設(shè)備。從而可以降低成本,也可以降低管理的復(fù)雜度。充分利用了存儲容量、集中管理存儲、降低了存儲成本。
有關(guān)本發(fā)明的詳細內(nèi)容及技術(shù),現(xiàn)結(jié)合
如下。
圖1為iSCSI協(xié)議實現(xiàn)過程的示意圖;圖2為本發(fā)明利用iSCSI協(xié)議訪問邏輯設(shè)備的方法的總體流程圖;圖3為本發(fā)明初始化的流程圖;圖4為本發(fā)明處理SCSI CDB的流程圖;及圖5為本發(fā)明實施例的ISCSI協(xié)議下邏輯卷實現(xiàn)方法的流程圖。
圖中標(biāo)號說明110發(fā)起設(shè)備120目標(biāo)設(shè)備121網(wǎng)絡(luò)子系統(tǒng)122iSCSI模塊
123SCSI子系統(tǒng)步驟210賦予每個目標(biāo)設(shè)備文件一組ID與邏輯單元號步驟220接收該發(fā)起設(shè)備的訪問請求,同時建立該發(fā)起設(shè)備與該目標(biāo)設(shè)備的連接步驟230自該連接中提取SCSI協(xié)議數(shù)據(jù)單元步驟240自該協(xié)議數(shù)據(jù)單元中提取SCSI命令數(shù)據(jù)塊步驟250確定該命令數(shù)據(jù)塊中的ID與邏輯單元號對應(yīng)的設(shè)備文件,同時根據(jù)該命令數(shù)據(jù)塊中的SCSI指令,對該設(shè)備文件進行相應(yīng)處理,并制造出相應(yīng)的響應(yīng)步驟260將該響應(yīng)構(gòu)造成SCSI協(xié)議數(shù)據(jù)單元放入連接中回送至該發(fā)起設(shè)備步驟301打開設(shè)備文件步驟302賦予設(shè)備文件ID與LUN步驟303創(chuàng)建守護進程處理SCSI CDB步驟304創(chuàng)建守護進程建立連接步驟4100有下一個iSCSI PDU?步驟4200SCSI指令從SCSI CDB中被提取步驟4300辨別命令對象與種類步驟4310指令為INQUIRY?步驟4311種類設(shè)定為Disk步驟4312制造相應(yīng)的響應(yīng)步驟4320指令為READ?步驟4321調(diào)用函數(shù)得到Data步驟4330指令為READ CAPACITY?步驟4331計算容量步驟4340指令為WRITE?步驟4341調(diào)用函數(shù)寫入Data步驟4400響應(yīng)與Data被做成iSCSI PDU步驟4500將iSCSI PDU放入連接中傳送步驟5100有下一個iSCSI PDU?
步驟5200SCSI指令從SCSI CDB中被提取步驟5300辨別命令對象與種類步驟5310指令為INQUIRY?步驟5311種類設(shè)定為Disk步驟5312制造相應(yīng)的響應(yīng)步驟5320指令為READ?步驟5321調(diào)用邏輯卷函數(shù)得到Data步驟5330指令為READ CAPACITY?步驟5331計算邏輯卷容量步驟5340指令為WRITE?步驟5350其它步驟5341調(diào)用邏輯卷函數(shù)寫入Data步驟5400響應(yīng)與Data被做成iSCSI PDU步驟5500將iSCSI PDU放入連接中傳送具體實施方式
隨著計算機系統(tǒng)和存儲設(shè)備的管理員時常被日益膨脹的數(shù)據(jù)量和不斷變化的數(shù)據(jù)存儲需求所困擾,很多人開始考慮采用虛擬存儲解決方案。虛擬存儲,將大量不同的物理存儲網(wǎng)絡(luò)和裝置,出于管理的目的,從邏輯上整合成一個邏輯設(shè)備的過程,目的是幫助企業(yè)擴充、集中并簡化大部分存儲設(shè)備。本發(fā)明使用iSCSI協(xié)議不僅可以應(yīng)用在物理設(shè)備之間的通信,而且還可以實現(xiàn)像邏輯卷、Raid這樣的邏輯設(shè)備的通信。
iSCSI使我們可以用以太網(wǎng)來構(gòu)建IP存儲局域網(wǎng)。通過這種方法,iSCSI克服了直接連接存儲的局限性,使我們可以跨不同服務(wù)器共享存儲資源,并可在不停機狀態(tài)下擴充存儲容量。iSCSI系統(tǒng)由一塊SCSI卡(大部分實現(xiàn)方式為虛擬SCSI卡)發(fā)出一個SCSI指令,指令被封裝到信息包中并發(fā)送。接收方從信息包中抽取SCSI指令并執(zhí)行,然后把返回的SCSI響應(yīng)和數(shù)據(jù)封裝到IP信息包中,并將它們發(fā)回到發(fā)送方。系統(tǒng)抽取數(shù)據(jù)或指令,并把它們傳回SCSI子系統(tǒng)。
本發(fā)明SCSI CDB便不傳交給SCSI子系統(tǒng)來處理,而是在模塊(module)中解開SCSI CDB然后根據(jù)SCSI指令在module中處理。
請參見圖2,該圖為本發(fā)明利用iSCSI協(xié)議訪問邏輯設(shè)備的方法的總體流程圖。如圖所示,首先賦予每個目標(biāo)設(shè)備文件一組ID與邏輯單元號(步驟210),接收該發(fā)起設(shè)備的訪問請求,同時建立該發(fā)起設(shè)備與該目標(biāo)設(shè)備的連接(步驟220),自該連接中提取SCSI協(xié)議數(shù)據(jù)單元(步驟230),自該協(xié)議數(shù)據(jù)單元中提取SCSI命令數(shù)據(jù)塊(步驟240),確定該命令數(shù)據(jù)塊中的ID與邏輯單元號對應(yīng)的設(shè)備文件,同時根據(jù)該命令數(shù)據(jù)塊中的SCSI指令,對該設(shè)備文件進行相應(yīng)處理,并制造出相應(yīng)的響應(yīng)(步驟250),將該響應(yīng)構(gòu)造成SCSI協(xié)議數(shù)據(jù)單元放入連接中回送至該發(fā)起設(shè)備(步驟260)。
本發(fā)明在Linux下使iSCSI協(xié)議將設(shè)備文件當(dāng)物理硬盤使用。請參見圖3,該圖是本發(fā)明初始化的流程圖。加載module時,各設(shè)備文件首先被打開(步驟301),每個設(shè)備文件被賦予一組ID與邏輯單元號(LUNlogical unitnumber,LUN)(步驟302),同時啟動守護進程一(負責(zé)處理創(chuàng)建連接)(步驟303)和守護進程三(解釋和處理SCSI CDB)(步驟304),然后等待起動設(shè)備的訪問。
一個“守護進程”(即守護程序進程)通常為一個后臺進程,而且它不屬于任何一個終端會話(terminal session)。許多系統(tǒng)服務(wù)由守護程序?qū)嵤缇W(wǎng)絡(luò)服務(wù),打印等。
發(fā)起設(shè)備訪問時,守護進程一從內(nèi)核接受來自發(fā)起設(shè)備的套接字(socket)(從發(fā)起設(shè)備來的參數(shù)也包含在其中),而后守護進程一建立連接并將套接字(Socket)置于連接(Connection)中,隨后依次創(chuàng)建守護進程四(回送iSCSI PDU給發(fā)起設(shè)備)與守護進程二(處理從發(fā)起設(shè)備來的iSCSIPDU),建立的連接被轉(zhuǎn)交至守護進程四和守護進程二。每當(dāng)有新的訪問時,此過程便會循環(huán)一次。
然后守護進程二從連接中提取iSCSI PDU的頭(header),而后根據(jù)header中的指令,作相應(yīng)的處理。指令可分兩類,第一種為SCSI硬盤的IO或?qū)CSI硬盤狀態(tài)的請求;第二種為其它請求,如對iSCSI目標(biāo)設(shè)備(target)狀態(tài)的請求、參數(shù)的交換、登錄等等。若為第一種指令時,SCSI CDB被提取出來,然后交給守護進程三處理;若為其它請求,則根據(jù)不同的指令,做出不同的響應(yīng)。請參見圖4,若有下一個iSCSI PDU((步驟4100),守護進程三從連接的SCSI CDB中提取SCSI指令,確定對哪個ID與LUN的指令(步驟4200),并辨別是為哪一種指令(步驟4300),SCSI指令包括INQUIRY、READ、READ CAPACITY以及WRITE等。若為INQUIRY(步驟4310),響應(yīng)的種類要設(shè)定為disk(步驟4311),相應(yīng)的響應(yīng)被制造出來(步驟4312),響應(yīng)包含設(shè)備的種類、廠商數(shù)據(jù)、產(chǎn)品數(shù)據(jù);若為READ(步驟4320),調(diào)用設(shè)備文件的尋找和讀取函數(shù)得到Data(步驟4321),相應(yīng)的響應(yīng)被制造出來;若為READ CAPACITY(步驟4330),設(shè)備的容量被計算出來(步驟4331),相應(yīng)的響應(yīng)跟著被制造出來;若為WRITE(步驟4340),調(diào)用設(shè)備文件的尋找和存寫函數(shù)寫入Data(步驟4341),相應(yīng)的響應(yīng)被制造出來;若為其它指令如MODE SENSE、REPORT LUNS、START STOPUNIT、TEST UNIT READY、VERIFY等等,相應(yīng)的響應(yīng)被制造出來。隨后響應(yīng)被做成iSCSI PDU(步驟4400),如果有DATA,則響應(yīng)與DATA被做成iSCSI PDU,然后放回連接中等待傳送(步驟4500),等待守護進程四處理。每當(dāng)有新的SCSI指令時,此過程便會循環(huán)一次。另外每當(dāng)有新的iSCSIPDU時,守護進程四便會從連接中將iSCSI PDU傳回發(fā)起設(shè)備。如需要卸載module,所有資源被清除,各守護進程被關(guān)閉。
應(yīng)用本發(fā)明的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,可將Raid、邏輯卷(logical volume)等提供給用戶使用,下面以磁盤陣列系統(tǒng)中iSCSI協(xié)議下的邏輯卷實現(xiàn)方法為例,對本發(fā)明進行詳細說明。
像磁盤一樣邏輯卷可以保留文件系統(tǒng)、原始數(shù)據(jù)區(qū)、轉(zhuǎn)儲區(qū)或交換區(qū)。與磁盤不同的是,當(dāng)創(chuàng)建邏輯卷并隨后擴展其大小時,邏輯卷可以選擇大小。也可以通過多塊磁盤來擴展邏輯卷。
首先初始化階段打開邏輯卷的設(shè)備文件,賦予一組ID與LUN于此設(shè)備文件,創(chuàng)建SCSI CDB處理守護進程以及連接守護進程。請參見圖5,該圖是本發(fā)明實施例的邏輯卷實現(xiàn)方法中處理SCSI CDB的流程圖。當(dāng)有iSCSIPDU時(步驟5100),提取SCSI命令(步驟5200),辨別命令對象與種類(步驟5300)。若為INQUIRY(步驟5310),設(shè)定響應(yīng)中的種類為disk(步驟5311),制造出相應(yīng)的響應(yīng)(步驟5312),設(shè)定廠商數(shù)據(jù)、產(chǎn)品數(shù)據(jù)。若為READ(步驟5320),則調(diào)用邏輯卷的尋找和讀取函數(shù)得到Data(步驟5321)并制造相應(yīng)的響應(yīng)。若為READ CAPACITY(步驟5330),則計算此邏輯卷的容量(步驟5331)并制造相應(yīng)的響應(yīng)。若為WRITE(步驟5340),則調(diào)用邏輯卷的尋找和存寫函數(shù)寫入Data(步驟5341)并制造相應(yīng)的響應(yīng)。若為其它指令(步驟5350),如MODE SENSE、REPORT LUNS、START STOP UNIT、TEST UNITREADY、VERIFY等等,則制造相應(yīng)的響應(yīng)(步驟5312)。隨后制作iSCSIPDU,其包含響應(yīng)以及Data(步驟5400),再將iSCSI PDU放回連接中等待傳送(步驟5500)。
雖然本發(fā)明以前述的較佳實施例披露如上,然而并非用以限定本發(fā)明,因此熟悉該項技術(shù)的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),可作些許的更動與潤飾,因此本發(fā)明的保護范圍應(yīng)以權(quán)利要求書所界定的范圍為準。
權(quán)利要求
1.一種利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其可實現(xiàn)發(fā)起設(shè)備到邏輯目標(biāo)設(shè)備的數(shù)據(jù)傳輸,其中包括如下步驟賦予每個目標(biāo)設(shè)備文件一組ID與邏輯單元號;接收該發(fā)起設(shè)備的訪問請求,同時建立該發(fā)起設(shè)備與該目標(biāo)設(shè)備的連接;自該連接中提取SCSI協(xié)議數(shù)據(jù)單元;自該協(xié)議數(shù)據(jù)單元中提取SCSI命令數(shù)據(jù)塊;確定該命令數(shù)據(jù)塊中的ID與邏輯單元號對應(yīng)的設(shè)備文件,同時根據(jù)該命令數(shù)據(jù)塊中的SCSI指令,對該設(shè)備文件進行相應(yīng)處理,并制造出相應(yīng)的響應(yīng);及將該響應(yīng)構(gòu)造成SCSI協(xié)議數(shù)據(jù)單元放入連接中回送至該發(fā)起設(shè)備。
2.如權(quán)利要求1所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中還包括從內(nèi)核中接收來自發(fā)起設(shè)備的套接字,并將該套接字置于該連接中的步驟。
3.如權(quán)利要求1所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述邏輯目標(biāo)設(shè)備為邏輯卷。
4.如權(quán)利要求1所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述邏輯目標(biāo)設(shè)備為磁盤冗余數(shù)組。
5.如權(quán)利要求1所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述SCSI指令包括INQUIRY、READ、READ CAPACITY以及WRITE。
6.如權(quán)利要求5所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述SCSI指令若為INQUIRY,則響應(yīng)的種類設(shè)定為Disk。
7.如權(quán)利要求5所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述SCSI指令若為READ,則調(diào)用設(shè)備文件的函數(shù)得到Data。
8.如權(quán)利要求5所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述SCSI指令若為READ CAPACITY,則計算設(shè)備的容量。
9.如權(quán)利要求5所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述SCSI指令若為WRITE,調(diào)用設(shè)備文件的尋找和存寫函數(shù)寫入Data。
10.如權(quán)利要求5所述的利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其中所述將該響應(yīng)構(gòu)造成SCSI協(xié)議數(shù)據(jù)單元的步驟為將該響應(yīng)與Data構(gòu)造成SCSI協(xié)議數(shù)據(jù)單元。
全文摘要
一種利用iSCSI協(xié)議訪問邏輯設(shè)備的方法,其可實現(xiàn)發(fā)起設(shè)備(Initiator)到邏輯目標(biāo)設(shè)備(Target)的數(shù)據(jù)傳輸,首先賦予每個目標(biāo)設(shè)備文件一組ID與邏輯單元號LUN,然后等待Initiator與Target的連接,連接發(fā)生與建立后,自連接中提取SCSI協(xié)議數(shù)據(jù)單元PDU,再從SCSI PDU中提取SCSI CDB,確定SCSI CDB中的ID與LUN對應(yīng)的設(shè)備文件后,根據(jù)SCSI指令對設(shè)備文件進行相應(yīng)處理,并制造出相應(yīng)的響應(yīng),最后將響應(yīng)構(gòu)造成SCSI CDB放入連接中回送至Initiator。
文檔編號H04L29/06GK1642170SQ20041000197
公開日2005年7月20日 申請日期2004年1月16日 優(yōu)先權(quán)日2004年1月16日
發(fā)明者劉文涵, 陳玄同, 林宏旭 申請人:英業(yè)達股份有限公司