亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于scsi設(shè)備的容錯(cuò)方法及系統(tǒng)的制作方法

文檔序號(hào):10612687閱讀:489來源:國(guó)知局
一種基于scsi設(shè)備的容錯(cuò)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種基于SCSI設(shè)備的容錯(cuò)方法及系統(tǒng),所述方法包括:上層應(yīng)用系統(tǒng)通過通用塊設(shè)備層對(duì)SCSI設(shè)備提出訪問請(qǐng)求;通用塊設(shè)備層接收所述訪問請(qǐng)求并進(jìn)行處理,以及將處理結(jié)果返回給上層應(yīng)用系統(tǒng);上層應(yīng)用系統(tǒng)接收所述處理結(jié)果,確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令,然后通過SG字符設(shè)備重新發(fā)起對(duì)所述SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng);根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理。本發(fā)明提供的基于SCSI設(shè)備的容錯(cuò)方法及系統(tǒng)可以準(zhǔn)確感知底層SCSI設(shè)備的錯(cuò)誤,提高了硬盤利用率。
【專利說明】
一種基于SCSI設(shè)備的容錯(cuò)方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別涉及一種基于SCSI設(shè)備的容錯(cuò)方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)和通信技術(shù)的發(fā)展,在云存儲(chǔ)、電信網(wǎng)絡(luò)和互聯(lián)網(wǎng)等應(yīng)用中,需要存儲(chǔ)大量的數(shù)據(jù),并且需要對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行連續(xù)不間斷的訪問,這種情況下,就需要使用具備大存儲(chǔ)量、較高的數(shù)據(jù)吞吐量和低成本的采用小型計(jì)算機(jī)系統(tǒng)接口(Small Computer SystemInterface,SCSI)的存儲(chǔ)設(shè)備。常見的SCSI設(shè)備包括硬盤,CD-ROM,DVD,磁帶機(jī)等。由于需要對(duì)SCSI存儲(chǔ)設(shè)備進(jìn)行連續(xù)不間斷的訪問,這就難免會(huì)發(fā)生SCSI訪問錯(cuò)誤,及時(shí)準(zhǔn)確的識(shí)別并處理發(fā)生的SCSI訪問錯(cuò)誤,才能保障數(shù)據(jù)安全,并保持業(yè)務(wù)的穩(wěn)定性和可靠性。
[0003]SCSI總線協(xié)議中定義了一種隨命令響應(yīng)返回的錯(cuò)誤信息碼,用于指示命令失敗的原因或設(shè)備所處的異常狀態(tài),Linux操作系統(tǒng)中的SCSI驅(qū)動(dòng)程序獲得并處理了 SCSI錯(cuò)誤碼信息。SCSI驅(qū)動(dòng)程序是一種分層的架構(gòu),共分為三層:上層、中層和底層,其中對(duì)錯(cuò)誤碼進(jìn)行處理在中層和上層實(shí)現(xiàn),其處理方式主要有兩種:重試,或者直接通知上層應(yīng)用1命令沒有成功執(zhí)行。
[0004]在Linux操作系統(tǒng)下,應(yīng)用從用戶空間訪問SCSI設(shè)備有以下幾種方式:(I)通過文件系統(tǒng)提供的文件訪問接口進(jìn)行訪問;(2)通過裸設(shè)備進(jìn)行訪問,上層應(yīng)用直接使用操作系統(tǒng)提供的POSIX接口對(duì)SCSI設(shè)備進(jìn)行訪問;(3)通過SCSI PASS THROUGH方式訪問,即上層應(yīng)用在用戶空間直接訪問Li nux提供的SG字符設(shè)備,應(yīng)用可以直接發(fā)⑶B命令給這個(gè)SCSI設(shè)備,通過該接口,用戶既可以做一些SCSI管理操作,如查詢?cè)O(shè)備基本描述信息等,也可以發(fā)送讀寫數(shù)據(jù)命令。請(qǐng)參閱圖1,通過文件系統(tǒng)或者裸設(shè)備進(jìn)行訪問時(shí),都要經(jīng)過內(nèi)核的通用塊層,當(dāng)1從底層返回時(shí),先經(jīng)過第一層回調(diào)通知中層,對(duì)于處理成功的命令,SCSI中層會(huì)調(diào)用第二次回調(diào)通知到塊層,對(duì)于SCSI中層判斷需要重試的命令,則會(huì)被加入塊請(qǐng)求隊(duì)列重新被處理。對(duì)于SCSI中層判斷需要直接返回或超過允許重試次數(shù)的命令,通過第二次回調(diào)返回到設(shè)備訪問層后,錯(cuò)誤碼會(huì)被轉(zhuǎn)換成塊層的E1等錯(cuò)誤,進(jìn)而返回給用戶態(tài)應(yīng)用程序,用戶無法感知SCSI設(shè)備具體發(fā)生了什么故障。通過SCSI PASS THROUGH方式訪問時(shí),用戶態(tài)應(yīng)用程序按照SCSI標(biāo)準(zhǔn)構(gòu)造⑶B讀寫命令字,通過1CTL方式直接向SG字符設(shè)備發(fā)起請(qǐng)求并接收返回信息,此種方式的1請(qǐng)求是同步請(qǐng)求,沒有經(jīng)過內(nèi)核通用塊層及其它算法的處理直接到達(dá)SCSI層,雖然讀寫性能不高,但每個(gè)命令都會(huì)有相應(yīng)的SCSI返回碼,根據(jù)返回碼,可以很清楚的了解SCSI設(shè)備硬件當(dāng)前的情況。
[0005]現(xiàn)有技術(shù)的分布式存儲(chǔ)系統(tǒng)一般通過文件系統(tǒng)接口或者內(nèi)部調(diào)用裸設(shè)備接口的方式來實(shí)現(xiàn)對(duì)最終硬盤數(shù)據(jù)的訪問,通過文件系統(tǒng)接口或者裸設(shè)備接口對(duì)SCSI硬盤進(jìn)行1訪問時(shí)經(jīng)過了通用塊層,無法獲取SCSI硬盤的錯(cuò)誤碼,無法獲知SCSI訪問錯(cuò)誤的具體錯(cuò)誤類型,在硬盤出錯(cuò)時(shí),無法容忍錯(cuò)誤,只能直接將出錯(cuò)的硬盤踢出集群?jiǎn)?dòng)數(shù)據(jù)重構(gòu),或者向用戶告警觸發(fā)人工檢查硬盤健康狀態(tài)。
[0006]公開號(hào)為CN103543960A的專利提供了一種存儲(chǔ)數(shù)據(jù)的方法,將SCSI命令直接提交至底層驅(qū)動(dòng),在進(jìn)入內(nèi)核態(tài)后繞過通用塊層,避免使用B1接口,通過此方案中的A1接口訪問SCSI設(shè)備,在遇到硬盤錯(cuò)誤時(shí)能夠直接判斷出硬盤的具體錯(cuò)誤類型。但是其存在以下缺點(diǎn):1、需要改造內(nèi)核,繞過通用塊層工作量較大;2、通用塊層的1調(diào)度算法以及cache機(jī)制成熟穩(wěn)定,在一定程度上提高了應(yīng)用程序訪問SCSI設(shè)備的性能,該方案無法利用這些優(yōu)勢(shì);
3、只能使用A1接口通過裸設(shè)備的方式訪問,無法使用Ext4/XFS等主流文件系統(tǒng),有很大局限性。
[0007]公開號(hào)為CN103220162A的專利提供了一種基于HDFS的SCSI容錯(cuò)優(yōu)化方法及裝置,通過修改內(nèi)核SCSI層,使SCSI層可以感知HDFS的副本策略,在SCSI中層收到底層的第一次回調(diào)時(shí)就進(jìn)行處理,可以提高1效率以及減少硬件故障率。但是,其需要修改系統(tǒng)內(nèi)核的SCSI層,成本較高。由于硬盤出錯(cuò)是低概率事件,為了提高此低概率事件下的1效率,而對(duì)整個(gè)內(nèi)核SCSI層進(jìn)行改造,使內(nèi)核去感知HDFS上層副本策略,增加了大量成本。
[0008]公開號(hào)為CN102222033A的專利提供了一種保存小型計(jì)算機(jī)系統(tǒng)接口訪問錯(cuò)誤的方法及裝置,能夠及時(shí)保存SCSI錯(cuò)誤信息,并使得應(yīng)用系統(tǒng)基于保存的SCSI錯(cuò)誤信息準(zhǔn)確快速的獲取SCSI錯(cuò)誤信息,以根據(jù)該SCSI錯(cuò)誤信息快速確定存儲(chǔ)設(shè)備的故障類型。但是其是基于保存的SCSI錯(cuò)誤信息進(jìn)行判斷,容易出現(xiàn)判斷錯(cuò)誤,同時(shí)對(duì)未保存的錯(cuò)誤信息也無法進(jìn)行準(zhǔn)確判斷。

