TWI582581B - 用來於一冗餘儲存系統中進行資料修復之方法與裝置 - Google Patents

用來於一冗餘儲存系統中進行資料修復之方法與裝置 Download PDF

Info

Publication number
TWI582581B
TWI582581B TW105114847A TW105114847A TWI582581B TW I582581 B TWI582581 B TW I582581B TW 105114847 A TW105114847 A TW 105114847A TW 105114847 A TW105114847 A TW 105114847A TW I582581 B TWI582581 B TW I582581B
Authority
TW
Taiwan
Prior art keywords
storage system
data
storage
read
index
Prior art date
Application number
TW105114847A
Other languages
English (en)
Other versions
TW201740273A (zh
Inventor
連懷恩
鄭仲強
葉建寬
Original Assignee
群暉科技股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 群暉科技股份有限公司 filed Critical 群暉科技股份有限公司
Priority to TW105114847A priority Critical patent/TWI582581B/zh
Priority to CN201610388061.9A priority patent/CN107368382A/zh
Priority to US15/381,118 priority patent/US20170329683A1/en
Priority to EP17162131.1A priority patent/EP3244315B1/en
Priority to US15/491,994 priority patent/US20170329684A1/en
Priority to EP17169663.6A priority patent/EP3244316B1/en
Priority to CN201710324675.5A priority patent/CN107402842A/zh
Application granted granted Critical
Publication of TWI582581B publication Critical patent/TWI582581B/zh
Publication of TW201740273A publication Critical patent/TW201740273A/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

用來於一冗餘儲存系統中進行資料修復之方法與裝置
本發明係有關於資料儲存系統的效能管理,尤指一種用來於一冗餘儲存系統(redundant storage system)中進行資料修復(data recovery)之方法與相關裝置。
依據相關技術,具有冗餘儲存能力之一傳統的冗餘儲存系統,諸如一傳統的容錯式磁碟陣列(Redundant Array of Independent Disks,可簡稱為「RAID」),可將多個儲存裝置聯合成一個大的儲存集區(storage pool)、且可將冗餘資料分散在不同的儲存裝置,其中該些冗餘資料可以有助於在單一儲存裝置毀損時之資料復原。然而,當位元衰減(bit rot)或靜態資料毀損(silent data corruption)發生時,該傳統的儲存系統缺乏有效率的處理機制來解決這一類的問題。例如:在該傳統的RAID之RAID等級(RAID level)為「RAID 5」的狀況下,為了檢查該些儲存裝置中之某一者中之一資料厚片(Data Chunk)A1的資料是否正確,必須從其它儲存裝置讀取相對應的資料厚片A2與A3以及奇偶厚片(parity chunk)Ap,以供進行比較(尤其是,比較資料厚片A1之原始資料、以及依據資料厚片A2與A3和奇偶厚片Ap計算所得之計算資料),這會大大降低隨機小檔案讀取的性能。另外,即使進行比較之後發現該原始資料與該計算資料不一致,該傳統的RAID無法確定是否該原始資料與該計算資料中之哪一者為正確的。又例如:在該傳統的RAID之RAID等級為「RAID 1」的狀況下,為了檢查位元衰減是否發生該傳統的RAID必須花費兩倍的時間來讀取。
相關技術中提出某些傳統的方法,以嘗試解決這些問題。然而,額外的問題諸如一些副作用可能會浮現。因此,需要一種新穎的方法及相關的架構,以在較少副作用、或不造成副作用的狀況下,妥善地解決既有的問題。
本發明之目的之一在於提供一種用來於一冗餘儲存系統(redundant storage system)中進行資料修復之方法與相關裝置,以解決上述問題。
本發明之另一目的在於提供一種用來於一冗餘儲存系統中進行資料修復之方法與相關裝置,以提昇該冗餘儲存系統之整體效能。
本發明之至少一較佳實施例中提供一種用來於一冗餘儲存系統中進行資料修復之方法,其中該冗餘儲存系統可包含複數個儲存裝置。該方法可包含:從該冗餘儲存系統之複數層中之一特定層傳送至少一基本指令至該特定層之下層,其中該至少一基本指令包含一讀取指令,而該讀取指令係用來要求該下層傳回對應於一索引之一資料區塊;以及從該特定層傳送至少一額外指令至該下層,其中該至少一額外指令包含一讀取重試指令,而該讀取重試指令係用來要求該下層傳回對應於該索引之一冗餘資料區塊,以供修復該資料區塊;其中該冗餘儲存系統包含一檔案系統與複數個儲存元件,該檔案系統係位於該複數層中之最上層(topmost layer),以及該複數個儲存元件當中位於該複數層中之最底層者(bottommost layer)包含該複數個儲存裝置中之至少一組儲存裝置。
於某些實施例中,當該下層傳回回覆錯誤指令予該特定層,該特定層停止傳送該讀取重試指令至該下層。另外,於某些實施例中,當該下層傳回兩次一樣的資料予該特定層,該特定層停止傳送該讀取重試指令至該下層。此外,於某些實施例中,要求該下層傳回對應於該索引之該資料區塊還包含:傳回一讀取到的資料以及一讀取到的校驗資訊;其中,該用來於該冗餘儲存系統中進行資料修復之方法還包含:依據該讀取到的資料產生一讀取到的資料之校驗資訊;比對該讀取到的資料之校驗資訊以及該讀取到的校驗資訊;以及當該讀取到的資料之校驗資訊以及該讀取到的校驗資訊不吻合,則傳送該額外指令至該下層。
本發明於提供上述方法之同時,亦對應地提供一種用來於一冗餘儲存系統中進行資料修復之裝置,其中該裝置可包含該冗餘儲存系統之至少一部分(例如:一部分或全部)。該裝置可包含:一控制電路,位於該冗餘儲存系統中之複數層中之一特定層、且耦接至該冗餘儲存系統中之複數個儲存裝置,用來控制該冗餘儲存系統之運作。例如:控制該冗餘儲存系統之運作包含:從該特定層傳送至少一基本指令至該特定層之下層,其中該至少一基本指令包含一讀取指令,而該讀取指令係用來要求該下層傳回對應於一索引之一資料區塊;以及從該特定層傳送至少一額外指令至該下層,其中該至少一額外指令包含一讀取重試指令,而該讀取重試指令係用來要求該下層傳回對應於該索引之一冗餘資料區塊,以供修復該資料區塊。此外,該冗餘儲存系統包含一檔案系統與複數個儲存元件,該檔案系統係位於該複數層中之最上層,以及該複數個儲存元件當中位於該複數層中之最底層者包含該複數個儲存裝置中之至少一組儲存裝置。
於某些實施例中,當該下層傳回回覆錯誤指令予該特定層,該特定層停止傳送該讀取重試指令至該下層。另外,於某些實施例中,當該下層傳回兩次一樣的資料予該特定層,該特定層停止傳送該讀取重試指令至該下層。此外,於某些實施例中,要求該下層傳回對應於該索引之該資料區塊還包含:傳回一讀取到的資料以及一讀取到的校驗資訊;其中,控制該冗餘儲存系統之運作還包含:依據該讀取到的資料產生一讀取到的資料之校驗資訊;比對該讀取到的資料之校驗資訊以及該讀取到的校驗資訊;以及當該讀取到的資料之校驗資訊以及該讀取到的校驗資訊不吻合,則傳送該額外指令至該下層。
本發明的好處之一是,本發明之方法與相關裝置可在較少副作用、或不造成副作用的狀況下,妥善地解決既有的問題。另外,本發明之方法與相關裝置可有效提高整體效能,並且不會有浪費運算資源之問題。
本發明之一或多個實施例提出一種使用在一冗餘儲存系統(redundant storage system)之資料修復(data recovery)機制,其中此冗餘儲存系統可為具有冗餘儲存能力之一儲存系統、或是由具有冗餘儲存能力之多個儲存系統所組成之一個多層儲存系統堆疊(multilayer storage system stack)。例如:此儲存系統可包含至少一容錯式磁碟陣列(Redundant Array of Independent Disks,可簡稱為「RAID」)或至少一分散式塊裝置(Distributed Replicated Block Device,可簡稱為「DRBD」),且資料修復機制可實施於此儲存系統。又例如:多個儲存系統可包含至少一RAID或至少一DRBD,且此資料修復機制可實施於多個儲存系統中之任一者。
基於本發明一或多個實施例之資料修復機制,冗餘儲存系統可自動地修復或修正資料。例如:當檔案系統或應用程式透過校驗和(checksum)或雜湊值(hash value),發現檔案內容毀損時,資料修復機制可在背景自動地進行資料修復運作,並確保使用者不會讀取到不正確的內容。為了便於理解,內建校驗能力的檔案系統可作為冗餘儲存系統之檔案系統之一例。
第1圖為依據本發明一實施例之一種冗餘儲存系統10的示意圖,其中冗餘儲存系統10可包含上述之多層儲存系統堆疊。例如:冗餘儲存系統10可包含一內建校驗能力的檔案系統12(其可簡稱為檔案系統12),諸如一內建校驗和能力的檔案系統(其具備以預先儲存之校驗和檢查資料區塊錯誤之能力)、或一內建雜湊值能力的檔案系統(其具備以預先儲存之雜湊值檢查資料區塊錯誤之能力),且可另包含一裝置映射器(device mapper)13。另外,冗餘儲存系統10可包含複數個儲存元件,諸如至少一儲存系統與至少一儲存裝置(storage device)。尤其是,上述之至少一儲存系統可包含複數個儲存系統,諸如一RAID-1儲存系統14(其RAID等級(RAID level)為「RAID 1」)、一RAID-5儲存系統16(其RAID等級為「RAID 5」)以及一DRBD儲存系統18,且上述之至少一儲存裝置可包含複數個儲存裝置,諸如儲存裝置Disk(1)、Disk(2)、…與Disk(6)。複數個儲存裝置的每一者可包含至少一實體的儲存媒體。例如:複數個儲存裝置的任一者可為一整個硬式磁碟機(Hard Disk Drive,可簡稱為「HDD」)、一整個固態硬碟(Solid State Drive,可簡稱為「SSD」)、一HDD中之一分割區(partition)或一SSD中之一分割區。此外,RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18的每一者可包含多個儲存裝置之聯合所組成的一存放集區(storage pool),其中使用者可以把這個存放集區視為一個裝置來使用。
為了便於說明,針對冗餘儲存系統10的複數層中之某一層,諸如一特定層,位於該特定層之下方的任一層(若存在)可稱為一較低層(lower layer),而位於該特定層之上方的任一層(若存在)可稱為一較高層(upper layer)。例如:該較低層可以是緊鄰於該特定層;此狀況下,該較低層可視為一較低緊鄰層(lower adjacent layer),以下可簡稱為下層。又例如:該較高層可以是緊鄰於該特定層;此狀況下,該較高層可視為一較高緊鄰層(upper adjacent layer),以下可簡稱為上層。
如第1圖所示,檔案系統12可位於複數層中之最上層(topmost layer),而儲存裝置Disk(2)、Disk(3)、…與Disk(6)可位於複數層中之最底層(bottommost layer),其中一組儲存裝置Disk(2)、Disk(3)與Disk(4)屬於RAID-5儲存系統16,且另一組儲存裝置Disk(5)與Disk(6)屬於DRBD儲存系統18。儲存裝置Disk(1)、RAID-5儲存系統16與DRBD儲存系統18位於複數層中之一中間層(intermediate layer;其對最底層而言是一較高層,對最上層而言是一較低層),且RAID-1儲存系統14位於複數層中之另一中間層(其對最上層而言是一較低層,對最底層而言是一較高層),其中儲存裝置Disk(1)、RAID-5儲存系統16與DRBD儲存系統18屬於RAID-1儲存系統14。另外,於第1圖所示之樹狀架構中,檔案系統12位於最上層,且裝置映射器13可實施於檔案系統12與RAID-1儲存系統14之間。此外,冗餘儲存系統10可包含對應於資料修復機制之複數個控制模組,諸如控制模組12C、14C、16C與18C。例如:複數個控制模組中之任一者可為對應於資料修復機制之一控制程式模組、或對應於資料修復機制之一控制電路。
於冗餘儲存系統10中,檔案系統12、RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18可分別於其各自的控制模組12C、14C、16C與18C之控制下進行運作。藉助於複數個控制模組中之至少一部分(例如一部分或全部),諸如控制模組12C、14C、16C與18C,儲存系統之間可以互相堆疊(例如:RAID-1儲存系統14下面可以存在另外一層的RAID諸如RAID-5儲存系統16,也可以存在一個DRBD系統諸如DRBD儲存系統18),以形成上述之多層儲存系統堆疊。依據某些實施例,傳統的儲存系統和傳統的儲存裝置也可以加入多層儲存系統堆疊,即使它們都沒有設置對應於資料修復機制之任何控制模組、或是根本沒有冗餘儲存能力。例如:在修復毀損資料時,它們可以充分利用其下層儲存系統堆疊(諸如多層儲存系統堆疊當中位於它們之下的部分)的所有冗餘能力。
於第1圖所示之實施例中,有三個有冗餘能力的儲存系統(諸如RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18)堆疊在一起。在這三個儲存系統以及位於最上層的檔案系統12都設置了對應於資料修復機制之控制模組的狀況下,冗餘儲存系統10最多可以提供對應於同一個檔案之五個不同的版本,以供自動地進行資料修復。即使裝置映射器13本身沒有冗餘儲存能力、亦沒有設置對應於資料修復機制之任何控制模組,也不會影響到資料修復機制的運作。
複數個控制模組諸如控制模組12C、14C、16C與18C可採用同一種溝通介面。對於複數層中的系統/裝置(諸如位於最上層的檔案系統12、位於些中間層的儲存裝置或儲存系統、或位於最底層的儲存裝置Disk(2)、Disk(3)、…與Disk(6))而言,任兩彼此緊鄰層的系統/裝置之間都需要事先定義好一組介面來溝通和傳遞資料。一般而言,不論檔案系統12是以各種不同的作業系統(operating system, OS)中之哪一種作業系統來實施,冗餘儲存系統10中之各層可採用下面四類基本指令: (CMD1). Read (block_index); (CMD2). Write (DATA, block_index); (CMD3). Return (DATA, block_index);以及 (CMD4). Return (ERR, block_index); 其中,對於一指令發送(command sender)者,該些基本指令中之前兩者係為從特定層送往下層(諸如緊鄰此指令發送者所在的那一層的下方一層)之指令,而該些基本指令中之後兩者係為從特定層送往上層(諸如緊鄰此指令發送者所在的那一層的上方一層)之指令。於冗餘儲存系統10中,該些基本指令中之前兩者可由檔案系統12、裝置映射器13、RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18中之任一者向下發送,而該些基本指令中之後兩者可由儲存裝置Disk(1)、Disk(2)、…與Disk(6) 中之任一者向上發送,也可由裝置映射器13、RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18中之任一者向上發送。例如:指令 Read (block_index)可用來從下層的儲存裝置或儲存系統,讀取對應於索引 block_index的資料區塊(data block),故指令 Read (block_index)可稱為讀取指令。指令 Write (DATA, block_index)可用來將對應於索引 block_index的資料 DATA寫入下層的儲存裝置或儲存系統,故指令 Write (DATA, block_index)可稱為寫入指令。指令 Return (DATA, block_index)可用來將對應於索引 block_index的資料 DATA傳回至上層,故指令 Return (DATA, block_index)可稱為回覆資料指令。指令 Return (ERR, block_index)可用來向上層回報,以將對應於索引 block_index的資料讀取運作(即,讀取對應於索引 block_index的資料區塊之運作)之失敗(failure)告知上層,故指令 Return (ERR, block_index)可稱為回覆錯誤指令,其中失敗資訊 ERR指出此失敗。
請注意,為了便於理解,該些基本指令係以上列例子中之格式來表示,以指出它們的主要特性。針對不同類型的作業系統,該些基本指令之詳細定義可予以變化,但其主要特性會對應於上列例子。
資料修復機制(尤其是複數個控制模組)可認得並採用該些基本指令,並可採用至少一額外指令(諸如一或多個額外指令),其可包含: (CMD5). Read_Retry (block_index); 其中,對於一指令發送者,該(些)額外指令係為從特定層送往下層(諸如緊鄰此指令發送者所在的那一層的下方一層)之一(些)指令。於冗餘儲存系統10中,該(些)額外指令可由檔案系統12、裝置映射器13、RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18中之任一者向下發送。例如:指令 Read_Retry (block_index)可用來從下層的儲存裝置或儲存系統,讀取對應於索引 block_index的冗餘資料區塊,以進行讀取重試,故指令 Read_Retry (block_index)可稱為讀取重試指令。在資料無誤的狀況下,對應於索引 block_index的冗餘資料區塊中之資料會等同於對應於索引 block_index的資料區塊中之資料。
於某些實施例中,指令 Read_Retry (block_index)和指令 Read (block_index)可以被整合成具有同一個名稱的指令,諸如指令 Read (block_index, RETRY),但它們可用一個新的位元旗標(bit flag) RETRY來彼此區別,其中位元旗標 RETRY可用來指出上述具有同一個名稱的指令是否代表指令 Read_Retry (block_index),故位元旗標 RETRY可稱為重試位元旗標。例如:當位元旗標 RETRY被設定為邏輯值1時,指令 Read (block_index, RETRY)代表指令 Read_Retry (block_index);否則(即,位元旗標 RETRY被設定為邏輯值0),指令 Read (block_index, RETRY)代表指令 Read (block_index)。這樣的設計很適合各種儲存系統或儲存裝置之組合。假設下層中存在一傳統的儲存元件(諸如一傳統的儲存系統或一傳統的儲存裝置),其沒有設置對應於資料修復機制之任何控制模組。由於此傳統的儲存元件不認得位元旗標 RETRY,所以會將位元旗標 RETRY繼續往其下層傳。若此傳統的儲存元件本身就是最底層的儲存裝置,則指令 Read (block_index, RETRY)會被單純地視為指令 Read (block_index),而非指令 Read_Retry (block_index)。這樣的設計之好處是,雖然此傳統的儲存元件不認得指令 Read (block_index, RETRY)中之位元旗標 RETRY、也不認得指令 Read_Retry (block_index),依然可以加入多層儲存系統堆疊。
為了簡明起見,於一些後續實施例中,指令 Read_Retry (block_index)可作為上述之至少一額外指令之一例,其中指令 Read_Retry (block_index)可代換成指令 Read (block_index, RETRY)。資料修復機制可依據一些預定準則來運作。例如:當發現檔案內容錯誤的時候,資料修復機制可依據一深度優先搜尋(Depth-first search)準則來進行深度優先搜尋。尤其是,資料修復機制可逐一搜尋多層儲存系統堆疊中所有可用的冗餘儲存能力;一旦發現正確的冗餘版本,資料修復機制可立刻進行修復。由於在進行搜尋時,下層的儲存裝置或儲存系統不一定有冗餘能力、或者不一定設置有對應於資料修復機制之任何控制模組,所以資料修復機制可依據一停止搜尋準則來停止往下搜尋。基於停止搜尋準則,當一組預定條件中之任一者被滿足時,複數個控制模組中之某一控制模組(諸如檔案系統12、RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18中之每一者內的控制模組)可停止往下搜尋,而該組預定條件可包含: (C1). 下層傳回 Return (ERR, block_index)(即,下層以指令 Return (ERR, block_index)回覆此控制模組);以及 (C2). 當此控制模組已向下層發出兩次 Read_Retry (block_index),此控制模組收到兩次一模一樣的資料(即,下層兩次以指令 Return (DATA, block_index)回覆此控制模組,且兩次送出的資料 DATA是一模一樣的資料); 其中預定條件(C1)中的指令 Return (ERR, block_index)可稱為回覆錯誤指令,代表傳回 Return (ERR, block_index)者確定提供不了冗餘版本。預定條件(C2)代表傳回上述一模一樣的資料者及其任何下層元件(諸如其任何下層儲存系統、或其任何下層儲存裝置,若存在)確定提供不了冗餘版本。上列預定條件(C1)與(C2)都代表此控制模組已經搜尋完下層所有的冗餘能力,且因此必須繼續搜尋此控制模組的兄弟層(sibling)、或是回傳失敗給此控制模組的上層。
在向下層發出指令 Read_Retry (block_index)之後,此控制模組可從下層收到資料且自行計算對應於此資料之校驗資訊(諸如此資料之校驗和或雜湊值)。為了判斷兩次收到的資料是否一樣,此控制模組可暫存此自行計算之校驗資訊。例如:若兩次收到的資料之校驗資訊彼此吻合,則此控制模組可判斷兩次收到的資料是一模一樣的資料;否則,此控制模組可判斷兩次收到的資料彼此相異。
為了避免冗餘儲存系統10中的暫存資料隨著錯誤資料的增加而線性成長(甚至導致系統崩潰),當另一組預定條件中之任一者被滿足時,此控制模組可釋放或丟棄此自行計算之校驗資訊(諸如此校驗和或此雜湊值),其中另一組預定條件可包含: (C11). 此控制模組準備回傳 Return (ERR, block_index)給上層;以及 (C12). 此控制模組從上層收到指令 Write (DATA, block_index); 其中預定條件(C11)與(C12)中之每一者所涉及之索引 block_index等同於此控制模組已向下層發出之指令 Read_Retry (block_index)中之索引 block_index。預定條件(C11)代表此控制模組已測試完畢冗餘儲存系統10當中位於此控制模組下方者之所有的冗餘儲存能力。上述位於此控制模組下方者就是,於複數層當中,此控制模組所在位置以下之全部儲存元件(諸如儲存裝置或儲存系統)。另外,預定條件(C12)中的指令為寫入指令,其代表資料修復機制在冗餘儲存系統10中之某一處找到了正確版本的資料。例如:於複數層當中,此控制模組所在位置以上之某一層中的某一儲存系統已從屬於此儲存系統之一儲存元件(諸如一儲存裝置或一儲存系統)取得正確版本的資料,且透過指令 Write (DATA, block_index)寫回正確的資料,尤其是將正確的資料寫至其下層儲存系統堆疊(諸如複數層當中位於它之下的部分),其中上述某一層中的儲存系統可視為此控制模組之檔案系統端,因它位於此控制模組之上方,即檔案系統12的那一端。於是,在收到指令 Write (DATA, block_index)時,此控制模組可釋放有關(對應於索引 block_index之)資料區塊的所有暫存資料。
複數個控制模組中之一控制模組可扮演「檔案系統端」的角色與「儲存系統端」的角色中之一者或兩者,並進行對應的運作,其中對應於檔案系統端之運作(可簡稱為「檔案系統端運作」)包含此控制模組控制其下層時之控制運作,而對應於儲存系統端之運作(可簡稱為「儲存系統端運作」)包含此控制模組因應其上層之要求(request)而進行之運作。例如:檔案系統12、RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18各自的控制模組12C、14C、16C與18C均可扮演「檔案系統端」的角色。又例如:RAID-1儲存系統14、RAID-5儲存系統16與DRBD儲存系統18各自的控制模組14C、16C與18C均可扮演「儲存系統端」的角色。又例如:在一應用程式下達某一預定指令給檔案系統12的狀況下,檔案系統12的控制模組12C也可扮演「儲存系統端」的角色。實作上,此控制模組(諸如控制模組12C、14C、16C與18C中之一者)可實施成執行於至少一處理器(諸如一個或多個處理器)上之一程式模組、或實施成一客製化硬體電路。例如:在冗餘儲存系統10實施成一伺服器系統的狀況下,上述之至少一處理器可為伺服器系統中之處理器。
為了便於說明,此控制模組可用第2圖中之控制電路110來表示,而此控制模組的下層中之儲存系統或儲存裝置可用第2圖中之N個儲存元件{120-1, 120-2, …, 120-N}來表示(符號「N」可代表一個正整數),其中儲存系統100可用來實現資料修復機制。例如:控制電路110可代表控制模組12C,而該N個儲存元件可包含RAID-1儲存系統14,其中N = 1。又例如:控制電路110可代表控制模組14C,而N個儲存元件可包含儲存裝置Disk(1)、RAID-5儲存系統16與DRBD儲存系統18,其中N = 3。又例如:控制電路110可代表控制模組16C,而N個儲存元件可包含儲存裝置Disk(2)、Disk(3)與Disk(4),其中N = 3。又例如:控制電路110可代表控制模組18C,而N個儲存元件可包含儲存裝置Disk(5)與Disk(6),其中N = 2。
第3圖為第1圖所示冗餘儲存系統10於一實施例中所涉及之一檔案系統端控制方案的流程圖,其中檔案系統端控制方案之步驟210、212、…與232之運作可作為該些檔案系統端運作的例子。於一正常讀取檔案的流程中,檔案系統12可向下層的儲存裝置或儲存系統發出指令 Read (block_index),以要求讀取某個資料區塊,諸如對應於索引 block_index的資料區塊。為了實現資料修復機制,控制電路110可基於檔案系統端控制方案進行下列運作。
於步驟210中,控制電路110可向下層的儲存裝置或儲存系統發出指令 Read (block_index),以要求讀取對應於索引 block_index的資料區塊。例如:下層的儲存裝置或儲存系統傳回讀取到的資料以及讀取到的校驗和(其均應已儲存於冗餘儲存系統10中,尤其是複數層中之最底層)。
於步驟212中,控制電路110可檢查讀取到的資料是否與讀取到的校驗和吻合。例如:控制電路110可依據此讀取到的資料進行計算,以自行產生對應於此讀取到的資料之校驗和,並將此自行產生的校驗和以及此讀取到的校驗和進行比較。當這兩個校驗和彼此相同(即,此讀取到的資料與此讀取到的校驗和吻合),則進入步驟226,以將讀取到的資料回傳給上層;否則(即,此讀取到的資料與此讀取到的校驗和不吻合),則進入步驟214。例如:在控制電路110代表控制模組12C的狀況下,上層可代表複數層上方的應用程式。又例如:在控制電路110代表控制模組14C、16C或18C的狀況下,控制電路110可透過上層將讀取到的資料回傳給複數層上方的應用程式。
於步驟214中,控制電路110可向下層的儲存裝置或儲存系統發出指令 Read_Retry (block_index)。例如:控制電路110可利用指令 Read_Retry (block_index)告知下層開始錯誤修復的程序,並將損壞資料的錯誤校驗和(bad checksum;尤其是,步驟212中所述之此自行產生的校驗和)暫時地儲存起來。
於步驟216中,控制電路110可檢查是否從下層取得 (ERR, block_index)。當下層儲存裝置或儲存系統以指令 Return (ERR, block_index)傳回 (ERR, block_index)作為回應(這表示下層已無其它份的冗餘資料),則進入步驟230起的子工作路徑,以向上層回報錯誤(步驟232);否則(例如:下層儲存裝置或儲存系統可傳回資料作為回應),進入步驟218。例如:在控制電路110代表控制模組12C的狀況下,上層可代表複數層上方的應用程式。又例如:在控制電路110代表控制模組14C、16C或18C的狀況下,控制電路110可透過上層向複數層上方的應用程式回報錯誤。
於步驟218中,控制電路110可檢查讀取到的資料(即,於步驟214之後剛剛讀取到的資料)是否與先前暫存的錯誤校驗和(若存在)吻合。例如:控制電路110可依據剛剛讀取到的資料進行計算,以自行產生對應於此資料的校驗和,並將此自行產生的校驗和以及先前暫存的錯誤校驗和進行比較。當這兩個校驗和彼此相同(即,於步驟214之後剛剛讀取到的資料與先前暫存的錯誤校驗和吻合,這表示下層已無其它份的冗餘資料),則進入步驟230起的子工作路徑,以向上層回報錯誤(步驟232);否則(即,於步驟214之後剛剛讀取到的資料與先前暫存的錯誤校驗和不吻合),則進入步驟220。
關於上述先前暫存的錯誤校驗和,若它不存在,則步驟218中之此檢查的結果可視為不吻合,故此狀況下可進入步驟220。
於步驟220中,控制電路110可檢查讀取到的資料(即,於步驟218所述之資料)是否與讀取到的校驗和(即,因應步驟210中之指令 Read (block_index)而讀取到的校驗和)吻合。例如:控制電路110可依據此讀取到的資料進行計算,以自行產生對應於此讀取到的資料之校驗和,並將此自行產生的校驗和以及步驟210中所讀取到的校驗和進行比較。當這兩個校驗和彼此相同(即,步驟220中讀取到的資料所產生的效驗和與步驟210所讀取到的校驗和吻合),代表找到正確版本的資料,則進入步驟222,以將此讀取到的資料寫入下層;否則(即,此讀取到的資料與此讀取到的校驗和不吻合),則進入步驟228。
於步驟222中,控制電路110可向下層的儲存裝置或儲存系統發出指令 Write (DATA, block_index),以要求將步驟220中所述之此讀取到的資料寫入下層,以便修復損壞的版本。
於步驟224中,控制電路110可清除(於第3圖所示工作流程中)所儲存之錯誤校驗和。
於步驟226中,控制電路110可藉由利用指令 Return (DATA, block_index)傳回資料 DATA(諸如步驟220中所述之此讀取到的資料)予上層。
於步驟228中,控制電路110可儲存衝突資料(corrupt data;尤其是,步驟220中所述之此讀取到的資料)之錯誤校驗和(尤其是,步驟220中所述之此自行產生的校驗和)。之後,重新進入步驟214,以重複利用指令 Read_Retry (block_index)去讀取冗餘版本的資料,直到將所有的冗餘版本試完為止。
於步驟230中,控制電路110可清除(於第3圖所示工作流程中)所儲存之錯誤校驗和。
於步驟232中,控制電路110可透過指令 Return (ERR, block_index)向上層傳回 (ERR, block_index)作為回應,以向上層回報錯誤。
依據某些實施例,檔案系統端控制方案中之所有的校驗和可代換為雜湊值,其中所有的錯誤校驗和可代換為錯誤雜湊值(bad hash value)。該些實施例與前述實施例/變化例相仿之處不再重複贅述。
依據某些實施例,檔案系統端控制方案中之指令 Read (block_index)可代換為指令 Read (block_index, RETRY=0)(其位元旗標 RETRY被設定為邏輯值0),而檔案系統端控制方案中之指令 Read_Retry (block_index)可代換為指令 Read (block_index, RETRY=1)(其位元旗標 RETRY被設定為邏輯值1)。該些實施例與前述實施例/變化例相仿之處不再重複贅述。
第4圖為第1圖所示冗餘儲存系統10於一實施例中所涉及之一儲存系統端控制方案的流程圖,其中儲存系統端控制方案之步驟310、312、…與340之運作可作為該些儲存系統端運作的例子。例如:在冗餘儲存系統10中,每一個資料區塊可有複數個冗餘版本(諸如某一資料區塊本身,以及此資料區塊之至少一複製品、及/或此資料區塊之至少一等效版本),而複數個冗餘版本中之任兩者可彼此互為對方的備援(backup)版本。當需要讀取此資料區塊時,冗餘儲存系統10可讀取複數個冗餘版本中之任一者,故複數個冗餘版本可視為此資料區塊之候選者。複數個冗餘版本的候選者清單(candidate list)可由控制電路110按照一預定規則動態推算出來,只要有需要隨時可推算出候選者清單中之至少一部分(例如一部分或全部);因此,通常不需要將整個候選者清單列舉起來存成一個對照表並儲存在冗餘儲存系統10中之某處。基於候選者清單,冗餘儲存系統10可於需要時從複數個冗餘版本中選出一冗餘版本。另外,候選者清單亦可用於資料修復機制。藉助於候選者清單,資料修復機制可搜尋完所有可用的冗餘版本而不會有遺漏。當需要讀取冗餘版本時,控制電路110可從候選者清單上最前面的候選者開始讀取,而在候選者清單上,讀取代價越小的候選者通常會排在越前面。例如:針對RAID-5儲存系統16,若某個資料區塊的位置在儲存裝置Disk(2)上,則此資料區塊的候選者清單可以表示如下: {Disk(2), (Disk(3) ⊕ Disk(4))}; 其中符號「⊕」代表位元互斥或(bitwise exclusive OR, bitwise XOR)運算。基於此候選者清單,此資料區塊之候選者包含:位於儲存裝置Disk(2)上之一冗餘版本;以及位於儲存裝置Disk(3)與Disk(4)上之一冗餘版本,諸如儲存裝置Disk(3)與Disk(4)中之相對應資料區塊之位元互斥或運算結果。為了實現資料修復機制,控制電路110可基於儲存系統端控制方案進行下列運作。
於步驟310中,關於對應於索引 block_index的資料區塊,控制電路110可判斷(從上層)所接收到的要求是否為一重試要求諸如指令 Read_Retry (block_index)。當所接收到的要求是重試要求,則進入步驟312,以從此資料區塊的候選者清單上最前頭的候選者開始執行指令 Read_Retry (block_index);否則,進入步驟330,以使用正常的讀取指令諸如指令 Read (block_index)去向下層要求讀取此資料區塊。
於步驟312中,控制電路110可檢查是否能找到一候選者,諸如候選者清單上最新的領先候選者(leading candidate)。當找到此候選者時,則進入步驟314;否則,進入步驟338。
於步驟314中,控制電路110可向候選者清單上最新的領先候選者傳送指令 Read_Retry (block_index)
於步驟316中,控制電路110可檢查是否從下層取得 (ERR, block_index)。當下層儲存裝置或儲存系統以指令 Return (ERR, block_index)傳回 (ERR, block_index)作為回應(這表示最新的領先候選者有問題,例如讀取失敗),則進入步驟324;否則(例如:下層儲存裝置或儲存系統可傳回資料作為回應),進入步驟318。
於步驟318中,控制電路110可檢查讀取到的資料(即,於步驟314之後剛剛讀取到的資料)是否與先前暫存的錯誤雜湊值(若存在)吻合。例如:控制電路110可依據剛剛讀取到的資料進行計算,以自行產生對應於此資料的雜湊值,並將此自行產生的雜湊值以及先前暫存的錯誤雜湊值進行比較。當這兩個雜湊值彼此相同(即,於步驟314之後剛剛讀取到的資料與先前暫存的錯誤雜湊值吻合,這表示最新的領先候選者有問題,例如資料可能損壞),則進入步驟324,以從候選者清單移除此領先候選者;否則(即,於步驟314之後剛剛讀取到的資料與先前暫存的錯誤雜湊值不吻合),則進入步驟320。
關於上述先前暫存的錯誤雜湊值,若它不存在,則步驟318中之此檢查的結果可視為不吻合,故此狀況下可進入步驟320。
於步驟320中,控制電路110可儲存此資料的雜湊值(即,於步驟314之後剛剛讀取到的資料之雜湊值,諸如上述自行產生的雜湊值)。
於步驟322中,控制電路110可藉由利用指令 Return (DATA, block_index)傳回資料 DATA(諸如步驟320中所述之此資料)予上層。
於步驟324中,關於對應於索引 block_index之此資料區塊,控制電路110可從候選者清單移除領先的候選者(head candidate),諸如步驟314中所述之最新的領先候選者。例如:候選者清單上之每一候選者的記錄中有個欄位,而此欄位可用來標示上述每一候選者是否有效,故控制電路110可利用此欄位來註銷某一候選者,其中該些候選者當中凡是被標示為無效者可視為被移除。又例如:控制電路110可清除某一候選者的記錄,其中該些候選者當中凡是其記錄被清除者可視為被移除。
於步驟326中,控制電路110可清除所儲存之錯誤雜湊值,諸如於步驟324中所移除的候選者之雜湊值。
於步驟330中,控制電路110可向候選者清單上之一候選者傳送指令 Read (block_index),以由候選者讀取資料。
於步驟332中,控制電路110可檢查是否從下層取得 (ERR, block_index)。當下層儲存裝置或儲存系統以指令 Return (ERR, block_index)傳回 (ERR, block_index)作為回應(這表示步驟330中之候選者有問題,例如發生讀取失敗),則進入步驟336;否則(例如:下層儲存裝置或儲存系統可傳回資料作為回應),進入步驟334。
於步驟334中,控制電路110可藉由利用指令 Return (DATA, block_index)傳回資料 DATA(諸如於步驟330之後剛剛讀取到的資料)予上層。
於步驟336中,關於對應於索引 block_index之此資料區塊,控制電路110可從候選者清單移除(步驟330中所述之)候選者。
於步驟338中,控制電路110可清除所儲存之錯誤雜湊值,諸如於步驟310之前所取得之雜湊值。例如:基於步驟312的檢查運作,當從步驟312進入步驟338時,就表示控制電路110之下層不存在任何有效的冗餘版本,故控制電路110針對此資料區塊所儲存的任何雜湊值可視為錯誤雜湊值。
於步驟340中,控制電路110可透過指令 Return (ERR, block_index)向上層傳回 (ERR, block_index)作為回應,以向上層回報錯誤。
關於上述先前暫存的錯誤雜湊值是否存在,另說明如下。於各種不同狀況中之任一者,上述先前暫存的錯誤雜湊值有可能存在、或不存在。例如:於步驟322中可傳送資料 DATA給上層,而上層拿到此資料 DATA就會去比對雜湊值,如果有錯誤的雜湊值就會暫存起來,接著進行重試要求,這個時候就會有錯誤的雜湊值存在;然而,如果雜湊值經比對後,被確認是正確的,就代表於步驟322中所傳送的資料 DATA是正確的,故可以進行寫入動作。
另外,關於候選者清單之某些實施細節另說明如下。依據某些實施例,對於各種類型之具有冗餘能力的儲存系統中之任一者而言,它的控制電路(諸如控制電路110)可依據對應的預定規則(諸如上述之預定規則)推算出任一個資料區塊的候選者清單。於此候選者清單中,存取代價較小者通常會排在前面,而存取代價較大者通常會排在後面。若有數個候選者代價都相同,則預定規則通常會被妥善的設計,以保證每次針對此資料區塊查詢此候選者清單時,都會得到一樣的結果,而不至於有不同的候選者順序。例如:第1圖所示之RAID-5儲存系統16的控制模組16C可得知RAID-5儲存系統16之下有3個儲存裝置Disk(2)、Disk(3)與Disk(4)。基於對應於RAID-5儲存系統16之預定規則,如果某個資料區塊儲存在儲存裝置Disk(2)上,則此資料區塊之第一候選者一定是儲存裝置Disk(2),這是因為可以直接讀取、代價比較低;雖然從儲存裝置Disk(3)與Disk(4)也可以組合出此資料區塊,不過需要讀取兩次再進行位元互斥或運算,故代價較高。又例如:第1圖所示之RAID-1儲存系統14的控制模組14C可依據對應的預訂規則得知,RAID-1儲存系統14之任一資料區塊的候選者清單可以是: (block_index) mod N1, (block_index + 1) mod N1, (block_index + 2) mod N1, ..., (block_index + N1 - 1) mod N1; 其中符號「N1」代表RAID-1儲存系統14的儲存裝置(諸如一個或多個HDD及/或一個或多個SSD)之數目。這樣,冗餘儲存系統10就不需要額外的儲存裝置空間來儲存許多分別對應於全部區塊之候選者清單,以節省儲存容量。
依據某些實施例,當控制電路110向下層傳送指令 Read_Retry (block_index)且從下層中之一候選者取得此資料區塊之資料時,控制電路110可自行計算對應於此資料之校驗資訊(諸如此資料之校驗和或雜湊值),且可暫存此自行計算之校驗資訊。之後,若從另一候選者讀到同樣的資料區塊內容(例如:當兩次收到的資料之校驗資訊彼此吻合),這表示另一候選者的來源儲存元件,諸如下層的這個候選儲存系統或候選儲存裝置,已用光了所有的冗餘能力。此狀況下,控制電路110可將此候選者從候選者清單中剔除,且清除暫存值,繼續搜尋下一個候選者(如步驟312、314、316、318、324與326之運作所示)。這樣的流程可一直重複,直到檔案系統12找到正確版本(例如檔案系統12使用指令 Write (DATA, block_index)來修復)、或是控制電路110試光了所有的候選者為止。
依據某些實施例,儲存系統端控制方案中之所有的雜湊值可代換為校驗和。該些實施例與前述實施例/變化例相仿之處不再重複贅述。
依據某些實施例,儲存系統端控制方案中之指令 Read_Retry (block_index)可代換為指令 Read (block_index, RETRY=1)(其位元旗標 RETRY被設定為邏輯值1),而儲存系統端控制方案中之指令 Read (block_index)可代換為指令 Read (block_index, RETRY=0)(其位元旗標 RETRY被設定為邏輯值0)。該些實施例與前述實施例/變化例相仿之處不再重複贅述。
第5圖為第1圖所示冗餘儲存系統10於一實施例中所涉及之一冗餘能力搜尋方案。例如:冗餘儲存系統10可具備五份的冗餘能力,其中一資料區塊諸如上述者可具有五個冗餘版本。依據本實施例,冗餘能力搜尋方案之步驟S1、S2、…與S62可指出資料修復機制之冗餘能力搜尋順序。例如:在步驟S1、S2、…與S62全部被依序執行的狀況下,資料修復機制可將冗餘儲存系統10之五個冗餘版本全部搜尋過一遍。
如第5圖所示,步驟S1至S6可對應於指令 Read (block_index),並可視為正常讀取流程。例如:指令 Read (block_index))可逐層地從檔案系統12透過裝置映射器13與RAID-1儲存系統14傳送至儲存裝置Disk(1)(步驟S1至S3),而儲存裝置Disk(1)之回覆(諸如以指令 Return (DATA, block_index)所傳回的資料 DATA)可逐層地透過RAID-1儲存系統14與裝置映射器13傳送至檔案系統12(步驟S4至S6)。另外,步驟S7至S62可對應於指令 Read_Retry (block_index),並可視為重試讀取流程,其中步驟S1至S62可搜尋所有可用的冗餘能力。基於檔案系統端控制方案,當發現校驗和錯誤,檔案系統12(尤其是其控制模組12C)可觸發重試讀取流程。例如:指令 Read_Retry (block_index)可逐層地從檔案系統12透過裝置映射器13與RAID-1儲存系統14傳送至儲存裝置Disk(1)(步驟S7至S9),而儲存裝置Disk(1)之回覆(諸如以指令 Return (DATA, block_index)所傳回的資料 DATA、或以指令 Return (ERR, block_index)所傳回的失敗資訊 ERR)可逐層地透過RAID-1儲存系統14與裝置映射器13傳送至檔案系統12(步驟S10至S12)。例如:當重試結果不成功,控制模組12C、14C、16C與18C可基於檔案系統端控制方案與儲存系統端控制方案進行後續運作(諸如步驟S13至S62之至少一部分),直到(依據停止搜尋準則)判斷應當停止搜尋為止。例如:於對儲存裝置Disk(1)重試完畢之後,控制模組14C可排除儲存裝置Disk(1)(步驟S9、S10、S15與S16)。又例如:於對儲存裝置Disk(2)重試完畢之後,控制模組16C可排除儲存裝置Disk(2)(步驟S18、S19、S26與S27)。又例如:於對儲存裝置Disk(3)與Disk(4)的組合(尤其是其相對應資料區塊之位元互斥或運算結果)重試完畢之後,控制模組16C可排除儲存裝置Disk(3)與Disk(4)(步驟S28、S29、S36與S37)。又例如:於對RAID-5儲存系統16重試完畢之後,控制模組14C可排除RAID-5儲存系統16及其下層(步驟S17、S20、S25、S30、S35與S38)。依此類推。
為了便於理解,第5圖中有許多步驟。例如:當五個冗餘版本都是錯的,則步驟S1至S62可全部執行。又例如:當五個冗餘版本中之一者是正確的,則只要找到此正確的版本,就可以停止搜尋;尤其是,停止在步驟S1至S62中之一中間(intermediate)步驟。由於五個冗餘版本全錯的機率很小,故步驟S1至S62全部執行的機率也很小。實作上,為了降低成本,多層儲存系統堆疊可以簡化,例如其某(些)部分可移除,故冗餘版本的總數可減少、且步驟S1至S62可對應地簡化。另外,由於控制電路110在有需要時才會採用上述至少一額外指令諸如指令 Read_Retry (block_index),故在冗餘儲存系統10正常、沒有錯誤的情況下讀寫時,本發明並不會對冗餘儲存系統10造成多餘的負擔。
依據某些實施例,應用程式可包含一控制模組,諸如一應用程式端控制模組,其中應用程式端控制模組可扮演「檔案系統端」的角色,並可基於檔案系統端控制方案來運作,以進行資料驗證。執行於上述至少一處理器之應用程式端控制模組可作為控制電路110之一例。
第6圖為依據本發明另一實施例之一種冗餘儲存系統10’的示意圖。相較於第1圖所示之架構,冗餘儲存系統10’中之檔案系統12’原本為一未內建校驗能力的檔案系統,其中應用程式可存取檔案系統12’。另外,應用程式端控制模組可對檔案系統12’進行資料修復。例如:為了進行資料驗證,應用程式端控制模組可針對需要保護的檔案去個別地產生校驗資訊(諸如校驗和或雜湊值)。當應用程式端控制模組透過檔案之校驗資訊發現檔案內容有誤時,可以利用指令 Read (block_index, RETRY)將此錯誤透過檔案系統12’告知其下層儲存系統堆疊(諸如檔案系統12’下方的儲存系統或儲存裝置),以容許控制模組12C、14C、16C與18C基於檔案系統端控制方案與儲存系統端控制方案進行運作。例如:應用程式端控制模組可進行資料驗證的工作,而檔案系統12’只需要負責傳遞指令與資料。如此,資料修復機制可以在不重建檔案系統12’的情況下,達到修復毀損資料的功能。
關於第6圖所示之架構之某些實施細節另說明如下。依據某些實施例,未內建校驗能力的檔案系統可藉由升級或更新其軟體或韌體,而被賦予發出指令 Read_Retry ( block_index)的能力。例如:檔案系統12’原本所存之舊檔案皆無附帶校驗和或雜湊值,且檔案系統12’原本也不會向下層發出指令 Read_Retry ( block_index)。透過升級檔案系統12’的軟體或韌體,可使檔案系統12’具備控制模組12C的能力。之後,透過妥善設計、撰寫之應用程式(諸如上述之應用程式)可讀取檔案的內容,並可將算出來的校驗和或雜湊值存在原檔案的擴充欄位(Extended attributes)中、或是存成另外一個新檔案。例如:針對具有檔名FILENAME之檔案,應用程式可將算出來的校驗和或雜湊值存入一個新檔案,諸如具有檔名FILENAME.md5之檔案。當下次再讀取此新檔案時,應用程式可同時把兩個檔案(期分別具有檔名FILENAME及FILENAME.md5)讀取出來,以比對校驗和或雜湊值。當發現錯誤時,該些實施例中之控制電路110(諸如控制模組12C、14C、16C與18C中之任一者)即可透過指令 Read_Retry ( block_index)來嘗試修復。如此,資料修復機制可以在不重建檔案系統12’且不搬動資料的情況下,達到修復毀損資料的功能。於某些實施例中,類似的概念亦可應用在原本不具備本發明之控制模組的儲存系統,諸如軟體模擬的RAID陣列卡(例如:工具程式模組「mdadm」所管理的軟體RAID;其中工具程式模組「mdadm」目前未見合適的中文譯名)、或硬體的RAID陣列卡,一樣可以透過升級軟體或韌體的方式,使其具備本發明之某(些)控制模組諸如控制模組12C、14C、16C與18C,並且因此認得指令 Read_Retry ( block_index)並做出相對應的資料修復程序。此外,該(些)控制模組底下所有已存有資料的儲存裝置都不需要做修改,即可具備修復損毀資料的功能。
請注意,傳統有冗餘能力的儲存系統僅能針對整個儲存裝置毀損的情況去保護,既無法偵測位元衰減,也沒有有效的手段去修復它。相較於相關技術,本發明可進行自動資料驗證與自動資料修復,以確保使用者總是讀取到正確可靠的資料內容。另外,本發明之相容性高、應用範圍廣。資料修復機制可透過軟體、韌體與硬體中之一者或多者來實現,且不需修改儲存系統或儲存裝置上的資料。例如:現有的各種RAID、DRBD、甚至是硬體的RAID陣列卡,都可以藉由升級軟體或韌體來實現資料修復機制,以得到自動資料驗證及自動資料修復的能力。對於已儲存有大量資料的儲存系統之使用者而言,不需要搬動資料即可輕易地實施本發明之架構。此外,本發明容許使用者將任意數量、任意類型的儲存裝置與儲存系統組合成儲存系統堆疊諸如上述者,其中在修復資料的時候,資料修復機制可讓上層使用到下層儲存系統的冗餘能力。若沒有上述至少一額外指令(諸如指令 Read_Retry (block_index)或指令 Read (block_index, RETRY=1)),這樣的儲存系統堆疊中之下層儲存系統的冗餘能力原本是不可見的(對上層而言)。基於上述至少一額外指令(諸如指令 Read_Retry (block_index)或指令 Read (block_index, RETRY=1);不論是否實施於檔案系統層或儲存系統層),資料修復機制能確保堆疊中所有儲存系統的冗餘能力可在有需要時被利用。 以上所述僅為本發明之較佳實施例,凡依本發明申請專利範圍所做之均等變化與修飾,皆應屬本發明之涵蓋範圍。
10,10’‧‧‧冗餘儲存系統
12‧‧‧內建校驗能力的檔案系統
12’‧‧‧檔案系統
12C,14C,16C,18C‧‧‧控制模組
13‧‧‧裝置映射器
14‧‧‧RAID-1儲存系統
16‧‧‧RAID-5儲存系統
18‧‧‧DRBD儲存系統
Disk(1),Disk(2),…,Disk(6)‧‧‧儲存裝置
100‧‧‧用來於冗餘儲存系統中進行資料修復之裝置
110‧‧‧控制電路
120-1,120-2,…,120-N‧‧‧儲存元件
210,212,…,232‧‧‧檔案系統端控制方案之步驟
310,312,…,340‧‧‧儲存系統端控制方案之步驟
S1,S2,…,S62‧‧‧冗餘能力搜尋方案之步驟
第1圖為依據本發明一實施例之一種冗餘儲存系統(redundant storage system)的示意圖。 第2圖為依據本發明一實施例之一種儲存系統的示意圖。 第3圖為第1圖所示冗餘儲存系統於一實施例中所涉及之一檔案系統端控制方案的流程圖。 第4圖為第1圖所示冗餘儲存系統於一實施例中所涉及之一儲存系統端控制方案的流程圖。 第5圖為第1圖所示冗餘儲存系統於一實施例中所涉及之一冗餘能力搜尋方案。 第6圖為依據本發明另一實施例之一種冗餘儲存系統的示意圖。
10‧‧‧冗餘儲存系統
12‧‧‧內建校驗能力的檔案系統
12C,14C,16C,18C‧‧‧控制模組
13‧‧‧裝置映射器
14‧‧‧RAID-1儲存系統
16‧‧‧RAID-5儲存系統
18‧‧‧DRBD儲存系統
Disk(1),Disk(2),...,Disk(6)‧‧‧儲存裝置

