用于在數(shù)據(jù)存儲系統(tǒng)中實現(xiàn)存儲的細粒度、可伸縮分配的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲系統(tǒng),而且更具體地,本發(fā)明涉及能夠向文件系統(tǒng)進行磁盤空間的細粒度、可伸縮分配的數(shù)據(jù)存儲系統(tǒng)。
【背景技術(shù)】
[0002]在今天的信息時代,數(shù)據(jù)存儲系統(tǒng)經(jīng)常管理不時需要動態(tài)擴大磁盤空間的文件系統(tǒng)。經(jīng)常,文件系統(tǒng)在存儲增量方面擴大(在本申請中稱為“組塊”)。數(shù)據(jù)存儲系統(tǒng)可以允許選擇不同的指導組塊大小,雖然存儲系統(tǒng)可以分配大小偏離指導組塊大小的組塊。在一個示例性的數(shù)據(jù)存儲系統(tǒng)中,組塊大小可以從I千兆字節(jié)(GiB)到lOOGiB。在另一示例性數(shù)據(jù)存儲系統(tǒng)中,組塊大小可以從0.5GiB到18GiB。
[0003]這樣的系統(tǒng)的文件服務器將文件系統(tǒng)空間中磁盤空間的虛擬地址翻譯成物理存儲器中的磁盤空間的地址,且其可以使用固定大小的表來跟蹤向文件系統(tǒng)分配的磁盤空間的組塊(例如,在一示例性的數(shù)據(jù)存儲系統(tǒng)中具有1023條目的表,其中例如,每一條目用于存儲組塊的開始物理地址和與組塊的大小相關(guān)的信息(例如,組塊長度或組塊的結(jié)束地址)并映射到虛擬文件系統(tǒng)地址的范圍)。使用固定大小的表通常限制了文件系統(tǒng)的最大大小,即僅允許向文件系統(tǒng)分配預定的最大數(shù)目的組塊??梢栽谟布袑崿F(xiàn)固定大小的表,而且在任何情況下,增加表大小以允許支持更大的文件系統(tǒng)可能是行不通的。
[0004]為特定的文件系統(tǒng)選擇指導組塊大小實質(zhì)上是用戶期望文件系統(tǒng)增長多大和存儲空間的利用效率之間的折衷。一般而言,選擇較小的指導組塊大小提供了高效的存儲空間利用率但是限制了文件系統(tǒng)的最大大小,而選擇較大的指導組塊大小經(jīng)常導致低效的存儲空間利用但是增加了最大的文件系統(tǒng)大小。
【發(fā)明內(nèi)容】
[0005]在某些實施例中,提供了一種用于擴大用于文件系統(tǒng)的存儲空間的方法和數(shù)據(jù)存儲系統(tǒng),該文件系統(tǒng)包括從多個帶區(qū)集中選擇的多個組塊,其中文件系統(tǒng)的虛擬地址空間被映射到與組塊關(guān)聯(lián)的物理存儲地址。該方法包含保持組塊數(shù)據(jù)庫以跟蹤與文件系統(tǒng)關(guān)聯(lián)的組塊,組塊數(shù)據(jù)庫包含固定數(shù)量的條目,每一條目能夠存儲與分配給文件系統(tǒng)的一部分存儲空間的開始地址和長度相關(guān)的信息;接收請求以擴大文件系統(tǒng);基于組塊數(shù)據(jù)庫識別與文件系統(tǒng)關(guān)聯(lián)的最后組塊;當至少一個組塊可用于向文件系統(tǒng)分配時,從與最后的組塊相同的帶區(qū)集分配該至少一個組塊且該至少一個組塊與最后的組塊連續(xù);以及更新組塊數(shù)據(jù)庫中與最后的組塊關(guān)聯(lián)的條目以反映由所分配的至少一個組塊所表示的連續(xù)存儲空間的長度的增加。
[0006]在各個可供替換的實施例中,在確定來自與該最后的組塊相同的帶區(qū)集且與該最后的組塊連續(xù)的至少一個組塊可用于向文件系統(tǒng)分配之前,預留來自與該最后的組塊相同的帶區(qū)集且與該最后的組塊連續(xù)的至少一個組塊,以便該至少一個組塊保持可用。
[0007]確定來自與最后的組塊相同的帶區(qū)集且與最后的組塊連續(xù)的至少一個組塊是否可用于向文件系統(tǒng)分配可涉及:確定針對文件系統(tǒng)的活動組塊串長度以及當活動組塊串長度小于組塊串偏置以及存在來自與最后的組塊相同的帶區(qū)集且與最后的組塊連續(xù)的至少一個組塊時確定存在可用于向文件系統(tǒng)分配的至少一個組塊。在這個方面,分配至少一個組塊可涉及:從與最后的組塊相同的帶區(qū)集分配多達N個組塊,且這N個組塊與最后的組塊連續(xù),其中N等于組塊串偏置減去活動組塊串長度。該方法還可涉及:確定組塊串偏置,例如通過基于帶區(qū)集的數(shù)量和文件系統(tǒng)的數(shù)量確定組塊串偏置。
[0008]該方法還可涉及:當來自與最后的組塊相同的帶區(qū)集且與最后的組塊連續(xù)的這樣的至少一個組塊被確定為不可用時,從不同的帶區(qū)集分配至少一個組塊。
[0009]在某些實施例中,可以在硬件中保持組塊數(shù)據(jù)庫,且數(shù)據(jù)存儲系統(tǒng)可以包括在基于軟件的組塊分配器和該硬件之間耦合的接口,并且組塊分配器通過該接口訪問組塊數(shù)據(jù)庫。
[0010]在其它實施例中,提供了一種用于以細粒度、可縮放的方式擴大用于文件系統(tǒng)的存儲空間的方法和數(shù)據(jù)存儲系統(tǒng)。該方法包括:由文件服務器確定針對一跨度的組塊串偏置,其中該組塊串偏置指示了與用于文件系統(tǒng)的地址翻譯表中的條目相關(guān)聯(lián)的磁盤空間的多個連續(xù)的組塊。該方法包括由文件服務器接收對于擴大用于文件系統(tǒng)的磁盤空間的請求。該方法包括由組塊分配器至少部分地基于在帶區(qū)集上的多個未使用的組塊的數(shù)目和正由文件系統(tǒng)使用的帶區(qū)集上的組塊的數(shù)目,對一組帶區(qū)集中的每一帶區(qū)集記分。該方法包括由組塊分配器分配帶區(qū)集上的具有最高記分的組塊,其中所分配的組塊位于預留用于其他文件系統(tǒng)的組塊串之外。
[0011]確定針對一跨度的組塊串偏置可以包括由文件服務器確定缺省組塊串偏置。確定針對一跨度的組塊串偏置可以包括由文件服務器基于帶區(qū)集的數(shù)目和文件系統(tǒng)的數(shù)目確定組塊串偏置。
[0012]對每一帶區(qū)集的記分可以包括由組塊分配器確定文件系統(tǒng)的所分配的最后的組塊之后的組塊可用;由組塊分配器確定針對文件系統(tǒng)的當前帶區(qū)集的偏置因子,其中當前的帶區(qū)集包括文件系統(tǒng)的所分配的最后的組塊;以及由組塊分配器對具有偏置因子的當前的帶區(qū)集記分。對每一帶區(qū)集記分可以包括由組塊分配器確定在文件系統(tǒng)的所分配的最后的組塊之后的組塊由另一文件系統(tǒng)使用;以及由組塊分配器至少部分地基于帶區(qū)集上未使用的組塊的數(shù)目與預留用于其他文件系統(tǒng)的組塊的數(shù)目之間的差,來對一組帶區(qū)集中的每一帶區(qū)集進行記分。對每一帶區(qū)集記分可以包括由組塊分配器至少部分地基于帶區(qū)集上未使用的組塊的數(shù)目、跨度權(quán)重、正由文件系統(tǒng)使用的帶區(qū)集上的組塊的數(shù)目、以及文件系統(tǒng)權(quán)重,來對一組帶區(qū)集中的每一帶區(qū)集進行記分。
[0013]在具有最高分數(shù)的帶區(qū)集上分配組塊可以包括由組塊分配器選擇文件系統(tǒng)的所分配的最后的組塊之后的組塊。分配帶區(qū)集上的具有最高分數(shù)的組塊可以包括由組塊分配器搜索長度至少為組塊串偏置的未預留的組塊的組塊串;以及,由組塊分配器選擇該組塊串中的第一組塊。分配帶區(qū)集上具有最高分數(shù)的的組塊可以包括由組塊分配器搜索其長度至少是組塊串偏置的預留組塊的組塊串;以及由組塊分配器選擇在該組塊串的后半部分中的第一組塊。
[0014]在又一實施例中,提供了一種用于擴大用于文件系統(tǒng)的存儲空間的方法和數(shù)據(jù)存儲系統(tǒng),該文件系統(tǒng)包括從多個帶區(qū)集選擇的多個組塊,其中文件系統(tǒng)的虛擬地址空間被映射到與組塊關(guān)聯(lián)的物理存儲地址。該方法涉及:保持組塊數(shù)據(jù)庫以跟蹤與多個文件系統(tǒng)關(guān)聯(lián)的組塊,該組塊數(shù)據(jù)庫包含固定數(shù)量的條目,每一條目能夠存儲與向文件系統(tǒng)中的一個文件系統(tǒng)所分配的一部分存儲空間的開始地址和長度相關(guān)的信息;接收用于擴大多個文件系統(tǒng)中的一文件系統(tǒng)的請求;選擇從其處分配存儲空間的帶區(qū)集;利用帶區(qū)集上的開始地址從組塊數(shù)據(jù)庫獲取條目,其中該條目與多個文件系統(tǒng)中的不同文件系統(tǒng)的活動組塊串相對應;識別帶區(qū)集上位于N個組塊之后的至少一個組塊,上述N個組塊跟在活動組塊串中最后的組塊之后且與該最后的組塊連續(xù),其中N等于組塊串偏置減去活動組塊串的活動組塊串長度;以及如果該至少一個組塊可用,則向文件系統(tǒng)分配至少一個組塊。
[0015]在各種可供替換的實施例中,該方法可以進一步涉及:繼續(xù)利用帶區(qū)集上的開始地址從組塊數(shù)據(jù)庫獲取條目以及識別位于N個組塊之后的至少一個組塊,上述N個組塊跟在活動組塊串中的最后的組塊之后且與該最后的組塊連續(xù),直到該至少一個組塊可用。識別帶區(qū)集上的至少一個組塊可涉及:識別等于組塊串偏置的可用的組塊的組塊串或識別帶區(qū)集上可用的組塊的最長組塊串。
[0016]在又一其它實施例中,提供了一種用于擴大用于文件系統(tǒng)的存儲空間的方法和數(shù)據(jù)存儲系統(tǒng),該文件系統(tǒng)包括從多個帶區(qū)集中選擇的多個組塊,其中文件系統(tǒng)的虛擬地址空間被映射到與組塊關(guān)聯(lián)的物理存儲地址。該方法涉及:保持組塊數(shù)據(jù)庫以跟蹤與多個文件系統(tǒng)關(guān)聯(lián)的組塊,組塊數(shù)據(jù)庫包含固定數(shù)量的條目,每一條目能夠存儲與向文件系統(tǒng)中的一個文件系統(tǒng)所分配的一部分存儲空間的開始地址和長度相關(guān)的信息;接收用于擴大多個文件系統(tǒng)中的一文件系統(tǒng)的請求;確定針對該請求的組塊的數(shù)目超過組塊串偏置中的組塊數(shù)目乘以跨度上帶區(qū)集的數(shù)目;通過將針對該請求的組塊的數(shù)目除以帶區(qū)集的數(shù)目來確定從每一帶區(qū)集分配的組塊的數(shù)目;在每一帶區(qū)集上搜索可用的組塊的組塊串,其等于要從每一帶區(qū)集分配的組塊的數(shù)目;從每一帶區(qū)集分配可用組塊的組塊串;以及,針對可用組塊的每一組塊串在組塊數(shù)據(jù)庫中創(chuàng)建與可用組塊的組塊串關(guān)聯(lián)的條目,其中條目包括組塊串的長度。
[0017]實施例還可以包括配置成執(zhí)行上述方法中的任何一個方法的計算機程序。
[0018]實施例還可以包括裝置,該裝置包含有形的計算機可讀介質(zhì),在該有形的計算機可讀介質(zhì)中包含配置成執(zhí)行上述方法中的任何一個方法的計算機程序。
[0019]可以公開和主張保護另外的實施例。
【附圖說明】
[0020]通過參考隨后的具體描述將更容易理解本發(fā)明的前述特征,參考附圖,其中:
[0021]圖1是表示根據(jù)本發(fā)明一示例性實施例的文件存儲系統(tǒng)的示意性框圖;
[0022]圖2是表示根據(jù)本發(fā)明一示例性實施例示出文件系統(tǒng)的通用格式的示意性框圖;
[0023]圖3是表示在本發(fā)明的示例性實施例中示出在存儲塊與帶區(qū)集(stripeset)之間的關(guān)系的不意圖;
[0024]圖4是表示文件存儲系統(tǒng)的文件服務器的示意性框圖;
[0025]圖5是表示帶區(qū)集中組塊的示意性表示,其包含已經(jīng)被使用的一些組塊以及可向文件系統(tǒng)分配的一些空閑的組塊;
[0026]圖6是表示如在示例性的現(xiàn)有技術(shù)的實施例中在特定的點適時可以找到的表9025的示意性表示,其中在單獨的表條目中存儲用于每一新的組塊的信息;
[0027]圖7是表示如在示例性的實施例中在特定的點適時可以找到的表9025的示意性表示,其中可以在單個表條目中存儲針對連續(xù)組塊的信息,代替在圖6中示出的表9025。
[0028]圖8是表不根據(jù)一不例性實施例不出圖7中的表條目9030如何被修改成合并兩個另外的連續(xù)組塊的表9025的示意性表示;
[0029]圖9是表示根據(jù)一示例性實施例將圖4中的文件系統(tǒng)空間擴大相同大小(例如X)的三個組塊的示意性表示;
[0030]圖10是表示根據(jù)一示例性實施例的用于通用組塊分配過程的流程圖;
[0031]圖11是表示選擇帶區(qū)集和要向文件系統(tǒng)分配的帶區(qū)集上的組塊的方法的示例性流程圖;
[0032]圖12是表示選擇帶區(qū)集的方法的示例性流程圖,在當前的帶區(qū)集包含針對所示出和描述的該文件系統(tǒng)的可擴大的活動組塊串時將從該帶區(qū)集分配組塊;
[0033]圖13是表示選擇帶區(qū)集的方法的示例性流程圖,在當前的帶區(qū)集不包含針對所示出和描述的該文件系統(tǒng)的可擴大的活動組塊串時將從該帶區(qū)集分配組塊;
[0034]圖14是表示存儲向文件系統(tǒng)分配的組塊串的文件系統(tǒng)空間中的開始和結(jié)束地址的示例性表;
[0035]圖15是表示減小組塊串偏置以提高橫跨跨度(span)的負載平衡的方法的示例性流程圖;
[0036]圖16是表示搜索帶區(qū)集上用于向文件系統(tǒng)分配的非預留的組塊的方法的示例性流程圖;以及
[0037]圖17是表示橫跨跨度中的所有帶區(qū)集分配存儲空間的方法的示例性流程圖。
[0038]應該注意的是,前述的附圖和附圖中描述的元件不一定繪制成一致的比例或繪制成任何比例。除非上下文另有說明,否則類似的元件由類似的數(shù)字指示。
【具體實施方式】
[0039]定義。如在說明書和所附權(quán)利要求書中所使用的,隨后的術(shù)語應該具有所指示的含義,除非上下文另有需求:
[0040]“存儲設備”是用于存儲數(shù)據(jù)的設備或系統(tǒng)。存儲設備可以包括一個或多個磁或磁光或光盤驅(qū)動器、固態(tài)存儲設備、或磁帶。為了方便起見,存儲設備有時被稱為“磁盤”或“硬盤”。數(shù)據(jù)存儲系統(tǒng)可以包括具有相同或不同存儲容量的相同或不同類型的存儲設備。
[0041]“RAID控制器”是將若干存儲設備的存儲容量組合到存儲空間的虛擬塊中的設備或系統(tǒng),該存儲空間的虛擬塊或者可以被稱為“系統(tǒng)驅(qū)動器” (“SD”)、“邏輯單元” (“LU”或“LUN”)、或“卷”。典型地,SD大于單個存儲設備,從若干存儲設備獲取空間,且包含冗余信息,以便其能夠經(jīng)得起某些數(shù)量的磁盤的故障而沒有數(shù)據(jù)損失。在示例性的實施例中,每一SD與唯一的標識符相關(guān)聯(lián),該唯一的標識符在下文中被稱為“邏輯單元標識符”或“LUID”,且每一 SD將不大于預定的最大尺寸,例如2TB-64TB或更大的。當向SD發(fā)送命令時,RAID控制器典型地同時向SD的所有存儲設備轉(zhuǎn)發(fā)命令。RAID控制器有助于克服典型的存儲設備的三個主要限制,即存儲設備典型地是存儲系統(tǒng)中最慢的組件,其典型地最可能遭受災難性的故障,且其典型地具有相對較小的存儲容量。
[0042]“RAID系統(tǒng)”是包含一個或多個RAID控制器和多個存儲設備的設備或系統(tǒng)。典型地,RAID系統(tǒng)將包含兩個RAID控制器(以便在另一個故障的情況下,一個能夠保持工作,以及還在兩個都正常工作時共享負載)和許多存儲設備。在示例性的實施例中,RAID系統(tǒng)典型地配置有2個和32個之間的SD,雖然在各個實施例中,示例性的RAID系統(tǒng)可以有更多個SD0當文件服務器需要存儲或獲取數(shù)據(jù)時,其向RAID系統(tǒng)的RAID控制器發(fā)送命令,其繼而負責向前向單個存儲設備路由命令并在必要時存儲或獲取數(shù)據(jù)。利用一些RAID系統(tǒng),可以在SD之間建立鏡像關(guān)系,使得為了冗余的目的,向一個SD (被稱為“主SD”)寫入的數(shù)據(jù)由RAID系統(tǒng)自動地向另一 SD(在本申請中被稱為“輔助SD”或“鏡像SD”)寫入??梢杂膳c主SD相同的RAID系統(tǒng)或由不同的本地或遠程RAID系統(tǒng)管理輔助SD。鏡像SD有效地提供了跨SD的RAID 1+0功能,以提供從一 SD的丟失或損壞中的恢復或在一些情形下可能從甚至多個SD的丟失或損壞中的恢復。
[0043]“文件系統(tǒng)”是在文件存儲系統(tǒng)中存儲的文件和目錄(文件夾)的結(jié)構(gòu)。在一些實施例中,文件系統(tǒng)是在一個或多個帶區(qū)集的組塊上駐留的磁盤空間的虛擬化區(qū)域。在文件存儲系統(tǒng)中,典型地使用多個虛擬存儲結(jié)構(gòu)來管理文件系統(tǒng),且在示例性實施例中,使用被稱為范圍、帶區(qū)集和跨度的虛擬存儲結(jié)構(gòu)的層級來管理文件系統(tǒng)?!胺秶庇芍鱏D獨自或應該包含相同的數(shù)據(jù)并從而將相同的存儲容量提供為單個SD的主/輔助SD對組成?!皫^(qū)集”由一個或多個范圍組成。在一些實施例中,帶區(qū)集可以包含多達三十二(32)個邏輯單元(“LU”)。如果其全部組塊都被使用,則該帶區(qū)集是“滿的”。否則,該帶區(qū)集是“不滿的”?!翱缍取庇梢粋€或多個帶區(qū)集(例如,多達64個帶區(qū)集,其中帶區(qū)集不需要彼此具有相同的容量或包含相同數(shù)目的LU)。在一些實施例中,跨度包含多個文件系統(tǒng)(例如,多達128個文件系統(tǒng))組成。從而,跨度最終由一個或多個SD組成(典型地4到50個SD)??缍瓤梢员粍澐殖梢粋€或多個文件系統(tǒng),每一文件系統(tǒng)具有單獨的名稱和標識符以及潛在不同的特性(例如,一文件系統(tǒng)可以被格式化具有32KB簇而另一個文件系統(tǒng)具有4KB簇,一文件系統(tǒng)可以是蠕蟲而另