一個不是等)??缍壬系拿恳晃募到y(tǒng)分別被格式化、安裝和卸載??梢砸匀魏雾樞蛞约霸谌魏螘r候創(chuàng)建和刪除文件系統(tǒng)。文件系統(tǒng)可以被配置成自動擴(kuò)大(或可供選擇的避免或限制自動擴(kuò)大)或可以被手動擴(kuò)大。在某些實(shí)施例中,文件服務(wù)器在“組塊數(shù)據(jù)庫”中存儲文件系統(tǒng)的磁盤空間的虛擬和物理地址。為了文件系統(tǒng)的目的,跨度上磁盤空間的不連續(xù)的組塊看上去是連續(xù)的磁盤空間。在各個實(shí)施例中,文件服務(wù)器將關(guān)于文件系統(tǒng)的磁盤空間的信息存儲在磁盤接口(DI)芯片上表的條目中。表中的每一條目包括向文件系統(tǒng)分配的一部分磁盤空間的開始和結(jié)束位置。
[0044]“組塊”是單個帶區(qū)集上的磁盤空間區(qū)域。在一些實(shí)施例中,組塊可以是添加到文件系統(tǒng)的磁盤空間的增量。每一組塊駐留在單個帶區(qū)集上,例如組塊不跨越多個帶區(qū)集。在一些實(shí)施例中,組塊的大小的范圍可以在I千兆字節(jié)(GiB)和10GiB之間。當(dāng)一組塊尚未向文件系統(tǒng)分配時,該組塊是“可用的”或“空閑的”。當(dāng)一組塊已經(jīng)被分配時,組塊是“被使用的”且不能向另一文件系統(tǒng)分配或在相同的文件系統(tǒng)中被重用。組塊是“空閑的”或“被使用的”,例如,組塊不能被部分使用和部分空閑。在一些實(shí)施例中,當(dāng)跨度被創(chuàng)建時,管理員設(shè)置指導(dǎo)組塊大小。指導(dǎo)組塊大小是對該跨度中組塊大小的近似。允許文件服務(wù)器分配不同大小的組塊。從而,跨度中的組塊可以具有彼此不同的容量以及與指導(dǎo)組塊大小不同的容量。
[0045]“組塊串(run) ”是在文件系統(tǒng)空間內(nèi)和邏輯單元空間內(nèi)連續(xù)的一系列一個或多個組塊。從而,文件服務(wù)器可以對一個組塊串中的所有組塊執(zhí)行單個連續(xù)的讀或?qū)懖僮?。此夕卜,可以將讀或?qū)懖僮鞣g成針對帶區(qū)集中的邏輯單元中的每一個可比較的操作,以在每一邏輯單元上以相同的地址開始以及在每一邏輯單元上以相同的地址結(jié)束。在典型的實(shí)施例中,在某些環(huán)境下,一個組塊串可以以單個組塊開始并被擴(kuò)大成包括來自單個帶區(qū)集的多個連續(xù)的組塊。
[0046]“組塊串偏置”是在用于存儲向文件系統(tǒng)分配的磁盤空間的地址的表中的單個條目中存儲的組塊串的優(yōu)選長度。組塊串偏置可以指示文件服務(wù)器可以容忍帶區(qū)集之間的負(fù)載失衡的程度。當(dāng)組塊串偏置較低時,文件服務(wù)器更頻繁地從不同的帶區(qū)集分配組塊以保持橫跨跨度的負(fù)載平衡(例如,文件服務(wù)器在其開始從一個帶區(qū)集分配組塊之前從另一個帶區(qū)集分配較少的組塊)。在一些實(shí)施例中,當(dāng)跨度具有較少的組塊但是許多帶區(qū)集時,文件服務(wù)器確定更低的組塊串偏置以提供橫跨跨度的負(fù)載平衡。
[0047]“活動組塊串”是向可以擴(kuò)大的文件系統(tǒng)分配的組塊的組塊串。該組塊串是文件系統(tǒng)中的最后的組塊串,且緊跟在該組塊串之后的是與該組塊串相同的帶區(qū)集上的空閑組塊。
[0048]可以將帶區(qū)集上空閑組塊的組塊串分成兩個組塊串。組塊串中的一個是“主張的組塊串”,其是緊跟在活動組塊串之后的空閑組塊的組塊串,其長度比組塊串偏置更短。所主張的組塊串可以包括需要延長該活動組塊串以便其長度等于組塊串偏置的多個組塊。
[0049]“未主張的組塊串”是緊跟著主張的組塊串之后的空閑組塊的組塊串。組塊分配器任意從未主張的組塊串分配組塊。
[0050]“組塊數(shù)據(jù)庫”是用于跟蹤與一個或多個文件系統(tǒng)關(guān)聯(lián)的組塊的存儲結(jié)構(gòu)。圖1是根據(jù)本發(fā)明的一示例性實(shí)施例的文件存儲系統(tǒng)的示意性框圖。除了其他的之外,文件存儲系統(tǒng)包括通過諸如互聯(lián)網(wǎng)協(xié)議網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng))之類的通信網(wǎng)絡(luò)9004與各種客戶端設(shè)備信以及還通過諸如光纖通道網(wǎng)絡(luò)之類的存儲網(wǎng)絡(luò)9010與各種RAID系統(tǒng)^OS1WOOSn通信的多個文件服務(wù)器(為了簡單和方便起見示出了單個文件服務(wù)器9002)??蛻舳嗽O(shè)備gooe1-gooeM和文件服務(wù)器9002使用諸如cifs和/或nfs之類的一個或多個網(wǎng)絡(luò)文件協(xié)議通信。文件服務(wù)器9002和RAID系統(tǒng)9008^9008^?用諸如SCSI之類的存儲協(xié)議通信。應(yīng)該注意的是,文件存儲系統(tǒng)應(yīng)該包括在各種配置中互連的多個文件服務(wù)器和多個RAID系統(tǒng),包括全網(wǎng)狀配置,在該全網(wǎng)狀配置中任何文件服務(wù)器可以通過冗余和交換光纖通道網(wǎng)絡(luò)與任何RAID系統(tǒng)通信。
[0051]文件服務(wù)器9002管理一個或多個文件系統(tǒng)。文件服務(wù)器9002可以被配置成允許客戶端訪問文件系統(tǒng)的一部分,諸如在指定名稱下的樹或子樹。在CIFS用語中,可以將這樣的訪問稱為“共享”,而在NFS用語中,可以將這樣的訪問稱為“出口”。在內(nèi)部,文件服務(wù)器9002可以包括各種硬件實(shí)現(xiàn)的和/或硬件加速的子系統(tǒng),例如,如在美國專利申請N0.09/879, 798和10/889,158中所描述的,通過引用上文將其并入,且其可以包括基于硬件的、包含多個鏈接的子模塊的文件系統(tǒng),例如,如在美國專利申請N0.1O /286,015和11/841,353中所描述的,通過引用上文可以將其并入。
[0052]每一 RAID系統(tǒng)9008通常包括至少一個RAID控制器(且為了冗余,通常是兩個RAID控制器)以及由RAID控制器管理的多個物理存儲設(shè)備(例如,磁盤)。RAID系統(tǒng)9008將其存儲資源聚集到多個SD中。例如,每一 RAID系統(tǒng)9008可以被配置具有2到32個之間的SD,雖然在一些示例中,每一個RAID系統(tǒng)可以被配置用于更多的SD。每一 SD可以被限制在預(yù)定的最大尺寸(例如,2TB-64TB或更多)。將若干存儲設(shè)備組合到SD可以提供多種益處,包括增加的速度(相對較慢的單個存儲設(shè)備,但是可以跨若干存儲設(shè)備對數(shù)據(jù)進(jìn)行條帶化處理以使瓶頸變寬)、增加的容量(單個存儲設(shè)備相對較小,但是可以組合若干存儲設(shè)備來提供更可用的空間)、抽象化(所使用的空間量可以大于或小于單個存儲設(shè)備的大小)、回彈性(可以將相同的或冗余的信息存儲在每一存儲設(shè)備上,以便SD可以承受存儲設(shè)備的損失)。
[0053]文件服務(wù)器9002被配置成使用一個或多個SD,其可以來自單個RAID系統(tǒng)或來自多個RAID系統(tǒng)。文件服務(wù)器9002通常可以詢問RAID系統(tǒng)以發(fā)現(xiàn)每一 SD是主要的還是輔助的??刂颇囊粋€SD由文件服務(wù)器9002使用的方法在本申請中被稱為“許可”。從而,在實(shí)踐中,文件服務(wù)器9002將典型地被許可用于一些SD以及不被許可用于其他的SD。
[0054]在內(nèi)部,文件服務(wù)器9002能夠?qū)⑷舾蒘D組合到在本申請中被稱為“跨度”的更大的存儲池。在本質(zhì)上,跨度是若干SD的RAID O陣列。將若干SD組合到跨度內(nèi)提供了與通過將多個物理磁盤組合到SD內(nèi)獲得的益處相類似的益處,包括增加的速度(在多個RAID系統(tǒng)上的多個SD之間擴(kuò)展I/O可以進(jìn)一步加寬存儲瓶頸)、增加的存儲容量(跨度可以比單個SD更大,其可以被限制在二兆兆字節(jié))、以及另外的抽象化,其可以允許更靈活的存儲空間分配。
[0055]圖2是根據(jù)本發(fā)明一示例性實(shí)施例的跨度的示意框圖。如所示出的,跨度9011由邏輯上提供連續(xù)存儲空間的編號為goU1-goDK的多個帶區(qū)集組成。每一帶區(qū)集9012繼而由一個或多個范圍以及從而一個或多個SD組成。在該示例中,帶區(qū)集90121包括編號9013^9013^9范圍。
[0056]當(dāng)向帶區(qū)集寫入大量的數(shù)據(jù)時,文件服務(wù)器9002通??鐜^(qū)集中的多個范圍/SD將數(shù)據(jù)“條帶化”而不是向單個范圍/SD寫入所有的數(shù)據(jù)。例如,當(dāng)寫入大量的數(shù)據(jù)時,文件服務(wù)器9002可以將第一個4MB數(shù)據(jù)寫入范圍/SDgOU1中、將下一個4MB數(shù)據(jù)寫入范圍/SD90132中等等,在向范圍/SD 9013 j寫入數(shù)據(jù)之后,循環(huán)回到范圍/SD 9013 10除了其他的之夕卜,這樣的“條帶化”增加了文件服務(wù)器9002使用若干SD(以及從而若干存儲設(shè)備)的機(jī)會,上述若干SD可能由若干RAID系統(tǒng)管理。
[0057]應(yīng)該注意的是,在示例性的實(shí)施例中,當(dāng)創(chuàng)建跨度時,跨度9011初始地包含單個帶區(qū)集,但是隨著時間的過去,可以向跨度添加另外的帶區(qū)集,且不同的帶區(qū)集可以具有不同數(shù)目的范圍/SD。在示例性的實(shí)施例中,每一帶區(qū)集可以包含多達(dá)32個SD,而不管其容量??梢早R像化每一 SD,但是這樣的鏡像由RAID系統(tǒng)執(zhí)行而不是由文件服務(wù)器9002執(zhí)行;從而,對于被鏡像化的SD,文件服務(wù)器9002僅向主SD發(fā)送命令,且對于每帶區(qū)集的32個SD的限制,只有主SD才被計數(shù)。此外,在示例性的實(shí)施例中,一旦創(chuàng)建了帶區(qū)集,則不再向帶區(qū)集添加SD。從而,為了將SD添加到跨度,為了另外的SD形成新的帶區(qū)集,且在本質(zhì)上新的帶區(qū)集被連接到跨度中現(xiàn)有的帶區(qū)集。
[0058]從而,例如,跨度初始地可以包括具有編號為0-3的四個SD的單個帶區(qū)集。為了將三個編號5-7的新的SD添加到該跨度,創(chuàng)建了包含SD 5-7的第二帶區(qū)集,且第二帶區(qū)集被連接到第一帶區(qū)集?,F(xiàn)有的數(shù)據(jù)橫跨在跨度中的所有7個SD未“被重復(fù)條帶化”。
[0059]本質(zhì)上,可以將文件系統(tǒng)視作為具有N個順序的存儲塊的連續(xù)的存儲空間。為了討論的目的,可以順序地從O至N-1將塊邏輯地編號。實(shí)際上,文件系統(tǒng)存儲空間在跨度中可能在物理上是不連續(xù)的,但是其可以包含來自多個帶區(qū)集的存儲空間。一般而言,文件服務(wù)器9002將文件系統(tǒng)存儲塊映射到跨度內(nèi)的物理存儲位置。從而,在文件系統(tǒng)包括來自多個帶區(qū)集的存儲空間的示例性的實(shí)施例中,第一組文件系統(tǒng)存儲塊將映射到第一帶區(qū)集,第二組文件系統(tǒng)存儲塊將映射到第二帶區(qū)集,以此類推。
[0060]圖3是示出在本發(fā)明的示例性實(shí)施例中在存儲塊與帶區(qū)集之間的關(guān)系的示意圖。在該示例中,存在包括來自兩個帶區(qū)集的組塊的編號為O- (N-1)的N個存儲塊,其中第一個M個塊(編號為O至M-1)映射到來自帶區(qū)集I的組塊,并且剩余的N-M個塊(編號為M至N-1)映射到來自帶區(qū)集2的組塊。應(yīng)該注意的是,可能存在與每一帶區(qū)集關(guān)聯(lián)的數(shù)百萬個塊,且塊的數(shù)目可能在每一帶區(qū)集中是不同的。應(yīng)該注意的是,因為隨著時間的變化向文件系統(tǒng)進(jìn)行分配,因此典型的文件系統(tǒng)將具有來自每一帶區(qū)集的許多范圍。例如,其可能具有來自帶區(qū)集O的7GiB、來自帶區(qū)集2的9GiB、來自帶區(qū)集I的13GiB、來自帶區(qū)集O的llGiB、來自帶區(qū)集I的18GiB、來自帶區(qū)集O的8GiB、來自帶區(qū)集2的21GiB等。此外,其可以具有來自相同帶區(qū)集的不同區(qū)域的若干連續(xù)的范圍,在跨度僅包含一個或兩個帶區(qū)集的情況下,這尤其可能。
[0061]圖4是根據(jù)一示例性實(shí)施例的文件服務(wù)器9002上的跨度管理器9003的示意框圖。除了其他的之外,跨度管理器9003包括一個或多個組塊分配器9014和VLSI接口 9015,通過VLSI接口 9015跨度管理器9003與各種基于硬件的文件系統(tǒng)組件接口,包括具有表9025的磁盤接口(DI)芯片9020,該表9025存儲向文件系統(tǒng)分配的組塊串的位置??缍裙芾砥?003還與組塊數(shù)據(jù)庫9030接口,該組塊數(shù)據(jù)庫9030存儲與向文件系統(tǒng)分配的組塊相關(guān)的信息。在許多實(shí)施例中,組塊數(shù)據(jù)庫9030存儲關(guān)于跨度上的每一組塊的信息。組塊數(shù)據(jù)庫9030存儲關(guān)于跨度上的每個組塊的信息。跨度管理器9003的組塊分配器9014操作組塊數(shù)據(jù)庫9030。
[0062]DI芯片9020負(fù)責(zé)連接到物理存儲器(例如,在后端光纖通道SAN上的磁盤和/或固態(tài)存儲器)以及負(fù)責(zé)控制數(shù)據(jù)如何被存儲并在這些物理設(shè)備之間分布。當(dāng)跨度管理器9003從客戶端設(shè)備9006接收請求以擴(kuò)大文件系統(tǒng)的磁盤空間時,組塊分配器9014確定向文件系統(tǒng)分配哪一個或那些組塊。
[0063]在一些實(shí)施例中,文件服務(wù)器9002包括單個組塊分配器9014。組塊分配器9014針對不同的跨度存儲跨度權(quán)重和文件系統(tǒng)權(quán)重組,如在本申請中進(jìn)一步描述的。組塊分配器9014基于被擴(kuò)大的文件系統(tǒng)駐留在其上的跨度來選擇跨度權(quán)重和文件系統(tǒng)權(quán)重。在其他實(shí)施例中,文件服務(wù)器9002包括不同的組塊分配器9014,每一組塊分配器9014存儲不同組的跨度和文件系統(tǒng)權(quán)重。在一些實(shí)施例中,跨度管理器9003基于客戶端設(shè)備9006選擇組塊分配器9014。在一些實(shí)施例中,跨度管理器9003基于要被擴(kuò)大的文件系統(tǒng)來選擇組塊分配器9014。
[0064]組塊分配器9014確定組塊的虛擬地址和邏輯單元上磁盤空間中的相應(yīng)物理地址,以及邏輯單元的設(shè)備標(biāo)識符。組塊分配器9014存儲與組塊數(shù)據(jù)庫9025中以及DI芯片9020中的表9025中所分配的組塊相關(guān)的信息。在一些實(shí)施例中,組塊分配器9014將關(guān)于每一單個分配的組塊的信息存儲在組塊數(shù)據(jù)庫9025中。組塊分配器9014還通過VLSI接口 9015更新DI芯片9020上的表9025以反映新分配的組塊。
[0065]在一些實(shí)施例中,表9205包括卷映射表和帶區(qū)集映射表。組塊分配器9014存儲和/或更新在卷映射表的條目中的組塊串的文件系統(tǒng)空間的開始和結(jié)束地址。帶區(qū)集映射表存儲文件系統(tǒng)空間中的地址與SD空間中的地址之間的關(guān)系。從而,使用卷映射和帶區(qū)集映射表,文件系統(tǒng)可以訪問已經(jīng)分配給其的磁盤空間的組塊。在一些實(shí)施例中,組塊分配器9014存儲諸如虛擬地址、物理地址、以及與組塊相對應(yīng)的設(shè)備標(biāo)識符之類的信息。在一些實(shí)施例中,虛擬地址是文件系統(tǒng)偏移,設(shè)備標(biāo)識符是LU設(shè)備標(biāo)識符,且物理地址是邏輯單元上的偏移。
[0066]在示例性的實(shí)施例中,當(dāng)文件系統(tǒng)由一個或多個組塊擴(kuò)大而不是以隨便的方式從帶區(qū)集分配組塊以及針對每一添加的組塊使用組塊數(shù)據(jù)庫9025中的單獨(dú)的表條目時,跨度管理器9003,尤其是組塊分配器9014,在下文更充分討論的某些環(huán)境下,從與文件系統(tǒng)中存在的最后的組塊(即,與組塊數(shù)據(jù)庫9025中最后填充的條目關(guān)聯(lián)的組塊)相同的帶區(qū)集分配一個或多個組塊,且上述一個或多個組塊與上述最后的組塊相連,且組塊數(shù)據(jù)庫9025中相應(yīng)的條目被更新成反映向文件系統(tǒng)分配的磁盤空間中的有效增加。以此方式,與最后的表條目關(guān)聯(lián)的虛擬文件系統(tǒng)地址的范圍增長并映射到物理存儲器的多個連續(xù)的組塊,而不利用另外的表條目,并從而將這些表條目留用于進(jìn)一步擴(kuò)大。因此,通??梢詳U(kuò)大文件系統(tǒng)以在不擴(kuò)大表大小的情況下包括更大的組塊數(shù)目(例如,在使用具有1023個條目的固定大小的表的系統(tǒng)中超過1023個組塊)。
[0067]圖5是在一帶區(qū)集中組塊的示意性表示,該帶區(qū)集包括一些已經(jīng)被使用的組塊和一些可向文件系統(tǒng)分配的空閑的組塊。為了方便起見,“空閑的”組塊被稱為“空閑1”、“空閑2”等。在該實(shí)施例中,帶區(qū)集包括被使用的組塊的不連續(xù)組塊串。已使用的組塊I和2被分配給相同的文件系統(tǒng)。當(dāng)文件服務(wù)器9002搜索空閑的組塊來分配給不同的文件系統(tǒng)時,文件服務(wù)器9002搜索跟在文件系統(tǒng)的活動組塊串(例如,所主張的組塊串)之后的預(yù)定數(shù)目的空閑組塊,如在本申請中進(jìn)一步描述的。從而,文件服務(wù)器9002繞開空閑的組塊,以便文件系統(tǒng)在后來可以擴(kuò)大到所主張的組塊串中的組塊。文件服務(wù)器9002在所主張的組塊串之后向不同的文件系統(tǒng)分配組塊,例如,組塊“被使用的3”。為了展示的目的,假設(shè)針對跨度管理器9003接收一請求,以將給定的文件系統(tǒng)擴(kuò)大大小為X的三個組塊??缍裙芾砥鲝目捎玫拇鎯ζ鞣峙淙齻€組塊。雖然三個組塊可以來自單個帶區(qū)集或來自兩個或三個不同的帶區(qū)集,為了該展示,假定來自圖5的組塊“空閑1”、“空閑2”和“空閑3”被分配用于該文件系統(tǒng)。
[0068]圖6是表9025的示意性表示,如在示例性的