當前位置:
首頁 > 科技 > 技術筆記系列-SAN存儲的長鏈條

技術筆記系列-SAN存儲的長鏈條

二十幾年前學習DOS內核的時候,是可以直接寫程序控制磁碟步進電機的,磁頭放在什麼位置,讀寫到碟片的哪兒都可以控制。但看看現在的SAN存儲,恍若已是隔世。

我們就以一條簡單的linux cat 讀文件命令,看看要經歷怎樣的千山萬水,才能到達物理磁碟,取到真正的數據。

首先,在linux 命令行中輸入cat 命令,系統會調用相應的system call, 進入內核態。在內核里最早接受請求的是VFS(virtual file system)層, VFS 是一層抽象的文件介面,當它發現實際請求是要訪問一個磁碟文件時,就會調用對應的真正的文件系統介面,在linux中通常是Ext3. 在這個時候,如果該文件之前已經被讀過,還放在buffer 中,那麼恭喜你,你可以直接拿到數據了。

技術筆記系列-SAN存儲的長鏈條

如果沒有,對不起,繼續往下調用塊設備存儲的驅動,塊設備存儲驅動會把讀取文件的指令轉換成讀取某個塊存儲設備的某個數據塊,這也是SCSI子系統的最高層介面,系統把存取指令按照SCSI協議命令打包,發給SCSI 控制器。如果linux是非虛擬機,這個時候工作就交給硬體。

但是,如果linux還是台虛擬機(現在大部分情況都是這樣,假設這台linux是運行在Vmware 的 EXSi host 上),讀取指令則會傳遞給一個虛擬的SCSI 控制器,這個虛擬SCSI控制器再傳遞給VMkernel, 對VMkernel而言,虛擬機的一個磁碟其實只是一個文件(datastore), 所以VMkernel還要二次轉換,轉成物理設備真正的位置,再把這些指令通過調用HBA驅動發給HBA卡。

HBA卡(host bus adapter)是光傳輸設備,它與光交換機,SAN存儲一起構成光纖傳輸網路,把讀取指令傳輸到相應的存儲設備上。

好,總算到目的地了。且慢,這還是萬里長征第一步,現在的SAN存儲可不僅僅是幾塊磁碟,就拿IBM8870來說,它其實是由兩台高端P系列伺服器組成的集群。當我們的讀取指令到達SAN 存儲,SAN存儲會重新解析這些指令,如果該數據塊已經放在存儲伺服器龐大的內存(Cache)中,則這些數據就會經光傳輸網路返回。否則,就要遍歷在linux端同樣的過程,一級一級調用底層介面,最後通過SCSI驅動,發出指令來操作實際的物理硬碟。

在這個過程中,存儲伺服器已經將數據的具體物理位置做了兩層封裝。首先是做RAID,比如IBM8870 中8個盤為一組,用RAID5,6,或10,實現數據冗餘和高性能。所以看似連續的數據塊實際可能分布在一組磁碟上。第二層是extend pool, IBM8870可以將SSD盤,SAS盤,SATA 盤都放到同一個extend pool, 再分到同一個邏輯盤裡。也就是說我們操作的邏輯盤其實際數據可能放在完全不同類型的盤中,而且,由於IBM78870提供了自動Easy tier 功能,系統可以根據數據的使用頻率調整使用不同的盤。如果某數據塊頻繁地被訪問,則該數據塊就會從 SAS盤轉到SSD盤 。所有這一切都是自動在後台進行,對用戶完全不可見。

現在還有一項流行的技術,就是在伺服器和物理存儲系統間再嵌入一層虛擬層,由它來管理控制所有存儲並對伺服器提供存儲服務。比如IBM SVC (storage volume controller). linux 發出的數據讀取指令會先到SVC, SVC 實質也是一台伺服器,同時對各物理存儲系統的盤有做了一層封裝。所有連SVC 的存儲系統將自己的磁碟呈現給 SVC組成 MDG (managed disk group),SVC 再將這些盤映射為自己的 VDISK. 當用戶需要讀取某VDISK 中的數據時,SVC再翻譯成對應的實際物理存儲系統的的位置,然後通知該物理存儲系統讀取相應的數據。

我們可以看到,現代基於 SAN 的存儲系統其實已經對物理磁碟做了多層封裝和虛擬化。在用戶這一層幾經無法實際定位某一段數據真正放在物理磁碟上的哪個位置。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 中國存儲 的精彩文章:

管理上百個虛擬桌面,印刷行業巧用NAS實踐虛擬化
實現更好DEVOPS,關鍵取決於數據

TAG:中國存儲 |