NAS 的 Ext4、XFS、Btrfs 和 ZFS 对比

NAS 的 Ext4、XFS、Btrfs 和 ZFS 对比

我的用例:我在 M.2 SSD 上安装了 Ubuntu Server 18.04。我有一个 4TB HDD 想要添加为存储。由于它主要用于大型媒体文件和备份,因此不会经常写入。

您认为哪种文件系统最适合这种用例?

我的主要候选者是 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 多年前就被纠正了. 除了那个 bug,任何延迟分配文件系统(包括 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

这看起来更像是一个问题超级用户而不是 serverfault,但其中一些想法也适用于这个网站,所以我将尝试回答一些问题:

  • XFS 以不喜欢断电而闻名。自那以后发生了很多事情,如今 RedHat、Oracle 等公司都将其用作默认文件系统,因此,如果这个问题现在比以前小得多,我也不会感到惊讶。特别是如果您有一个不错的备份策略,如果您的用例是那种可以从此文件系统中看到速度优势的用例,那么它可能值得冒这个风险。
  • 没有 ECC RAM 的 ZFS 仍然具有非常好的功能,但您冒着无法捕获某些坏数据实例的风险。我在类似于您描述的家庭环境中运行了几年没有 ECC 内存的 ZFS,从未遇到过明显的数据丢失,但话又说回来,我并没有在该卷上存储关键数据。从那时起,我已迁移到合适的服务器硬件,现在对实际使用我的存储来存储重要内容感到更加放心。
  • 使用 ZFS,您只需将磁盘添加到单磁盘池即可创建镜像。我还没有实际尝试过,但在检查时我得到了多个声称成功的搜索结果鸭鸭鹅。我不确定其他系统,但只要您的文件系统下面有某种卷管理器,从单个磁盘转到 RAID1 应该是小事一桩。
  • 基于 CoW 的文件系统(zfs、btrfs)比功能较少的系统更慢,并且它们更依赖于有足够强大的硬件支持。

就像在公司环境中一样,我肯定会花时间按照预期的负载运行基准测试,以获得性能与功能的第一手体验。

答案3

除非有充分理由不这样做,否则我会使用相关操作系统建议的任何日志文件系统作为默认文件系统。上次我检查 Ubuntu 时发现是 ext4。

原因很简单:默认文件系统最有可能被使用得最多,因此发现并修复任何错误的可能性最大。您提到的文件系统之间的差异在日常轻度使用中不太可能产生太大影响。如果性能非常重要,那么请考虑获得更多内存,以便您的操作系统有更多缓存空间。

也就是说,如果您要“跨”操作系统使用该驱动器,我建议您购买两个,或者至少将一个驱动器分成两个物理分区,然后在有媒体的驱动器上使用 NTFS 或 exFAT。

答案4

您可以在 mdadm 完成的镜像上创建 XFS 格式的文件系统,而无需真正的镜像。

创建具有三个镜像但缺少两个镜像的镜像分区。稍后您可以添加缺少的两个镜像。

相关内容