Claims (10)

  1. 一種用來於一冗餘儲存系統中進行資料修復之方法,該冗餘儲存系統包含複數個儲存裝置,該方法包含有: 從該冗餘儲存系統之複數層中之一特定層傳送至少一基本指令至該特定層之下層,其中該至少一基本指令包含一讀取指令,而該讀取指令係用來要求該下層傳回對應於一索引之一資料區塊;以及 從該特定層傳送至少一額外指令至該下層,其中該至少一額外指令包含一讀取重試指令,而該讀取重試指令係用來要求該下層傳回對應於該索引之一冗餘資料區塊,以供修復該資料區塊; 其中該冗餘儲存系統包含一檔案系統與複數個儲存元件,該檔案系統係位於該複數層中之最上層(topmost layer),以及該複數個儲存元件當中位於該複數層中之最底層者(bottommost layer)包含該複數個儲存裝置中之至少一組儲存裝置。
  2. 如申請專利範圍第1項所述之方法,其中該複數個儲存元件包含一第一儲存系統,以及該至少一組儲存裝置中之至少一部分儲存裝置屬於該第一儲存系統。
  3. 如申請專利範圍第2項所述之方法,其中該複數個儲存元件包含一第二儲存系統;以及,於該複數層當中,該第一儲存系統係位於該第二儲存系統之下。
  4. 如申請專利範圍第3項所述之方法,其中該第一儲存系統屬於該第二儲存系統。
  5. 如申請專利範圍第3項所述之方法,其中該複數個儲存元件包含至少一其它儲存裝置,以及該至少一其它儲存裝置屬於該第二儲存系統。
  6. 一種用來於一冗餘儲存系統中進行資料修復之裝置,包含有: 一控制電路,位於該冗餘儲存系統中之複數層中之一特定層、且耦接至該冗餘儲存系統中之複數個儲存裝置,用來控制該冗餘儲存系統之運作,其中控制該冗餘儲存系統之運作包含: 從該特定層傳送至少一基本指令至該特定層之下層,其中該至少一基本指令包含一讀取指令,而該讀取指令係用來要求該下層傳回對應於一索引之一資料區塊;以及 從該特定層傳送至少一額外指令至該下層,其中該至少一額外指令包含一讀取重試指令,而該讀取重試指令係用來要求該下層傳回對應於該索引之一冗餘資料區塊,以供修復該資料區塊; 其中該冗餘儲存系統包含一檔案系統與複數個儲存元件,該檔案系統係位於該複數層中之最上層(topmost layer),以及該複數個儲存元件當中位於該複數層中之最底層者(bottommost layer)包含該複數個儲存裝置中之至少一組儲存裝置。
  7. 如申請專利範圍第6項所述之裝置,其中該複數個儲存元件包含一第一儲存系統,以及該至少一組儲存裝置中之至少一部分儲存裝置屬於該第一儲存系統。
  8. 如申請專利範圍第7項所述之裝置,其中該複數個儲存元件包含一第二儲存系統;以及,於該複數層當中,該第一儲存系統係位於該第二儲存系統之下。
  9. 如申請專利範圍第8項所述之裝置,其中該第一儲存系統屬於該第二儲存系統。
  10. 如申請專利範圍第8項所述之裝置,其中該複數個儲存元件包含至少一其它儲存裝置,以及該至少一其它儲存裝置屬於該第二儲存系統。
