一種硬盤壞塊信息的獲取方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機技術(shù)領(lǐng)域,尤其涉及一種硬盤壞塊信息的獲取方法及裝置。
【背景技術(shù)】
[0002]應(yīng)用程序通過調(diào)用文件系統(tǒng)的接口來實現(xiàn)文件讀寫操作,而文件系統(tǒng)對物理硬盤的讀寫操作則是通過調(diào)用操作系統(tǒng)系統(tǒng)調(diào)用層的對應(yīng)接口來實現(xiàn)。由于操作系統(tǒng)緩存機制的存在,文件系統(tǒng)只要把數(shù)據(jù)成功寫入操作系統(tǒng)的緩存,就能得到“寫操作成功”的結(jié)果,當積累的寫緩存數(shù)據(jù)量達到設(shè)定閾值,或者寫緩存數(shù)據(jù)在緩存中停留時間達到設(shè)定閾值,操作系統(tǒng)會將寫緩存數(shù)據(jù)同步進硬盤。
[0003]通常,稱無法通過寫操作修復(fù)的硬盤壞塊為不可修復(fù)壞快,在寫操作過程中,若遇到不可修復(fù)壞塊,ATA (Advanced Technology Attachment)驅(qū)動會得到“寫操作失敗”的結(jié)果,然而,由于文件系統(tǒng)的寫操作早已結(jié)束,并已得到了“寫操作成功”的結(jié)果,操作系統(tǒng)無法向文件系統(tǒng)反饋寫硬盤失敗的結(jié)果,因此,文件系統(tǒng)無法知悉硬盤的不可修復(fù)壞塊信息。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實施例的目的在于提供一種硬盤壞塊信息的獲取方法及裝置,旨在解決現(xiàn)有技術(shù)中文件系統(tǒng)無法獲知硬盤的不可修復(fù)壞塊信息的問題。
[0005]本發(fā)明實施例是這樣實現(xiàn)的,一種硬盤壞塊信息的獲取方法,包括:
[0006]在操作系統(tǒng)的用戶空間運行一個獨立的文件系統(tǒng)守護線程;
[0007]在所述用戶空間與所述操作系統(tǒng)的內(nèi)核空間之間建立通訊通道;
[0008]當獲知塊設(shè)備1請求失敗后,判斷所述塊設(shè)備1請求是否為寫請求;
[0009]若所述塊設(shè)備1請求為寫請求,則由所述內(nèi)核空間將所述塊設(shè)備1請求對應(yīng)的塊設(shè)備的壞塊位置通過所述通訊通道發(fā)送至所述守護線程。
[0010]本發(fā)明實施例的另一目的在于提供一種硬盤壞塊信息的獲取裝置,包括:
[0011]運行單元,用于在操作系統(tǒng)的用戶空間運行一個獨立的文件系統(tǒng)守護線程;
[0012]建立單元,用于在所述用戶空間與所述操作系統(tǒng)的內(nèi)核空間之間建立通訊通道;
[0013]判斷單元,用于當獲知塊設(shè)備1請求失敗后,判斷所述塊設(shè)備1請求是否為寫請求;
[0014]發(fā)送單元,用于若所述塊設(shè)備1請求為寫請求,則由所述內(nèi)核空間將所述塊設(shè)備1請求對應(yīng)的塊設(shè)備的壞塊位置通過所述通訊通道發(fā)送至所述守護線程。
[0015]在本發(fā)明實施例中,寫硬盤操作失敗的結(jié)果會從操作系統(tǒng)的內(nèi)核傳遞至文件系統(tǒng),以使文件系統(tǒng)獲知到寫硬盤操作失敗的結(jié)果,同時獲知到硬盤中不可修復(fù)壞塊的位置,以便于采取進一步的處理措施,避免把數(shù)據(jù)存儲到已發(fā)生過寫錯誤的壞塊中。
【附圖說明】
[0016]圖1是本發(fā)明實施例提供的硬盤壞塊信息的獲取方法的實現(xiàn)流程圖;
[0017]圖2是本發(fā)明另一實施例提供的硬盤壞塊信息的獲取方法的實現(xiàn)流程圖;
[0018]圖3是本發(fā)明另一實施例提供的硬盤壞塊信息的獲取方法的實現(xiàn)流程圖;
[0019]圖4是本發(fā)明另一實施例提供的硬盤壞塊信息的獲取方法的實現(xiàn)流程圖;
[0020]圖5是本發(fā)明實施例提供的硬盤壞塊信息的獲取裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0021]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0022]圖1示出了本發(fā)明實施例提供的硬盤壞塊信息的獲取方法的實現(xiàn)流程,詳述如下:
[0023]在SlOl中,在操作系統(tǒng)的用戶空間運行一個獨立的文件系統(tǒng)守護線程。
[0024]在S102中,在所述用戶空間與所述操作系統(tǒng)的內(nèi)核空間之間建立通訊通道。
[0025]在Linux系統(tǒng)中,一部分核心軟件獨立于普通應(yīng)用程序,運行在較高的特權(quán)級別上,它們駐留在被保護的內(nèi)存空間上,擁有訪問硬件設(shè)備的所有權(quán)限,在Linux系統(tǒng)中將此部分內(nèi)存空間稱為內(nèi)核空間;相對地,運行應(yīng)用程序的內(nèi)存空間被稱為用戶空間,運行在用戶空間的應(yīng)用程序只能看到允許它們使用的部分系統(tǒng)資源,并且不能使用某些特定的系統(tǒng)功能,也不能直接訪問內(nèi)核空間和硬件設(shè)備。
[0026]在本實施例中,在操作系統(tǒng)的用戶空間中運行一個獨立的文件系統(tǒng)守護線程(Daemon),并在操作系統(tǒng)的用戶空間與內(nèi)核空間之間建立起通訊通道,以用于本實施例中用戶空間與內(nèi)核空間之間的通信。
[0027]在S103中,當獲知塊設(shè)備1請求失敗后,判斷所述塊設(shè)備1請求是否為寫請求。
[0028]具體地,可以通過在內(nèi)核空間定義變量來獲知塊設(shè)備1請求是否失敗。如圖2所示,在S102之前,所述方法還包括:
[0029]S201,在所述內(nèi)核空間添加初始化為第一取值的變量。
[0030]S202,當所述塊設(shè)備1請求失敗后,置所述變量為第二取值。
[0031]例如,在Linux系統(tǒng)的內(nèi)核空間添加變量ATA_CMD_WRITE_FAIL,并將該變量初始化為FALSE。當ATA驅(qū)動得到寫硬盤操作失敗的結(jié)果,則將該變量置為TRUE。
[0032]則如圖2所示,S103具體通過圖2中的S203實現(xiàn):
[0033]S203,當讀取到所述變量為第二取值時,確定所述塊設(shè)備1請求失敗,并判斷所述塊設(shè)備1請求是否為寫請求。
[0034]在S104中,若所述塊設(shè)備1請求為寫請求,則由所述內(nèi)核空間將所述塊設(shè)備1請求對應(yīng)的塊設(shè)備的壞塊位置通過所述通訊通道發(fā)送至所述守護線程。
[0035]針對圖2所示實施例,S卩,當變量ATA_CMD_WRITE_FAIL = = TRUE時,由內(nèi)核空間將塊設(shè)備的壞塊位置通過建立好的通訊通道發(fā)送給守護線程,以使文件系統(tǒng)能夠得知硬盤中不可修復(fù)壞塊的壞塊位置。
[0036]通過上述方案,寫硬盤操作失敗的結(jié)果會從操作系統(tǒng)的內(nèi)核傳遞至文件系統(tǒng),以使文件系統(tǒng)獲知到寫硬盤操作失敗的結(jié)果,同時獲知到硬盤中不可修復(fù)壞塊的位置,以便于采取進一步的處理措施,避免把數(shù)據(jù)存儲到已發(fā)生過寫錯誤的壞塊中。
[0037]如圖3所示,在S104之后,所述方法還包括:
[0038]S105,觸發(fā)文件系統(tǒng)索引修復(fù)操作,對所述塊設(shè)備的壞塊位置進行修復(fù)。
[0039]通常,一個硬盤的物理塊用于存放文件系統(tǒng)索引,其存儲的索引涉及的文件可能有數(shù)百個,一個塊的損壞會造成數(shù)百個文件丟失,尤其在視頻監(jiān)控領(lǐng)域,錄像文件的丟失會造成嚴重的后果,因此,在本實施例中,一旦獲知了壞塊位置,就立即觸發(fā)執(zhí)行文件系統(tǒng)索引修復(fù)操作,并采取措施,避免把修復(fù)結(jié)果再次寫入硬盤壞塊。
[0040]作為本發(fā)明的一個實施例,在執(zhí)行S103之前,如圖4所示,所述方法還包括:
[0041 ] S106,在