為能在主機的作業系統底層以磁碟空間模擬出可被視為實體的虛擬設備,多數的VTL產品都是透過模擬實體磁帶設備回應系統指令的方式,來使系統認為回應的是一臺實體磁帶設備。
以儲存設備常見的SCSI介面來說,由於系統是與驅動介面或API溝通,而不直接面對SCSI裝置,因此只要模擬程式能在與系統溝通時「騙」過驅動介面,就能將某一類型的SCSI裝置模擬成另一類型的SCSI裝置,如把硬碟模擬成光碟等。
以模擬SCSI指令回應的方式來虛擬SCSI裝置
SCSI裝置與主機溝通的方式則是透過所謂的SCSI指令(SCSI Commands)來進行。如當某SCSI裝置接上系統,並安裝好驅動程式後,應用程式或作業系統就可透過ASPI驅動程式或功能相似的API送出「INQUIRY」指令,要求該SCSI裝置傳回本身的資訊。透過SCSI裝置回應訊息中裝置型態碼(Peripheral device type)欄位的數值,系統即可得知該裝置的類型。所以只要VTL軟體能模仿實體磁帶裝置回應系統的SCSI指令格式,將磁帶回應的裝置型態碼送回給系統(如在ASPI中磁帶設備的裝置型態16位元代碼是01h),就能使系統將VTL視為實體的磁帶裝置。
不過這只是單就系統辨識SCSI裝置的部分,由於不同的SCSI裝置間的SCSI指令有所差異,如磁帶機有倒帶(REWIND),光碟機有撥放音樂(PLAY AUDIO)指令等,因此當以硬碟模擬這些裝置時,光是騙過驅動介面是不夠的,模擬程式本身也必須能夠提供相應於被模擬裝置的完整指令,才能確保虛擬出來的裝置能夠正常動作。
由於SCSI指令都是以指令描述塊(CDB,Command descriptor block)的格式來表示,因此模擬軟體的關鍵就在於收到主機送來的CDB後,是否能正確的提供與所欲模擬裝置相同的CDB回應。
理論上只要VTL回應CDB的方式與真的磁帶機一樣,則在應用程式看來,VTL就等同於像是一臺真的磁帶機般在執行動作。
由於SCSI的使用環境限制大、擴充性也較小,因此實際上的VTL解決方案都是透過光纖通道(FC)或iSCSI來實現。我們以iSCSI架構的VTL為例來作一說明:
iSCSI是將SCSI指令封裝在TCP/IP的封包中,可允許IP主機透過TCP來存取儲存設備,在IP網路中實現SCSI指令的傳輸與操作,因而在iSCSI的指令封包(PDU)中也封裝有SCSI的指令描述塊CDB,因此基於iSCSI的VTL模擬程式也就可以依照前面所述的方式,模擬實體磁帶裝置回應CDB的方式,來使iSCSI主機判斷VTL為依真正的磁帶設備,VTL模擬程式會依照所模擬的磁帶類型、規格,以映射(mapping)方式對應磁碟與磁帶的存取區塊(block),當iSCSI主機要求讀取磁帶上特定區塊的資料時,VTL軟體就能透過映射把磁碟上相應的區塊取出,送回給主機。
SCSI指令支援完整與否是虛擬裝置的關鍵
比較麻煩的是在SCSI規範中除標準指令外,格式中還保留有讓供應商自行定義的部分欄位,不同廠商的設備都會有各廠商自行定義的指令,因此VTL軟體必須保存有各式磁帶設備的完整SCSI指令與參數,針對不同廠商的磁帶設備準備不同的SCSI指令,才能確保在模擬不同的磁帶設備時,能正確的運作。文⊙張明德
熱門新聞
2025-12-31
2025-12-31
2025-12-31
2025-12-31
2025-12-31
2025-12-31