TW105114847A 2016-05-13 2016-05-13 用來於一冗餘儲存系統中進行資料修復之方法與裝置 TWI582581B (zh)

Priority Applications (7)

Application Number Priority Date Filing Date Title
TW105114847A TWI582581B (zh) 2016-05-13 2016-05-13 用來於一冗餘儲存系統中進行資料修復之方法與裝置
CN201610388061.9A CN107368382A (zh) 2016-05-13 2016-06-02 用来在一冗余储存系统中进行数据修复的方法与装置
US15/381,118 US20170329683A1 (en) 2016-05-13 2016-12-16 Method and apparatus for performing data recovery in redundant storage system
EP17162131.1A EP3244315B1 (en) 2016-05-13 2017-03-21 Method and apparatus for performing data recovery in redundant storage system
US15/491,994 US20170329684A1 (en) 2016-05-13 2017-04-20 Method and apparatus for performing data recovery in redundant storage system
EP17169663.6A EP3244316B1 (en) 2016-05-13 2017-05-05 Method and apparatus for performing data recovery in redundant storage system
CN201710324675.5A CN107402842A (zh) 2016-05-13 2017-05-10 冗余存储系统中进行数据恢复操作的方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
TW105114847A TWI582581B (zh) 2016-05-13 2016-05-13 用來於一冗餘儲存系統中進行資料修復之方法與裝置

