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

Nic*_*rca 6 linux zfs

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

我已经读到我可以为 ZIL 和 L2ARC 将单独的分区雕刻到 SSD 中,这似乎可以满足我的要求,但我必须手动配置每个分区应该有多大。我不喜欢它的一点是它有点复杂,如果我需要更改分区,可能很难重新配置,而且听起来最大文件系统大小仅受 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 秒 * 硬盘写入速度)大。这样做可以最大化 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 是个好主意,还是有更好的方法来优化我的一对驱动器的速度和容量?

use*_*391 5

虽然 Marco 的回答正确地解释了所有细节,但我只想关注您的最后一个问题/总结:

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

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

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

现在,有哪些替代方案?

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