将 SSD + HDD 组合成单个快速、大分区?

将 SSD + HDD 组合成单个快速、大分区?

所以我有一个配备快速 SSD 和大 HDD 的台式机。我正在尝试从中获得一个配置良好的大型、快速的 zpool。

我读过,我可以在 SSD 中为 ZIL 和 L2ARC 划分单独的分区,这似乎可以满足我的要求,但我必须手动配置每个分区的大小。我不喜欢它的是它有点复杂,如果我需要更改分区,可能很难重新配置,而且听起来最大文件系统大小仅受 HDD 的限制,因为目的是 ZIL 上的所有内容和L2ARC 还必须将其写入磁盘,至少最终如此。此外,尚不清楚 L2ARC 是否在系统重新启动后保留或是否必须再次填充。如果数据都在同一个 SSD 上,则必须将数据从 ZIL 复制到 L2ARC,甚至如果目前对 SSD 上需要多少热数据没有压力,则甚至复制到 HDD 似乎效率也很低。

或者,我似乎也可以只在 SSD 上有 1 个分区,在 HDD 上有 1 个分区,然后将它们直接添加到 zpool 中,没有冗余。我已经尝试过这一点,并注意到持续的读/写速度比单独的 HDD 所能达到的速度要高。但我不知道现在是否所有内容都转移到 SSD,等 SSD 满了之后,所有内容都会转移到 HDD。理想情况下,我希望 ZFS 在幕后透明地洗牌数据,以尝试始终将热数据保留在 SSD 上,与 L2ARC 类似,并在 SSD 上留出大量可用空间用于新写入。 ZIL 应自动管理为正确的大小,并且最好尽可能位于 SSD 上。如果我走手动配置的 ZIL + L2ARC 路线,看起来 ZIL 只需要大约(10 秒 * HDD 写入速度)大。这样做可以最大化 L2ARC 的大小,这是很好的。但是,如果我添加一个条带磁盘来有效地使我的 HDD 速度(和容量)加倍,会发生什么?

如果将 SSD 用于 ZIL + L2ARC,问题总结:

  1. 如果我为 ZIL + L2ARC 设置 SSD,用不同的分区大小重新设置它有多难?
  2. 如果我将 SSD 用于 L2ARC,其容量是否包含在总可用池容量中,还是池容量仅受 HDD 限制?
  3. 系统重启后 L2ARC 是否保留,还是必须重新填充?
  4. 即使数据位于同一物理 SSD 上,是否也必须将数据从 ZIL 复制到 L2ARC?
  5. 如果 ZIL 位于 SSD 上并且仍然有足够的空间来记录更多意图,那么 ZIL 是否仍然会自动刷新到 SSD?如果是这样,何时/在什么情况下?

在单个 zpool 中使用 SSD + HDD 时的问题摘要:

  1. ZFS 显然注意到 SSD 和 HDD 分区之间的大小差异,但是 ZFS 是否会自动识别 SSD 和 HDD 分区的相对性能?尤其,
  2. 当 SSD 和 HDD 都相对空时,写入如何分布?
  3. 一旦 zpool 的 SSD 部分填满,ZFS 是否会尝试对数据进行智能处理?尤其,
  4. 如果 zpool 的 SSD 部分已满,ZFS 是否预计我很快会有更多写入并尝试在后台将数据从 SSD 移动到 HDD?
  5. 如果 zpool 的 SSD 部分已满,并且我开始从 HDD 访问一堆数据,而不是从 SSD 访问大量数据,那么 ZFS 是否会努力将热数据交换到 SSD?

最后,最重要的问题:

  1. 在同一个池中设置 SSD + HDD 是一个好主意,还是有更好的方法来优化我的一对驱动器的速度和容量?

答案1

虽然马可的回答正确解释了所有细节,但我只想关注你的最后一个问题/摘要:

在同一个池中设置 SSD + HDD 是一个好主意,还是有更好的方法来优化我的一对驱动器的速度和容量?

