SCSI中端到端校驗能解決數據完整性問題嗎?

這兩天總能遇到一些數據完整性問題。例如系統的暴力關機致使元數據信息的損壞,硬件問題致使元數據和數據的損壞。這些問題的發生很難定位和避免,爲此有人提出是否採用端到端的技術方案就能解決數據完整性問題呢?在此,我對這種技術解決方案進行了一些思考,認爲端到端的解決方案不能從根本上解決data corruption問題,可是能夠很好的避免錯誤數據寫入磁盤或者讀出交給應用。異步

首先,什麼是端到端的數據校驗解決方案?其實從這個名稱咱們也能夠很容易的推斷出這種解決方案的技術思路:
 

 

在應用層發送數據的時候,爲每一個sector計算CRC校驗和信息,而後將帶有校驗信息的數據包發送至disk。Disk 在接受到數據包以後,磁盤從新計算校驗和信息,而且和接受到的校驗和信息作比較,若是發現錯誤,那麼磁盤認在整個IO path上存在錯誤,返回IO操做失敗。經過這種方法,應用層能夠很明確的知道一次IO請求是否存在問題,若是操做成功,那麼磁盤上的數據必然是正確的。目前,主要有兩種端到端校驗方案:一種是DIF,主要是從HBA至磁盤之間進行數據校驗;另外一種是DIX,從應用層至磁盤進行整個IO Path鏈路的數據校驗,上圖描述的就是DIX。
 
從技術思路上來看,這種解決方案實際上就是前饋校驗。在通訊系統中,這種技術被大量應用,而且接收端在發現錯誤的時候可以從糾錯碼中恢復出數據。在沒有這種技術支撐的狀況下,存儲應用中爲了保證數據寫入的可靠性,在數據寫完成以後還須要經過讀操做來驗證數據的正確性。後者是反饋校驗方法。從這點上來看,SCSI端到端校驗有必定的優點,採用前饋的方式,在不太影響IO性能的狀況下,能夠提升數據讀寫的完整性。
 
但仔細分析,這種解決方案有必定的弊端:
 
1,爲了提升IO的吞吐量,寫操做每每採用異步方式。在這種狀況下,即便磁盤發現數據錯誤,可是應用以及失去錯誤處理的機會。因此,異步寫操做會對這種技術產生必定影響。端到端的解決方案一開始是Oracle提出來的,我就在想是否是Oracle只是採用這種技術保護數據的元數據操做呢?由於元數據的更新每每是同步的。
 
2,端到端的校驗只能保護應用數據的完整性,可是,沒法解決目的地址錯誤致使的data corruption的問題。例如,因爲HBA Firmware等問題致使數據包路由目的地址發生錯誤,本該寫到LBA0位置的數據包被寫到了LBA1的位置,在這種狀況下,端到端的校驗根本沒有辦法發現這個問題,從而一樣致使數據完整性問題。在這種狀況下,反饋系統比前饋系統更有優點,經過反饋讀操做可能會發現上述問題。
 
3,端到端的解決方案初看比較簡單,可是,實際上涉及的模塊很是多。應用層首先須要支持這樣的功能,HBA一樣須要支持,而且在硬件上須要支持更加複雜的Scatter Gather DMA功能,並且須要將磁盤提供的520字節扇區映射到512字節和8字節校驗。磁盤廠商須要支持這樣的功能,須要進行數據的CRC計算。若是硬件RAID廠商想要用這種解決方案,那麼RAID一樣須要支持這種標準。所以,一個端到端數據校驗的解決方案將會涉及到不少層面上的問題,並非很容易進行推廣的技術。
 
我的認爲端到端校驗起碼能夠解決應用數據在傳輸過程當中的數據完整性問題,比目前開環系統而言是一大進步。所以,這種技術值得關注和採用。
相關文章
相關標籤/搜索