【發(fā)明內(nèi)容】

[0009]針對(duì)以上問題,本發(fā)明專利目的在于設(shè)計(jì)了一種基于SCSI設(shè)備的容錯(cuò)方法及系統(tǒng),可以準(zhǔn)確感知底層SCSI設(shè)備的錯(cuò)誤,提高了硬盤利用率。
[0010]本發(fā)明提供的具體技術(shù)方案如下:
[0011 ] —種基于SCSI設(shè)備的容錯(cuò)方法,包括:
[0012]上層應(yīng)用系統(tǒng)通過通用塊設(shè)備層對(duì)SCSI設(shè)備提出訪問請(qǐng)求;
[0013]通用塊設(shè)備層接收所述訪問請(qǐng)求并進(jìn)行處理,以及將處理結(jié)果返回給上層應(yīng)用系統(tǒng);
[0014]上層應(yīng)用系統(tǒng)接收所述處理結(jié)果,確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令,然后通過SG字符設(shè)備重新發(fā)起對(duì)所述SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng);
[0015]根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理。
[0016]本發(fā)明還提供一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng),包括:
[0017]通用塊設(shè)備模塊,用于接收上層應(yīng)用系統(tǒng)的訪問請(qǐng)求并進(jìn)行處理;
[0018]判斷模塊,用于根據(jù)處理結(jié)果判斷所述請(qǐng)求是成功;
[0019]第一處理模塊,用于在確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令,
[0020]SG字符設(shè)備模塊,用于重新發(fā)起對(duì)SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng);
[0021]第二處理模塊,用于根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理,以及返回上層應(yīng)用系統(tǒng)請(qǐng)求結(jié)果。
[0022]進(jìn)一步,本發(fā)明所述根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理,進(jìn)一步包括:
[0023]如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行成功,則向所述上層應(yīng)用系統(tǒng)返回本次訪問請(qǐng)求成功;
[0024]如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行失敗,則判斷所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型,并根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù)。
[0025]進(jìn)一步,本發(fā)明所述根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù),進(jìn)一步包括:
[0026]若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為可通過覆蓋寫方式修復(fù)的讀錯(cuò)誤,則由所述上層應(yīng)用系統(tǒng)獲取冗余數(shù)據(jù)后執(zhí)行覆蓋寫操作實(shí)現(xiàn)修復(fù);
[0027]若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為可通過壞塊映射方式修復(fù)的寫錯(cuò)誤,則由所述上層應(yīng)用系統(tǒng)將寫操作重定向到預(yù)留區(qū)域,并標(biāo)記該數(shù)據(jù)塊損壞實(shí)現(xiàn)修復(fù);
[0028]若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為其它錯(cuò)誤,則向所述上層應(yīng)用系統(tǒng)返回具體的錯(cuò)誤碼,并記錄容錯(cuò)失敗事件。
[0029]進(jìn)一步,本發(fā)明所述確定所述處理失敗后構(gòu)造SCSI讀寫命令,進(jìn)一步包括:
[0030]若所述上層應(yīng)用系統(tǒng)通過裸設(shè)備接口直接對(duì)所述通用塊設(shè)備接口進(jìn)行訪問時(shí),則基于本次訪問的通用塊設(shè)備地址構(gòu)建所述SCSI讀寫命令;
[0031]若所述上層應(yīng)用系統(tǒng)通過文件系統(tǒng)間接對(duì)所述通用塊設(shè)備接口進(jìn)行訪問時(shí),則調(diào)用相應(yīng)的文件系統(tǒng)工具或接口來獲取本次訪問的通用塊設(shè)備地址,構(gòu)建所述SCSI讀寫命令。
【附圖說明】
[0032]以下參照附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步說明,其中:
[0033]圖1是現(xiàn)有技術(shù)SCSI設(shè)備三種請(qǐng)求訪問方式的結(jié)構(gòu)圖;
[0034]圖2是本發(fā)明一種基于SCSI設(shè)備的容錯(cuò)方法的流程圖;
[0035]圖3是本發(fā)明一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng)的模塊圖;
[0036]圖4是本發(fā)明具體實(shí)施例一用戶態(tài)軟件RAID框圖;
[0037]圖5是本發(fā)明具體實(shí)施例一的讀錯(cuò)誤處理流程圖;
[0038]圖6是本發(fā)明具體實(shí)施例一的寫錯(cuò)誤處理流程圖;
[0039]圖7是本發(fā)明具體實(shí)施例二的讀錯(cuò)誤處理流程圖;
[0040]圖8是本發(fā)明具體實(shí)施例二的寫錯(cuò)誤處理流程圖。
【具體實(shí)施方式】
[0041]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
[0042]本發(fā)明提出了本發(fā)明提供一種基于SCSI設(shè)備的容錯(cuò)方法,在不修改操作系統(tǒng)內(nèi)核SCSI層的前提下,使用戶態(tài)存儲(chǔ)軟件(包括但不限于軟件RAID及分布式存儲(chǔ)系統(tǒng)軟件)感知底層SCSI設(shè)備的錯(cuò)誤,并通過校驗(yàn)或副本策略完成錯(cuò)誤修復(fù),或者作為SCSI設(shè)備的健康狀態(tài)?目息評(píng)估設(shè)備的狀態(tài),以提尚硬盤利用率。
[0043]具體實(shí)現(xiàn)方案為:當(dāng)上層應(yīng)用系統(tǒng)通過文件系統(tǒng)或裸設(shè)備的方式訪問SCSI設(shè)備時(shí),如果遇到應(yīng)用程序接口層返回1錯(cuò)誤(例如E1錯(cuò)誤),在確認(rèn)SCSI設(shè)備在位的情況下,通過Linux操作系統(tǒng)的SG設(shè)備向出錯(cuò)的地址發(fā)起SCSI Pass Through方式的請(qǐng)求,并接收SCSI設(shè)備返回的響應(yīng),該響應(yīng)包含SCSI標(biāo)準(zhǔn)錯(cuò)誤碼,上層根據(jù)錯(cuò)誤碼類型,做相應(yīng)的容錯(cuò)處理。
[0044]請(qǐng)參閱圖2,具體步驟包括:
[0045]上層應(yīng)用系統(tǒng)通過通用塊設(shè)備層對(duì)SCSI設(shè)備提出訪問請(qǐng)求;
[0046]通用塊設(shè)備層接收所述訪問請(qǐng)求并進(jìn)行處理,以及將處理結(jié)果返回給上層應(yīng)用系統(tǒng);上層應(yīng)用系統(tǒng)接收所述處理結(jié)果,確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令,然后通過SG字符設(shè)備重新發(fā)起對(duì)所述SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng);
[0047]根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理。
[0048]所述根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理時(shí):如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行成功,則向所述上層應(yīng)用系統(tǒng)返回本次訪問請(qǐng)求成功;如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行失敗,則判斷所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型,并根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù)。
[0049]所述根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù),進(jìn)一步包括:若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為可通過覆蓋寫方式修復(fù)的讀錯(cuò)誤,則由所述上層應(yīng)用系統(tǒng)獲取冗余數(shù)據(jù)后執(zhí)行覆蓋寫操作實(shí)現(xiàn)修復(fù);若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為可通過壞塊映射方式修復(fù)的寫錯(cuò)誤,則由所述上層應(yīng)用系統(tǒng)將寫操作重定向到預(yù)留區(qū)域(此區(qū)域可以是由所述上層應(yīng)用系統(tǒng)提前劃出的一塊所述SCSI設(shè)備內(nèi)部的區(qū)域,也可以是其它的非遺失性存儲(chǔ)介質(zhì)空間),并標(biāo)記該數(shù)據(jù)塊損壞實(shí)現(xiàn)修復(fù);若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為其它錯(cuò)誤,則向所述上層應(yīng)用系統(tǒng)返回具體的錯(cuò)誤碼,并記錄容錯(cuò)失敗事件。
[0050]所述確定所述處理失敗后構(gòu)造SCSI讀寫命令時(shí):若所述上層應(yīng)用系統(tǒng)通過裸設(shè)備接口直接對(duì)所述通用塊設(shè)備接口進(jìn)行訪問時(shí),則基于本次訪問的通用塊設(shè)備地址構(gòu)建所述SCSI讀寫命令;若所述上層應(yīng)用系統(tǒng)通過文件系統(tǒng)間接對(duì)所述通用塊設(shè)備接口進(jìn)行訪問時(shí),則調(diào)用相應(yīng)的文件系統(tǒng)工具或接口來獲取本次訪問的通用塊設(shè)備地址,構(gòu)建所述SCSI讀寫命令。
[0051]根據(jù)本發(fā)明的基于SCSI設(shè)備的容錯(cuò)方法,本發(fā)明還提供一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng),請(qǐng)參閱圖3,包括:
[0052]通用塊設(shè)備模塊,用于接收上層應(yīng)用系統(tǒng)的訪問請(qǐng)求并進(jìn)行處理;
[0053]判斷模塊,用于根據(jù)處理結(jié)果判斷所述請(qǐng)求是成功;
[0054]第一處理模塊,用于在確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令,
[0055]SG字符設(shè)備模塊,用于重新發(fā)起對(duì)SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng);
[0056]第二處理模塊,用于根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理。
[0057]具體實(shí)施例一:
[0058]本發(fā)明的基于SCSI設(shè)備的容錯(cuò)方法可用于實(shí)現(xiàn)Linux/Unix用戶態(tài)軟件RAID,傳統(tǒng)軟件RAID模塊一般運(yùn)行于內(nèi)核態(tài),如Linux內(nèi)核自帶的mdraid模塊。用戶態(tài)軟件RAID是指將RAID功能以及硬盤的容錯(cuò)處理都在用戶態(tài)實(shí)現(xiàn),對(duì)應(yīng)用程序提供數(shù)據(jù)冗余及高性能的讀寫API接口,一個(gè)用戶態(tài)軟件RAID實(shí)現(xiàn)框圖如圖4所示,其中,RAID功能模塊通過塊設(shè)備接口,經(jīng)過內(nèi)核通用塊層向硬盤發(fā)起1請(qǐng)求并接收響應(yīng),具體可以根據(jù)性能需要使用Linux操作系統(tǒng)的A1接口、Sync 1或其它1引擎來實(shí)現(xiàn)對(duì)硬盤裸設(shè)備的數(shù)據(jù)讀寫。在RAID功能1路徑遇到1錯(cuò)誤時(shí),SCSI硬盤容錯(cuò)處理模塊通過SG設(shè)備接口發(fā)起重試并感知硬盤SCSI錯(cuò)誤碼,然后做相應(yīng)的容錯(cuò)處理。
[0059]本發(fā)明的基于SCSI設(shè)備的容錯(cuò)方法用于實(shí)現(xiàn)Linux/Unix用戶態(tài)軟件RAID,具體步驟如下:
[0060](一)、當(dāng)RAID功能在某個(gè)硬盤的1路徑上遇到讀錯(cuò)誤時(shí),請(qǐng)參閱圖5,具體容錯(cuò)處理流程如下:
[0061 ]硬盤容錯(cuò)處理模塊向出錯(cuò)硬盤的SG設(shè)備發(fā)送SCSI讀命令,命令的地址參數(shù)為使用塊設(shè)備接口訪問返回出錯(cuò)時(shí)的物理地址。如果命令成功,則表示重試讀成功,結(jié)束本次容錯(cuò)流程。
[0062]SCSI讀命令返回失敗,則判斷SCSI錯(cuò)誤碼是否為可通過寫覆蓋修復(fù)的SCSI讀錯(cuò)誤類型,如果不是,則向RAID功能模塊返回此SCSI錯(cuò)誤碼,并將該硬盤的異常計(jì)數(shù)值加1,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供異步統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用,當(dāng)錯(cuò)誤達(dá)到閾值,做踢盤處理。
[0063]如果SCSI讀命令返回的錯(cuò)誤碼類型為可通過寫覆蓋修復(fù),則通知RAID功能模塊通過RAID算法校驗(yàn)出該硬盤條帶上的數(shù)據(jù)內(nèi)容,再通過向SG設(shè)備發(fā)送SCSI寫命令的形式實(shí)施寫覆蓋修復(fù),若命令返回成功,則修復(fù)成功并結(jié)束本次容錯(cuò)流程;若SCSI寫命令失敗,則報(bào)告容錯(cuò)流程失敗,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供異步統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用,當(dāng)錯(cuò)誤達(dá)到閾值,做踢盤處理。
[0064](二)、當(dāng)RAID功能在某個(gè)硬盤的1路徑上遇到寫錯(cuò)誤時(shí),請(qǐng)參閱圖6,具體容錯(cuò)處理流程如下:
[0065]硬盤容錯(cuò)處理模塊向出錯(cuò)硬盤的SG設(shè)備發(fā)送SCSI寫命令。如果命令成功,則表示重試寫成功,結(jié)束本次容錯(cuò)流程。
[0066]SCSI寫命令返回失敗,則判斷SCSI錯(cuò)誤碼是否為可通過壞塊映射方式修復(fù)的SCSI寫錯(cuò)誤類型,如果不是,則向上返回此SCSI錯(cuò)誤碼,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供異步統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用,當(dāng)錯(cuò)誤達(dá)到閾值,做踢盤處理。
[0067]如果SCSI寫命令返回的錯(cuò)誤碼類型為可通過壞塊映射的方式修復(fù),則啟動(dòng)映射機(jī)制,即將寫請(qǐng)求重定向到本硬盤上預(yù)留的區(qū)域或其它非遺失性存儲(chǔ)介質(zhì)中,后續(xù)對(duì)該壞塊地址數(shù)據(jù)讀寫請(qǐng)求都被重定向到新的映射區(qū)域,若映射成功,則修復(fù)成功,結(jié)束本次容錯(cuò)流程;若映射修復(fù)失敗,則返回容錯(cuò)失敗,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供異步統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用,當(dāng)錯(cuò)誤達(dá)到閾值,做踢盤處理。
[0068]具體實(shí)施例二:
[0069]在分布式存儲(chǔ)系統(tǒng)中,當(dāng)邏輯卷的1請(qǐng)求從客戶端下發(fā)到系統(tǒng)中后,會(huì)經(jīng)過元數(shù)據(jù)管理模塊、分布式RAID等數(shù)據(jù)路由服務(wù),將請(qǐng)求1拆分下發(fā)到底層的存儲(chǔ)單元(在Ceph中是OSD模塊,一個(gè)存儲(chǔ)單元負(fù)責(zé)一個(gè)物理硬盤的數(shù)據(jù)讀寫服務(wù)),即最終都是通過存儲(chǔ)單元向一個(gè)個(gè)本地硬盤發(fā)起1請(qǐng)求。而存儲(chǔ)單元向本地SCSI硬盤發(fā)起請(qǐng)求時(shí),一般都是通過文件系統(tǒng)接口或裸設(shè)備接口進(jìn)行的,這樣就無法識(shí)別硬盤具體的SCSI錯(cuò)誤碼。
[0070]通過本發(fā)明的基于SCSI設(shè)備的容錯(cuò)方法,可以在本地存儲(chǔ)單元通過文件系統(tǒng)接口或裸設(shè)備接口訪問SCSI硬盤遇到錯(cuò)誤時(shí),重新根據(jù)請(qǐng)求構(gòu)造成SCSI命令,向SG設(shè)備發(fā)起SCSI Passthrough方式的請(qǐng)求,如果請(qǐng)求成功,則相當(dāng)于重試成功,如果請(qǐng)求失敗,則可以得到SCSI錯(cuò)誤碼,并根據(jù)SCSI錯(cuò)誤碼做進(jìn)一步的容錯(cuò)處理。這樣,在不修改分布式存儲(chǔ)軟件所部署的服務(wù)器操作系統(tǒng)內(nèi)核以及其它上層軟件模塊的情況下,僅通過修改存儲(chǔ)單元的用戶態(tài)程序,即可完成SCSI硬盤的容錯(cuò)處理。
[0071 ]本發(fā)明的基于SCSI設(shè)備的容錯(cuò)方法用于分布式存儲(chǔ)系統(tǒng),具體步驟如下:
[0072](—)、當(dāng)分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)單元讀盤操作遇到錯(cuò)誤時(shí)請(qǐng)參閱圖7,處理步驟如下:
[0073]存儲(chǔ)單元向塊設(shè)備發(fā)送讀請(qǐng)求,讀請(qǐng)求接口可能是文件系統(tǒng)提供的接口,也可能是裸設(shè)備訪問接口,若讀返回失敗,則進(jìn)入容錯(cuò)處理流程。
[0074]如果是文件系統(tǒng)接口,即讀請(qǐng)求地址是文件系統(tǒng)中的某個(gè)文件的偏移值,則利用文件系統(tǒng)工具查詢出該偏移值對(duì)應(yīng)的硬盤物理地址;如果是裸設(shè)備訪問接口,則訪問地址就是硬盤物理地址,不需要轉(zhuǎn)換。
[0075]存儲(chǔ)單元向硬盤的SG設(shè)備發(fā)送SCSI讀命令,命令的地址參數(shù)為硬盤物理地址。如果命令成功,則表示重試讀成功,結(jié)束本次容錯(cuò)流程。
[0076]SCSI讀命令返回失敗,則判斷SCSI錯(cuò)誤碼是否為可通過寫覆蓋修復(fù)的SCSI讀錯(cuò)誤類型,如果不是,則向上返回此SCSI錯(cuò)誤碼,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供以后分析統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用。
[0077]如果SCSI讀命令返回的錯(cuò)誤碼可通過寫覆蓋修復(fù),則向該數(shù)據(jù)副本所在的存儲(chǔ)單元(假設(shè)為第二存儲(chǔ)單元)請(qǐng)求數(shù)據(jù),或者根據(jù)其它存儲(chǔ)單元保存的數(shù)據(jù)校驗(yàn)出該硬盤上的數(shù)據(jù)內(nèi)容,通過向SG設(shè)備發(fā)送SCSI寫命令的形式實(shí)施寫覆蓋修復(fù),若命令返回成功,則修復(fù)成功,結(jié)束本次容錯(cuò)流程;若SCSI寫命令失敗,則向上返回失敗,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供以后分析統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用。
[0078](二)、當(dāng)分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)單元寫盤操作遇到錯(cuò)誤時(shí),請(qǐng)參閱圖8,處理步驟如下:
[0079]存儲(chǔ)單元向塊設(shè)備發(fā)送寫請(qǐng)求,寫請(qǐng)求接口可能是文件系統(tǒng)提供的接口,也可能是裸設(shè)備訪問接口,若寫返回失敗,則進(jìn)入容錯(cuò)處理流程。
[0080]如果是文件系統(tǒng)接口,即寫請(qǐng)求地址是文件系統(tǒng)中的某個(gè)文件的偏移值,則利用文件系統(tǒng)工具查詢出該偏移值對(duì)應(yīng)的硬盤物理地址;如果是裸設(shè)備訪問接口,則訪問地址就是硬盤物理地址,不需要轉(zhuǎn)換。
[0081]存儲(chǔ)單元向硬盤的SG設(shè)備發(fā)送SCSI寫命令,命令的地址參數(shù)為硬盤物理地址。如果命令成功,則表示重試寫成功,結(jié)束本次容錯(cuò)流程。
[0082]SCSI寫命令返回失敗,則判斷SCSI錯(cuò)誤碼是否為可通過壞塊映射方式修復(fù)的SCSI寫錯(cuò)誤類型,如果不是,則向上返回此SCSI錯(cuò)誤碼,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供以后分析統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用。
[0083]如果SCSI寫命令返回的錯(cuò)誤碼可通過壞塊映射的方式修復(fù),則啟動(dòng)映射機(jī)制,SP將寫請(qǐng)求重定向到硬盤上預(yù)留的區(qū)域,后續(xù)對(duì)該壞塊地址數(shù)據(jù)讀寫請(qǐng)求都被重定向到新的映射區(qū)域,若映射成功,則修復(fù)成功,結(jié)束本次容錯(cuò)流程;若映射修復(fù)失敗,則向上返回失敗,并將該硬盤的異常計(jì)數(shù)值加I,作為硬盤健康狀態(tài)判斷的標(biāo)準(zhǔn),供以后分析統(tǒng)計(jì)硬盤錯(cuò)誤時(shí)使用。
[0084]以上所述本發(fā)明的【具體實(shí)施方式】,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限定。任何根據(jù)本發(fā)明的技術(shù)構(gòu)思所做出的各種其他相應(yīng)的改變與變形,均應(yīng)包含在本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于SCSI設(shè)備的容錯(cuò)方法,其特征在于,包括: 上層應(yīng)用系統(tǒng)通過通用塊設(shè)備層對(duì)SCSI設(shè)備提出訪問請(qǐng)求; 通用塊設(shè)備層接收所述訪問請(qǐng)求并進(jìn)行處理,以及將處理結(jié)果返回給上層應(yīng)用系統(tǒng);上層應(yīng)用系統(tǒng)接收所述處理結(jié)果,確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令,然后通過SG字符設(shè)備重新發(fā)起對(duì)所述SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng); 根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理。2.根據(jù)權(quán)利要求1所述的一種基于SCSI設(shè)備的容錯(cuò)方法,其特征在于,所述根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理,進(jìn)一步包括: 如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行成功,則向所述上層應(yīng)用系統(tǒng)返回本次訪問請(qǐng)求成功; 如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行失敗,則判斷所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型,并根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù)。3.根據(jù)權(quán)利要求2所述的一種基于SCSI設(shè)備的容錯(cuò)方法,其特征在于,所述根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù),進(jìn)一步包括: 若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為可通過覆蓋寫方式修復(fù)的讀錯(cuò)誤,則由所述上層應(yīng)用系統(tǒng)獲取冗余數(shù)據(jù)后執(zhí)行覆蓋寫操作實(shí)現(xiàn)修復(fù); 若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為可通過壞塊映射方式修復(fù)的寫錯(cuò)誤,則由所述上層應(yīng)用系統(tǒng)將寫操作重定向到預(yù)留區(qū)域,并標(biāo)記該數(shù)據(jù)塊損壞實(shí)現(xiàn)修復(fù); 若所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型為其它錯(cuò)誤,則向所述上層應(yīng)用系統(tǒng)返回具體的錯(cuò)誤碼,并記錄容錯(cuò)失敗事件。4.根據(jù)權(quán)利要求1或2所述的一種基于SCSI設(shè)備的容錯(cuò)方法,其特征在于,所述確定所述處理失敗后構(gòu)造SCSI讀寫命令,進(jìn)一步包括: 若所述上層應(yīng)用系統(tǒng)通過裸設(shè)備接口直接對(duì)所述通用塊設(shè)備接口進(jìn)行訪問時(shí),則基于本次訪問的通用塊設(shè)備地址構(gòu)建所述SCSI讀寫命令; 若所述上層應(yīng)用系統(tǒng)通過文件系統(tǒng)間接對(duì)所述通用塊設(shè)備接口進(jìn)行訪問時(shí),則調(diào)用相應(yīng)的文件系統(tǒng)工具或接口來獲取本次訪問的通用塊設(shè)備地址,構(gòu)建所述SCSI讀寫命令。5.一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng),其特征在于,包括: 通用塊設(shè)備模塊,用于接收上層應(yīng)用系統(tǒng)的訪問請(qǐng)求并進(jìn)行處理; 判斷模塊,用于根據(jù)處理結(jié)果判斷所述請(qǐng)求是成功; 第一處理模塊,用于在確定所述請(qǐng)求失敗后構(gòu)造SCSI讀寫命令, SG字符設(shè)備模塊,用于重新發(fā)起對(duì)SCSI設(shè)備的訪問,并接收所述SCSI設(shè)備返回的響應(yīng);第二處理模塊,用于根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理,以及返回上層應(yīng)用系統(tǒng)請(qǐng)求結(jié)果。6.根據(jù)權(quán)利要求5所述的一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng),其特征在于,所述上層應(yīng)用系統(tǒng)通過裸設(shè)備接口或者文件系統(tǒng)對(duì)所述通用塊設(shè)備模塊進(jìn)行訪問。7.根據(jù)權(quán)利要求5所述的一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng),其特征在于,所述第一處理模塊構(gòu)造SCSI讀寫命令時(shí),具體為: 若所述上層應(yīng)用系統(tǒng)通過裸設(shè)備接口直接對(duì)所述通用塊設(shè)備模塊接口進(jìn)行訪問時(shí),則基于本次訪問的通用塊設(shè)備地址構(gòu)建所述SCSI讀寫命令; 若所述上層應(yīng)用系統(tǒng)通過文件系統(tǒng)間接對(duì)所述通用塊設(shè)備模塊接口進(jìn)行訪問時(shí),則調(diào)用相應(yīng)的文件系統(tǒng)工具或接口來獲取本次訪問的通用塊設(shè)備地址,構(gòu)建所述SCSI讀寫命令。8.根據(jù)權(quán)利要求5所述的一種基于SCSI設(shè)備的容錯(cuò)系統(tǒng),其特征在于,所述第二處理模塊根據(jù)所述SCSI設(shè)備返回的響應(yīng)進(jìn)行錯(cuò)誤處理,具體為: 如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行成功,則向所述上層應(yīng)用系統(tǒng)返回本次訪問請(qǐng)求成功; 如果所述SCSI設(shè)備返回的響應(yīng)為命令執(zhí)行失敗,則判斷所述SCSI設(shè)備返回的響應(yīng)的錯(cuò)誤類型,并根據(jù)所述錯(cuò)誤類型進(jìn)行修復(fù)。
【文檔編號(hào)】G06F11/07GK105975358SQ201610284196
【公開日】2016年9月28日
【申請(qǐng)日】2016年5月3日
【發(fā)明人】花瑞, 文劉飛
【申請(qǐng)人】深圳市杉巖數(shù)據(jù)技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1