NAS 的 Ext4、XFS、Btrfs、ZFS

NAS 的 Ext4、XFS、Btrfs、ZFS

我的用例:我在 M.2 SSD 上安裝了 Ubuntu Server 18.04。我有一個 4TB 硬碟,我想添加為儲存。由於它主要用於大型媒體檔案和備份,因此不會經常寫入。

您認為哪種檔案系統最適合此用例?

我的主要候選人是 Ext3/4、XFS、Btrfs 和 ZFS(請隨意爭論另一個)。

我不是問「最好的檔案系統是什麼?」——不存在「最好的」這樣的東西。 我只是問人們哪種檔案系統最適合這個用例。請嘗試包括:

  • 有什麼缺點或風險嗎?我聽說如果斷電,XFS 會損壞資料。與不含 ECC RAM 的 ZFS 相同。
  • 是否可以稍後新增 RAID-1 而不會遺失資料?我現在沒有足夠的錢購買另一個硬碟(我將其用於外部驅動器;RAID 不能取代備份),但我稍後可能會添加一個。這不是一個要求,只是一個可能很好的東西。
  • 讀/寫效能如何? Btrfs 可能可以滿足我的大部分需求,但它在 Phoronix 基準測試中非常慢。 XFS 具有令人印象深刻的效能,但我聽說它會導致資料遺失。

謝謝你的建議。

答案1

我通常使用以下兩個檔案系統之一:

  • XFS 適用於任何無法與 CoW 配合良好的情況(或資料儲存已位於 CoW 檔案系統上的虛擬機器)或需要極快的直接 I/O 時;

  • ZFS 用於其他任何事情。

對於您的用例,我將使用 ZFS,特別是考慮到 Ubuntu 18.04 已經提供了它。由於您可以輕鬆地將另一個鏡腳連接到現有裝置上,ZFS 非常適合您的要求。例如,將您的磁碟命名為nvme0p1

  • zpool create tank /dev/nvme0p1建立名為「tank」的單一 vdev 池;
  • zpool attach tank <newdev> /dev/nvme0p1啟用鏡像。

如果由於某些原因,您不/不能使用 ZFS,那麼 MDRAID 和 XFS 就是您的朋友:

  • mdadm --create /dev/md200 -l raid1 -n 2 /dev/nvme0p1 missing將建立一個缺少支路的 RAID1 陣列(請參閱 #1);
  • mdadm --manage /dev/md200 --add <newdev>連接新的鏡像腿(形成完整的 RAID1,請參見 #2)

建立陣列後,您可以透過 XFS 對其進行格式化mkfs.xfs

我願意不是建議使用 BTRFS,因為效能和彈性都低於標準。例如,從Debian 維基

目前(2019-07-07,linux ≤ 5.1.16)存在一個錯誤,該錯誤會導致雙磁碟 raid1 配置文件在第二次以降級狀態安裝時永遠變為只讀,例如由於缺少/損壞/SATA鏈接重置磁碟

另請注意,使用 BTRFS 的商業 NAS 供應商(請參閱:Synology)不使用自己的整合式 RAID 功能;相反,他們使用經過驗證的 Linux MDRAID 層。

編輯:雖然有些人認為 XFS 容易丟失數據,但這是不正確的。好吧,與 ext3 相比,XFS(以及其他支援延遲分配的檔案系統)在不受控制的斷電情況下可能會丟失更多未同步的資料。但同步資料(即:重要寫入)是 100% 安全的。此外,一個特定的錯誤加劇了 XFS 資料遺失10多年前已更正。那個錯誤分開,任何延遲分配檔案系統(包括 ext4 和 btrfs)將要在不受控制的斷電情況下會遺失大量或不同步的資料。

與 ext4 相比,XFS 具有無限的 inode 分配、高級分配提示(如果您需要的話),並且在最近的版本中還具有 reflink 支援(但需要在 Ubuntu 18.04 中明確啟用它們,請參閱mkfs.xfs 手冊頁欲了解更多)


1:/proc/mdstat缺少設備的範例檔案:

Personalities : [raid1]
md200 : active raid1 loop0[0]
      65408 blocks super 1.2 [2/1] [U_]

unused devices: <none>

2:/proc/mdstat新增第二個設備後的文件

Personalities : [raid1]
md200 : active raid1 loop1[2] loop0[0]
      65408 blocks super 1.2 [2/2] [UU]

unused devices: <none>

答案2

這看起來更像是個問題超級用戶比伺服器故障,但一些想法也適用於這個網站,所以我將嘗試回答一些問題:

  • XFS 一直以不喜歡斷電而聞名。此後發生了很多事情,RedHat、Oracle 等現在都使用它作為預設檔案系統,所以如果今天這個問題比以前小得多,我不會感到驚訝。特別是如果您有一個不錯的備份策略,如果您的用例屬於從該檔案系統中獲得速度優勢的類型,那麼可能值得冒這個風險。
  • 沒有 ECC RAM 的 ZFS 仍然具有非常好的功能,但您面臨著無法擷取某些不良資料實例的風險。我在與您描述的類似的家庭環境中運行了沒有 ECC 內存的 ZFS 幾年,並且從未經歷過明顯的數據丟失,但話又說回來,我並沒有在該卷上準確存儲關鍵數據。從那以後,我已經遷移到適當的伺服器硬件,現在對於實際使用我的存儲來存儲重要的東西感到更加自在。
  • 使用 ZFS,您應該只需將磁碟新增至單一磁碟池即可建立鏡像。我沒有在實踐中嘗試過,但在檢查時我得到了多個聲稱成功的搜尋結果鴨鴨戈。我不確定其他系統,但只要您的檔案系統下有某種磁碟區管理器,從單一磁碟到 RAID1 應該是微不足道的。
  • 基於 CoW 的檔案系統(zfs、btrfs)比功能較不豐富的系統慢,而且它們更依賴有足夠強大的硬體支援。

與在公司環境中一樣,我肯定會花時間根據預期負載運行基準測試,以獲得效能與功能的第一手經驗。

答案3

我會使用相關作業系統建議的預設日誌檔案系統,除非我有充分的理由不這樣做。上次我檢查 Ubuntu 時是 ext4。

原因很簡單:預設值是最有可能使用最多的,因此發現並修復任何錯誤的機會是最大的。您提到的檔案系統之間的差異在日常使用中不太可能有多大意義。如果效能非常重要,那麼請考慮獲取更多內存,以便您的作業系統有更多的快取空間。

也就是說,如果您要「跨」作業系統使用該驅動器,我建議您購買兩個驅動器,或者至少將您擁有的驅動器分成兩個實體分割區,然後在您擁有媒體的分割區上使用 NTFS 或 exFAT。

答案4

您可以在 mdadm 完成的鏡像上建立 XFS 格式的檔案系統,而無需真正的鏡像。

將分區建立為具有三個鏡像但缺少兩個鏡像的鏡像。稍後您可以添加兩個缺失的。

相關內容