如何使用内置 SSD 缓冲写入到外置驱动器

如何使用内置 SSD 缓冲写入到外置驱动器

这个问题有点奇怪,我会尽可能详细地回答。

我正在重新利用一台旧电脑作为家庭备份解决方案。数据的最终存放位置是通过 USB 2.0 连接的外部 G-Drive(我告诉过你这是一台旧电脑。)我想弄清楚如何使用电脑新闪亮的 SSD 驱动器上的一些空间来缓冲对外部驱动器的写入。我正在使用 OpenSUSE Leap 15,并安装了服务器。

到目前为止我发现缓存,我可以将其设置为写回模式,并得到类似于我所寻找的东西。问题是我要缓冲的分区使用 btrfs(透明压缩),并且已经两者结合使用时报告的问题。 这arch wiki 说这个问题在 3.9 中已经修复但我在链接源的任何地方都找不到它。

还有lvm缓存。我看到的唯一关于写回的引用是手册页中的一个简短的提示,没有太多进一步的解释。我也已经在使用 lvm 将 SSD 划分为带有精简池的各种分区,所以我担心使用 lvmcache 会要求我在两个驱动器上创建一个新的专用 lvm-vg,以防止精简池扩散到外部。此外,BTRFS wiki 中还有说明,在任何块级上使用 BTRFS 都可能导致问题。

DM 缓存是另一个高度可配置的选项,我仍在学习中。由于它在块级别上工作,因此仍有可能与 btrfs 发生冲突。

最后一个选项是使用 zfs 设置基于 SLOG 的 ZIL。此来源表示,在 1Gbps 连接下,SLOG 的最大容量必须是 0.625 GB,因为它每 5 秒刷新一次。但是,根据大量测试,我可以在此驱动器上获得的最高持续写入速度是 30MB/s。这意味着将 0.625GB 的 SLOG 转储到 ZFS 驱动器需要 20 秒。(更新:基于此来源此来源SLOG 设备并非旨在提高吞吐量,只是为了减少延迟。)(更新至更新:在评论中 Dan 澄清了这是什么意思。在这种情况下仍有可能使用 ZIL。)

知道大量写入不可避免地会受到外部连接的瓶颈影响。我认为任何大约几十 GB 的数据最终都会达到 30MB/s。我的目标不是解决这个问题。我可能会使用 rsync 将数据发送到外部,所以我想加快速度最多少于 10GB 的传输。

我基本上很好奇是否有人做过类似的事情,并有建议,或者可以指出一个比其他选项更好的特定选项。现在,我认为 ZFS/SLOG 选项是最好的,使用 10GB 的 slog 驱动器,但我不知道这么大的驱动器在 5 秒刷新下会如何运行。

tl;dr:最好的方法是什么(尽管我知道并非所有这些都是正确的受到推崇的) 在内部驱动器上缓冲大约 10GB 的数据,然后将其传输到外部驱动器?

答案1

我相信您提到的任何解决方案都可以正常工作(减去 LVM 和 BtrFS 之间的交互bcache——我对此了解不多)。选择可能取决于您最容易理解、设置和维护的方案。

就我个人而言,我会选择 ZFS,因为:

  1. 我对此有丰富的经验。
  2. 它为这种用例提供​​了一个一体化解决方案(压缩加上使用 SSD 来缓存读取和/或写入)。
  3. 它提供了许多其他奇特的功能(快照和克隆、重复数据删除、RAID-Z、复制zfs send、加密、压缩 RAM 缓存等),即使您现在不使用它们,将来也可能会发现它们很有用。还有一个健康的开源社区,不断添加新功能。

相关内容