Publications (2)

Publication Number Publication Date
TWI582581B true TWI582581B (zh) 2017-05-11
TW201740273A TW201740273A (zh) 2017-11-16

Family

ID=58410105

Family Applications (1)

Application Number Title Priority Date Filing Date
TW105114847A TWI582581B (zh) 2016-05-13 2016-05-13 用來於一冗餘儲存系統中進行資料修復之方法與裝置

Country Status (4)

Country Link
US (1) US20170329683A1 (zh)
EP (1) EP3244315B1 (zh)
CN (1) CN107368382A (zh)
TW (1) TWI582581B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10120765B1 (en) 2014-12-19 2018-11-06 EMC IP Holding Company LLC Restore process using incremental inversion
US9753814B1 (en) * 2014-12-19 2017-09-05 EMC IP Holding Company LLC Application level support for selectively accessing files in cloud-based storage
US10095710B1 (en) 2014-12-19 2018-10-09 EMC IP Holding Company LLC Presenting cloud based storage as a virtual synthetic
US10095707B1 (en) 2014-12-19 2018-10-09 EMC IP Holding Company LLC Nearline cloud storage based on FUSE framework
US10235463B1 (en) 2014-12-19 2019-03-19 EMC IP Holding Company LLC Restore request and data assembly processes
US11467906B2 (en) * 2019-08-02 2022-10-11 EMC IP Holding Company LLC Storage system resource rebuild based on input-output operation indicator
CN111324360B (zh) * 2020-01-09 2022-04-01 华中科技大学 一种面向边缘计算的容器镜像构建方法和系统
CN113360095B (zh) * 2021-06-04 2023-02-17 重庆紫光华山智安科技有限公司 硬盘数据管理方法、装置、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243827B1 (en) * 1998-06-30 2001-06-05 Digi-Data Corporation Multiple-channel failure detection in raid systems
TW200731067A (en) * 2005-08-03 2007-08-16 Sandisk Corp Indexing of file data in reprogrammable non-volatile memories that directly store data files
TWI324308B (zh) * 2006-07-28 2010-05-01 Qnap Systems Inc
US20120204077A1 (en) * 2011-02-08 2012-08-09 Sandisk Corporation Data recovery using additional error correction coding data

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5233618A (en) * 1990-03-02 1993-08-03 Micro Technology, Inc. Data correcting applicable to redundant arrays of independent disks
JP2855019B2 (ja) * 1992-02-10 1999-02-10 富士通株式会社 外部記憶装置のデータ保証方法及び外部記憶装置
US6098128A (en) * 1995-09-18 2000-08-01 Cyberstorage Systems Corporation Universal storage management system
US6751757B2 (en) * 2000-12-07 2004-06-15 3Ware Disk drive data protection using clusters containing error detection sectors
US6854071B2 (en) * 2001-05-14 2005-02-08 International Business Machines Corporation Method and apparatus for providing write recovery of faulty data in a non-redundant raid system
US7237141B2 (en) * 2003-06-19 2007-06-26 Lsi Corporation Method for recovering data from a redundant storage object
JP4519563B2 (ja) * 2004-08-04 2010-08-04 株式会社日立製作所 記憶システム及びデータ処理システム
US7562285B2 (en) * 2006-01-11 2009-07-14 Rambus Inc. Unidirectional error code transfer for a bidirectional data link
US9684554B2 (en) * 2007-03-27 2017-06-20 Teradata Us, Inc. System and method for using failure casting to manage failures in a computed system
US8417987B1 (en) * 2009-12-01 2013-04-09 Netapp, Inc. Mechanism for correcting errors beyond the fault tolerant level of a raid array in a storage system
US8782465B1 (en) * 2011-12-22 2014-07-15 Emc Corporation Managing drive problems in data storage systems by tracking overall retry time
CN105513647A (zh) * 2011-12-23 2016-04-20 英特尔公司 用于堆叠存储器架构的自修复逻辑
US9098444B2 (en) * 2013-03-12 2015-08-04 Dell Products, Lp Cooperative data recovery in a storage stack
US9483349B2 (en) * 2014-01-17 2016-11-01 Netapp, Inc. Clustered raid data organization

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243827B1 (en) * 1998-06-30 2001-06-05 Digi-Data Corporation Multiple-channel failure detection in raid systems
TW200731067A (en) * 2005-08-03 2007-08-16 Sandisk Corp Indexing of file data in reprogrammable non-volatile memories that directly store data files
TWI324308B (zh) * 2006-07-28 2010-05-01 Qnap Systems Inc
US20120204077A1 (en) * 2011-02-08 2012-08-09 Sandisk Corporation Data recovery using additional error correction coding data

