ReFS
ReFS
ReFS(Resilient File System,彈性文件系統)是在Windows Server 2012中新引入的一個文件系統。目前只能應用於存儲數據,還不能引導系統,並且在移動媒介上也無法使用。
ReFS是與NTFS大部分兼容的,其主要目的 是為了保持較高的穩定性,可以自動驗證數據是否損壞,並儘力恢複數據。如果和引入的Storage Spaces(存儲空間)聯合使用的話則可以提供更佳的數據防護。同時對於上億級別的文件處理也有性能提升。
ReFS
直到在Windows 10 v1703中ReFS首次亮相於桌面版本並默認開啟了格式化功能,而在Windows 10 v1709中微軟將其變更為僅在專業工作站版和企業版中才開放格式化並默認收回了其他SKU版本創建ReFS卷功能(對於已格式化現有的ReFS卷在這些SKU中仍然可用)。
ReFS
ReFS已發行的版本號:
ReFS
v1.2:由Windows Server 2012 R2格式化創建的默認版本。在Windows Server 2016和Windows 10 v1703及更高版本系統的命令行中指定ReFSv1格式化創建的默認版本。
v2.0:由Windows Server 2016 TP2和TP3格式化創建的默認版本。在Windows Server 2016 Technical Preview 4及更高版本中無法裝載使用。
v3.0:由Windows Server 2016 TP4和TP5格式化創建的默認版本。
v3.1:由Windows Server 2016 RTM格式化創建的默認版本。
v3.2:由Windows 10 v1703和Windows Server IP v1709 Build16237格式化創建的默認版本。
v3.3:由Windows 10 v1709和Windows Server IP v1709 Build16257格式化創建的默認版本。Windows 10 v1709從Insider Preview Build16226開始僅支持在專業工作站版和企業版中創建ReFS卷。
v3.4:由Windows 10 v1803與v1809和Windows Server 2019格式化創建的默認版本。Windows Server從Insider Preview v1803 Build17083開始ReFS升級為3.4版本。
註釋:
1、當ReFSv3.X的較低版本在較高版本的系統中以可讀寫狀態裝載時,Windows默認會自動將其升級為較高的版本(對於ReFSv1.X則不會自動升級)。
2、升級過後的ReFS卷在之前的較低版本Windows中將無法被識別,且除了在較低版本系統中重新格式化外沒有其他辦法能夠降級。
3、如需禁止Windows自動升級ReFS版本號則需要修改以下註冊表鍵值:
按下Windows徽標+R快捷鍵打開運行窗口,輸入 regedit.exe 確定打開註冊表編輯器並在其左側點擊定位到以下路徑
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem
點擊 FileSystem 項后在右側空白處右鍵新建一個DWORD(32位)鍵值並將其重命名為“RefsDisableVolumeUpgrade”(不含引號,如已存在則不需要再新建),雙擊打開並將其數值數據設置為 1 確定后重啟系統生效。
保持對一部分廣泛採用的 NTFS 功能的兼容性,同時放棄其他價值有限但會大幅增加系統複雜性和佔用率的功能。
驗證並自動更正數據。數據可能會由於各種原因而損壞,因此必須對其進行驗證,並在可能的情況下進行自動更正。元數據必須寫入適當的位置,以避免出現“斷寫”,我們將在下文中詳細介紹該情況。
針對超大規模應用進行優化。使用普遍適用的可擴展結構。不要假設磁碟檢查演演算法可以擴展到整個文件系統的規模。
確保文件系統永不離線。當出現損壞時,最佳的解決方案是隔離錯誤,並允許繼續訪問餘下的卷,同時儘可能打撈所有可用的數據,並且這一切都通過實時的方式完成。
藉助與 ReFS 聯合設計和構建的存儲空間功能,提供完整的端到端彈性結構。
ReFS 的關鍵功能如下(請注意,其中某些功能與存儲空間聯合提供)。
帶有校驗和的元數據完整性
ReFS
通過寫入時分配事務模型實現可靠的磁碟更新(也稱為寫入時複製)
支持超大規模的卷、文件和目錄
存儲池和虛擬化使得文件系統可建立並易於管理
通過數據條帶化提高性能(帶寬可管理)並通過備份提高容錯性
通過磁碟掃描防止潛在的磁碟錯誤
藉助“數據打撈”實現損壞還原,以便在任何情況下儘可能提高卷的可用性
跨計算機共享存儲池,以提供額外的容錯性和負載平衡
此外,ReFS 還從 NTFS 集成了某些功能和語義,包括 BitLocker 加密、用於安全的訪問控制列表、USN日誌、更改通知、符號鏈接、交接點、裝入點、重解析點、卷快照、文件 ID 和操作鎖。
當然,客戶端只要使用任何操作系統中可訪問現有 NTFS 卷的文件訪問 API,就可以訪問以 ReFS 存儲的數據。
關鍵設計屬性和功能
我們的設計屬性與我們的目標密切相關。在我們逐一介紹這些屬性的同時,請時刻記住我們的文件系統會由數億台不同的設備使用,規模從體積最小的計算機到最大的數據中心,從最小的存儲格式到最大的多軸格式,從固體狀態存儲到最大的驅動器和存儲系統。同時,Windows 文件系統會由來源各異的各種應用程序和系統軟體訪問。ReFS 吸收了這些優點,並在這一基礎上進行了重新構建。我們並非從零開始,而是在適當的 NTFS 組件的基礎上進行了適當的重新設計。首先,我們按照一直以來引入主要文件系統的方式以務實的方式引入了此架構,只有 Microsoft 才能以這等規模實施該做法。
代碼重用和兼容性在文件系統 API 這一領域,兼容性是最重要、技術含量最高,同時也最具挑戰性的目標。重寫文件系統語義的實現代碼無法確保適當的兼容性,並且引發的問題將高度依賴於應用程序代碼、調用時間和硬體。因此,在構建 ReFS 時,我們重用了用於實現 Windows 文件系統語義的代碼。此代碼用於實現文件系統介面(讀取、寫入、打開、關閉、更改通知等),維護內存中的文件和卷狀態,執行安全措施,以及維護內存緩存和文件數據同步。這些代碼的重用旨在確保與繼承自 NTFS 的功能的高度兼容性。
在重用的部分中,我們在 NTFS 版本代碼的基礎上使用了新架構的引擎,並在其中通過主文件表等磁碟上結構來表示文件和目錄。ReFS 將這部分重用代碼與一種全新的引擎相結合,這是 ReFS 背後的一大創新。下圖展示了這些改進:
可靠且可擴展的磁碟上結構
磁碟上結構及其操作由磁碟上存儲引擎處理。這構成了一種通用的鍵值介面,其上的層級將利用該介面來實現文件、目錄等結構。對於其自身實現,存儲引擎將使用專用B+ 樹。事實上,我們以 B+ 樹作為唯一的磁碟上結構來表示磁碟中的所有信息。樹可以嵌入其他樹中(子樹的根存儲在父樹的行中)。在磁碟中,樹可以非常大並分為多層,也可以小到只包含幾個鍵並嵌入其他結構中。這確保了該結構具有可全面適應文件系統的可擴展性。使用單一的結構顯著簡化了系統並減少了代碼量。新引擎介面包含“表”的概念,即可枚舉的鍵值對組。大部分表具有唯一的 ID(名為對象 ID),我們可以通過該 ID 來引用特定的表。我們會通過一個特別對象表為系統中的所有此類表建立索引。
現在,我們來介紹一下如何通過表來構建通用文件系統的抽象。
如上圖所示,目錄以表的形式表示。由於我們使用 B+ 樹來實現表,目錄可以高效地擴展為極大規模。文件可以作為嵌入父目錄行中的表來實現,父目錄本身也是一個表(即上圖所示的文件元數據)。文件元數據表中的行表示各種文件屬性。文件數據的位置範圍由嵌入的流表來表示,其中包含偏移值映射(以及可選的校驗和)。這意味著文件和目錄的規模再大也不會對性能產生影響,突破了 NTFS 的局限。
如您所料,ACL(訪問控制列表)等其他文件系統中的全局結構將作為以對象表為根的表來表示。
所有磁碟空間分配都由分層分配器來管理,其中會以空閑空間範圍表來表示空閑空間。為了實現可擴展性,我們提供了三種表,大型、中型和小型分配器。這三種表所管理的空間粒度各不相同:例如,中型分配器負責管理由大型分配器分配的中等大小區塊。這使得磁碟分配演演算法非常易於擴展,並且由於相關的元數據會自動並列配置,因此可實現更出色的性能。這些分配器的根和對象表的根都可以通過磁碟上的已知位置訪問。某些表具有專用的分配器,以便減少爭用並增強區域配置。
ReFS
可靠的磁碟更新策略
可靠而高效地更新磁碟是文件系統設計最重要,也是最具挑戰性的領域之一。我們花費了大量時間來評估各種方案。我們曾經考慮過一種日誌結構的文件系統,但最終放棄了該方案。這種方案不適合 Windows 所需的通用文件系統類型。NTFS 依靠事務日誌來確保磁碟上的一致性。該方案會更新磁碟上現存的元數據,並使用日誌作為輔助來持續跟蹤更改,以便在發生錯誤或斷電時進行回滾。此方法的優勢之一在於維護現存的元數據布局,這有助於提高讀取性能。日誌系統的主要弊端在於寫入可能會變得隨機化,更重要的是,如果在寫入時斷電,更新磁碟的行為可能會損壞之前寫入的元數據,該問題通常稱為“斷寫”。
為了儘可能提高可靠性並避免斷寫,我們選擇了一種永不更新現存元數據的寫入時分配方案,以原子形式將其寫入不同的位置。在某種程度上,這是借鑒了“影式分頁”這一古老的概念,該功能用於可靠地更新磁碟上的結構。事務將基於這種寫入時分配方案構建。由於 ReFS 的上層派生自 NTFS,新的事務模型將無縫地利用現存故障恢復邏輯,該邏輯已經過數個版本的測試和穩定。
ReFS 的元數據分配方式允許通過更少、更大的 I/O 將相互關聯的部件混合寫入(例如,流分配、文件屬性、文件名和目錄頁),這對於旋轉介質和 flash 都將提供諸多裨益。同時,採取措施保持讀取的連續性。分層分配方案在這方面投入了很大的精力。
我們曾經進行過在系統負載極大的情況下斷開系統電源的測試,而當系統恢復時,所有結構都會接受正確性檢查。本測試是對我們工作成績的終極衡量。我們在這項 Microsoft 文件系統測試中達到了前所未有的可靠性水平。我們相信該方案已經達到了行業領先水平,並能完全實現我們的關鍵設計目標。
磁碟損壞還原
如前所述,我們的設計目標之一是檢測和更正損壞。這不僅是為了確保數據完整性,也是為了提高系統可用性和聯機操作。因此,所有 ReFS 元數據都在 B+ 樹頁的級別計算了校驗和,並將校驗和與頁本身分別存儲。這允許我們檢測所有形式的磁碟損壞,包括失寫、錯寫和“位衰減”(介質上的數據降級)。此外,我們還添加了一個選項,供您選擇是否計算文件內容的校驗和。啟用稱為“完整性流”的這一選項后,ReFS 始終會將文件更改寫入與原始位置不同的位置。這種寫入時分配技術可確保不會由於新寫入的數據造成之前存在的數據丟失。校驗和更新將隨數據寫入自動進行,因此如果電源在寫入時斷開,我們始終將具有一個可用於驗證一致性的文件版本,並據此權威地檢測損壞。
我們曾在數周前發布過一篇有關存儲空間的博文。我們在設計 ReFS 和存儲空間時旨在令其互為補充,作為一種完整存儲系統的兩個組件。由於 NTFS 的普及度極高,我們設計的存儲空間也適用於 NTFS(及客戶端PC);在通過結構分層支持此客戶端方案的同時,我們還在對 ReFS 進行調整以供用於客戶端,最終您將可以同時在客戶端和伺服器上使用 ReFS。
除了提高性能以外,存儲空間還能通過在多個磁碟上維護副本,在發生部分和全面磁碟故障時保護數據。在發生讀取故障時,存儲空間可以讀取備選副本,而在發生寫入故障(以及徹底的介質讀/寫故障)時,該功能可以透明地重新分配數據。許多故障並非由介質故障引發,而是由數據尋壞、失寫或錯寫造成。
這些恰恰是 ReFS 可以通過校驗和檢測的故障類型。一旦 ReFS 檢測到此類故障,將通過存儲空間介面讀取所有可用的數據副本,並根據校驗和驗證選擇正確的副本。然後,ReFS 將告知存儲空間根據正確的副本修復損壞的副本。以上操作完全對應用程序透明。如果 ReFS 未在鏡像存儲空間上運行,則將無法自動修復損壞。在這種情況下,ReFS 將僅記錄一個事件,表明檢測到損壞,並且無法判斷是否為文件數據。我將在稍後進一步介紹這種情況對元數據的影響。
校驗和(64 位)始終對 ReFS 元數據啟用,假設該卷寄宿在一個鏡像存儲空間中,自動更正將始終啟用。所有完整性流(見下圖)都通過相同的方式獲得保護。這將為用戶提供一種端到端的高完整性解決方案,將相對不可靠的存儲變為高度可靠的存儲。
完整性流
完整性流可保護文件免遭任何形式的數據損壞。儘管這種功能在許多情境中頗具價值,但也不適合某些情境。例如,某些應用程序傾向於依靠磁碟上的特定文件布局,細緻地管理其文件存儲。由於每當文件內容發生變化時,完整性流都會對數據塊進行重新分配,因此對於這些應用程序來說,文件布局將非常難以預測。資料庫系統是此類應用程序的典型案例。此類應用程序通常也會自行維護文件內容的校驗和,並可以通過與存儲空間API 的直接交互來驗證和更正數據。
對於此類需要特定文件布局的情況,我們在各粒度級別都提供了用於控制此設置的機制和 API。
在最基本的級別,完整性是文件的一種屬性 (FILE_ATTRIBUTE_INTEGRITY_STREAM)。它也是目錄的一種屬性。當存在於目錄中時,它將由目錄中創建的所有文件和目錄繼承。方便起見,您可以在格式化時使用“format”命令來為卷的根目錄指定該屬性。在根級別設置該屬性可確保其默認傳播至該卷上的所有文件和目錄。例如:
D:\>format /fs:refs /q /i:enable
D:\>format /fs:refs /q /i:disable
默認情況下,如果未指定 /i 開關,則系統選擇的行為將取決於該卷是否駐留於鏡像空間中。在鏡像空間中,完整性將獲得啟用,因為我們預計這樣做所帶來的好處將遠大於弊端。應用程序隨時可以通過編程方式逐個文件地更改此屬性。
對抗“位衰減”
如前所述,ReFS 和存儲空間的結合將在發生磁碟損壞和存儲故障時提供高度的數據彈性。“位衰減”是一種難以檢測和處理的數據損壞,它是指部分磁碟隨著時間的推移產生損壞,但由於這些部分很少讀取而未引起注意。當讀取或檢測到這些部分時,其備選副本可能已由於其他故障而損壞或丟失。
為了應對位衰減,我們添加了一項系統任務,該任務會定期掃描鏡像存儲空間中駐留的 ReFS 卷上的所有元數據和完整性流數據。掃描涉及讀取所有冗餘副本並通過 ReFS校驗和驗證其正確性。如果校驗和不匹配,損壞的副本將通過正確的副本修復。
FILE_ATTRIBUTE_NO_SCRUB_DATA文件屬性指示掃描器應跳過該文件。此屬性適用於自行維護完整性信息的那些應用程序,應用程序開發人員可以密切控制掃描這些文件的時間和方式。
Integrity.exe 命令行工具是管理完整性和掃描策略的一種強大方法。
當失效時卷將仍然可用
我們希望大部分用戶都能將 ReFS 與鏡像存儲空間結合使用,這樣損壞就可以自動且透明地修復。但在某些極端情況下,鏡像空間中的卷也可能發生損壞,例如損壞的系統內存會破壞數據,然後這些數據將進入磁碟並破壞所有備份副本。此外,某些用戶可能不會選擇在 ReFS 下使用鏡像存儲空間。
對於這些捲髮生損壞的情況,ReFS 將實施“數據打撈”,該功能可將損壞的數據從活動卷的命名空間中移除。此功能旨在確保無法修復的損壞不會影響正確數據的可用性。例如,目錄中的單個文件已損壞且無法自動修復,ReFS 會將該文件從文件系統命名空間中移除,同時對該卷的餘下部分進行打撈。此操作通常可在一秒內完成。
通常,文件系統無法打開或刪除損壞的文件,管理員也對此束手無策。但由於 ReFS 能夠打撈損壞的數據,管理員將能夠通過備份來恢復該文件或通過應用程序來重新創建該文件,同時保持文件系統的聯機狀態。這一關鍵創新可確保我們無需運行昂貴的離線磁碟檢查和更正工具,並避免了數據量極大的卷由於損壞而產生較長的離線期所帶來的風險。
完美兼容存儲堆棧
我們意識到自己的設計必須具備最大的靈活性和兼容性。我們設計的 ReFS 與其他文件系統一樣可以插入存儲堆棧,以便儘可能提高對其周邊層級的兼容性。例如,ReFS 可以無縫利用 BitLocker 加密、用於安全的訪問控制列表、USN 日誌、更改通知、符號鏈接、交接點、裝入點、重解析點、卷快照、文件 ID 和操作鎖。我們預計大部分文件系統過濾器無需或只需小幅調整即可無縫地用於 ReFS。我們的測試證明了這一點;例如,我們已驗證了現有的前沿反病毒解決方案可以正常工作。
某些依賴 NTFS 物理格式的過濾器需要進行更大的調整。我們會通過大規模的兼容性程序測試我們的文件系統與第三方反病毒、備份和其他此類軟體的兼容性。對於 ReFS 我們也採取了相同的做法,並將與我們的主要合作夥伴密切協作來解決我們發現的任何不兼容問題。這些措施不僅限於 ReFS,我們在以前也多次這樣做。
還有一項值得注意的靈活性,儘管 ReFS 和存儲空間適合結合使用,但它們實際上是可以分別獨立運行的兩個組件。這可以同時為兩種組件提供最大的部署靈活性,避免不必要的相互限制。換句話說,您可以在選擇存儲解決方案時在可靠性和性能方面進行權衡,包括將 ReFS 與來自我們合作夥伴的底層存儲解決方案聯合部署。
藉助存儲空間,存儲池可以由多台計算機共享,並且虛擬磁碟可以在這些計算機之間實現無縫遷移,提供額外的故障彈性。由於我們構建該系統的方式,ReFS 可以無縫地利用這些優勢。
20 多年來,我們針對 NTFS 開發了數萬種複雜而龐大的測試,並使用它們對 ReFS 進行了測試。在系統壓力測試、斷電等故障測試、可擴展性測試和性能測試等方面,ReFS 都滿足並超出了我們預計的部署要求。因此,ReFS 已經準備好在受控的環境中接受部署測試。作為主要文件系統的最初版本,我們建議謹慎地進行該測試。我們並未將 ReFS 作為 Windows 8 中的“測試”功能發布。當 Windows 8 結束測試后,ReFS 將作為生產就緒功能發布,並會告誡您數據的可靠性才是至關重要的。因此,與系統的任何其他方面不同,您需要通過謹慎的做法對其進行最初的部署和測試。
在這一前提下,我們會將 ReFS 作為一種階段性演進功能進行部署:首先作為 Windows Server 的存儲系統,然後作為客戶端的存儲系統,最終作為啟動卷。之前我們也曾針對新文件系統採取過相同的做法。
最初,我們的主要測試將聚焦於作為文件伺服器運行的 ReFS。我們希望用戶能夠通過將其作為文件服務而獲益,尤其是在鏡像存儲空間中。我們還計劃與我們的存儲合作夥伴密切協作,以便與他們的存儲解決方案相集成。
ReFS 和存儲空間共同構成了 Windows 在今後十年或更長時間內使用的存儲基礎。我們相信這將顯著強化我們在存儲領域的領先地位。存儲空間和 ReFS 的架構中還預留了進一步創新的空間,我們期待 ReFS 能夠成為下一種大規模部署的文件系統。
問:為什麼將其命名為 ReFS?
ReFS 是彈性文件系統 (Resilient File System) 的縮寫。儘管該系統在很多方面都進行了優化,但彈性是其中最突出的一種功能。
問:ReFS 的容量限制是多少?
下表顯示了磁碟上格式的容量限制。其他因素可能會決定某些實踐限制,例如系統配置(例如內存大小)、各種系統組件設置的限制、填充數據集所需的時間以及備份次數等。
問:我能否在 NTFS 和 ReFS 之間轉換數據?
Windows Server 2012中無法轉換現有數據。數據可以複製。考慮到當前所面對的數據集規模,預先進行此轉換的困難性,以及在轉換前後架構的可能變化,我們有意地做出了此決定。
問:我能否在 Windows Server 2012 中從 ReFS 啟動?
不能,目前尚未實現也不支持該功能。
問:ReFS 是否可用於可移除介質或驅動器?
不能,目前尚未實現也不支持該功能。
問:ReFS 不再支持哪些 NTFS 的語義或功能?
我們在 ReFS 選擇不再支持的 NTFS 功能包括:命名流、對象 ID、短名稱、壓縮、穩健級加密 (EFS)、用戶數據事務、稀疏、硬鏈接、擴展屬性和配額。
問:奇偶校驗空間能否與 ReFS 結合使用?
ReFS 支持存儲空間提供的錯誤還原選項。在 Windows Server 2012 中,自動數據更正僅針對鏡像空間實施。
問:是否支持群集?
支持故障轉移群集,各卷可以跨計算機實現故障轉移。此外,支持群集中的共享存儲池。
問:RAID 呢?我如何使用 ReFS 的條帶化、鏡像或其他形式的 RAID 功能?例如,ReFS 是否可以提供視頻所需的讀取性能?
ReFS 可利用存儲空間的數據備份功能,包括條帶化的鏡像和奇偶校驗。ReFS 的預計讀取性能與 NTFS 相似,因為二者之間共享了大量相關代碼。它將非常適合流數據。
問:為什麼 ReFS 中沒有重複數據刪除、DRAM 和存儲間的二級緩存以及可寫入快照?
ReFS 本身不提供重複數據刪除。這種熟悉、可插入的文件系統架構的一個副作用是其他重複數據刪除產品可以按照與 NTFS 相同的方式插入 ReFS。
ReFS 並未專門實施二級緩存,但用戶可以使用第三方解決方案來實現此功能。
可將 ReFS 和 VSS 結合使用,以便按照與 Windows 環境中的 NTFS 一致的方式提供快照。目前,它們尚不支持可寫入快照或超過 64TB 的快照。
屬性 | 磁碟上格式的限制 |
單個文件的最大規模 | 2^64-1 位元組 |
單個卷的最大規模 | 格式支持帶有 16KB 群集規模的 2^78 位元組 (2^64 * 16 * 2^10)。Windows 堆棧定址允許 2^64 位元組 |
目錄中的最大文件數量 | 2^64 |
卷中的最大目錄數量 | 2^64 |
最大文件名長度 | 32K Unicode 字元 |
最大路徑長度 | 32K |
任何存儲池的最大規模 | 4 PB |
系統中存儲池的最大數量 | 無限制 |
存儲池中空間的最大數量 | 無限制 |