ZFS 是一种文件系统,专为具有许多较小磁盘的大型阵列而设计。虽然它相当灵活,但我认为它对于您当前的情况和目标而言并不是最佳的,原因如下:

  • ZFS 不会重新整理已写入的数据。你正在寻找的东西叫做混合动力驱动,例如苹果的 Fusion Drive 允许将多个磁盘融合在一起,并根据访问历史记录自动选择每个块的存储位置(移动数据是在系统没有负载或重写时完成的)。使用 ZFS,您就没有这些,无论是自动还是手动,您的数据都保留在最初写入的位置(或已标记为删除)。
  • 仅使用单个磁盘,您就放弃了冗余和自我修复。您仍然可以检测到错误,但无法使用系统的全部功能。
  • 同一池中的两个磁盘意味着数据丢失(毕竟这是 RAID0)或损坏的可能性更高,此外,由于驱动器大小和驱动器速度不同,您的性能将低于标准。
  • HDD+SLOG+L2ARC 好一点,但你需要一个非常好的 SSD(最好是像 Marco 所说的两个不同的 SSD,但 NVMe SSD 是一个很好且昂贵的折衷方案)并且其上的大部分空间都被浪费了:2 到 4 GB对于 ZIL 来说就足够了,而大型 L2ARC 仅在您的 RAM 已满时才有帮助,但本身需要更多的 RAM。这导致了某种catch-22 - 如果你想使用L2ARC,你需要更多的RAM,但是你可以只使用RAM本身,因为它已经足够了。请记住,仅存储块,因此您不需要像查看纯文件那样假设那么多。

现在,有哪些替代方案?

  • 您可以通过拥有两个池来进行分割。一种用于系统,一种用于数据。这样,您就没有自动重新平衡和冗余,而是一个可以轻松扩展且没有 RAID0 问题的干净系统。
  • 购买第二个大硬盘,制作镜像,像您概述的那样使用 SSD:消除不同大小的磁盘和磁盘速度的问题,为您提供冗余,保持 SSD 的灵活性。
  • nSSD 并做 RAIDZ1/2/3。如今,较小的 SSD 相当便宜,并且重建时间不会很慢,这使得 RAIDZ1 再次变得有趣。
  • 使用另一个具有混合功能的文件系统或卷管理器,如果需要,可以使用 ZFS。这并不被视为最佳选择,但在池中使用两个单磁盘 vdev 也不是......至少你得到了你想要的,以及 ZFS 的一些好东西(快照等),但我不会信赖出色的性能。

答案2

  1. 如果我为 ZIL + L2ARC 设置 SSD,用不同的分区大小重新设置它有多难?

不建议将 ZIL 和 L2ARC 放在同一磁盘上。 ZIL 和 L2ARC 将争夺资源,并且可能表现不佳。因此,为了获得最佳性能,请使用两个单独的磁盘,并确保您真正受益于 ZIL 和 L2ARC 之一。 ZIL 用于同步写入。如果您的工作流程的同步写入比率较低,您可能不需要 ZIL。

此外,ZIL和L2ARC的SSD要求并不完全相同。 ZIL 应该是低延迟和高 IOPS(例如 ZeusRAM),并且它们通常是低容量的。另一方面,L2ARC 应该具有更高的容量(取决于 RAM 的数量)。

ZIL 和 L2ARC 可以从池中分离,因此重新分区磁盘应该不会太难。这是一个描述 FreeBSD 上的镜像 ZIL/L2ARC 对的博客。在 Linux 上可能有点不同,但请自行判断,这是这样的难的

在 FreeNAS 中为 ZIL 和 L2ARC 使用一对 SSD

  1. 如果我将 SSD 用于 L2ARC,其容量是否包含在总可用池容量中,还是池容量仅受 HDD 限制?

池容量仅受 HDD 限制。

  1. 系统重启后 L2ARC 是否保留,还是必须重新填充?

当前的实现在重新启动后不会保留 L2ARC。但有一个功能要求它可能会在未来的某个时候实施。

持久L2ARC

  1. 即使数据位于同一物理 SSD 上,是否也必须将数据从 ZIL 复制到 L2ARC?

事情不是这样的。 ZIL 和 L2ARC 具有不同的用途,并且数据不会直接从 ZIL 移动到 L2ARC。

  1. ZFS 显然注意到 SSD 和 HDD 分区之间的大小差异,但是 ZFS 是否会自动识别 SSD 和 HDD 分区的相对性能?尤其,

据我所知,分布式写入时不考虑驱动器性能。

  1. 当 SSD 和 HDD 都相对空时,写入如何分布?

这取决于池布局(镜像、RAIDZ)和相对驱动器大小。较大的驱动器在 RAIDZ 中受到青睐。

  1. 一旦 zpool 的 SSD 部分填满,ZFS 是否会尝试对数据进行智能处理?尤其,

是的,但前提是您将 SSD 用作 L2ARC,这正是 L2ARC 的设计目的。

  1. 如果 zpool 的 SSD 部分已满,ZFS 是否预计我很快会有更多写入并尝试在后台将数据从 SSD 移动到 HDD?
  2. 如果 zpool 的 SSD 部分已满,并且我开始从 HDD 访问一堆数据,而不是从 SSD 访问大量数据,那么 ZFS 是否会努力将热数据交换到 SSD?

如上所述,使用SSD作为L2ARC。

更好的是不要依赖 L2ARC,而是提供足够的 ARC(= 更多 RAM)而不需要 L2ARC。

相关内容