Also Published As

Publication number Publication date
US20170329683A1 (en) 2017-11-16
TW201740273A (zh) 2017-11-16
EP3244315B1 (en) 2019-01-02
EP3244315A1 (en) 2017-11-15
CN107368382A (zh) 2017-11-21

Similar Documents

Publication Publication Date Title
TWI582581B (zh) 用來於一冗餘儲存系統中進行資料修復之方法與裝置
US9892756B2 (en) Detection of logical corruption in persistent storage and automatic recovery therefrom
US8943357B2 (en) System and methods for RAID writing and asynchronous parity computation
KR101758544B1 (ko) 비휘발성 메모리 시스템에서의 동기 미러링
US20060106898A1 (en) Method, system, and program for storing and using metadata in multiple storage locations
US7685171B1 (en) Techniques for performing a restoration operation using device scanning
US7725704B1 (en) Techniques for performing a prioritized data restoration operation
US8082231B1 (en) Techniques using identifiers and signatures with data operations
US7565573B2 (en) Data-duplication control apparatus
US8904244B2 (en) Heuristic approach for faster consistency check in a redundant storage system
US7975171B2 (en) Automated file recovery based on subsystem error detection results
US20060117216A1 (en) Program, storage control method, and storage system
US7849258B2 (en) Storage apparatus and data verification method for the same
US8074113B2 (en) System and method for data protection against power failure during sector remapping
JP2006134064A (ja) 記憶メディアへの書込みエラーを検出する記憶制御装置及び方法
US11314594B2 (en) Method, device and computer program product for recovering data
US7685377B1 (en) Piecewise logical data management
US8533560B2 (en) Controller, data storage device and program product
US7577804B2 (en) Detecting data integrity
EP3244316B1 (en) Method and apparatus for performing data recovery in redundant storage system
US8418029B2 (en) Storage control device and storage control method
US6678107B1 (en) System and method for reading and writing N-way mirrored storage devices
US11379318B2 (en) System and method of resyncing n-way mirrored metadata on distributed storage systems without requiring checksum in the underlying storage
JP2008158724A (ja) ディスクアレイ装置のステージング方法
JP2008257360A (ja) Raid初期化方法及びraid初期化プログラム

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees