我的家庭服务器安装了 Proxmox。在安装过程中,我只创建了一个小尺寸的默认交换分区,但认为没有必要,因为我的服务器安装了 192GB 的 RAM。然而,令我惊讶的是,交换有时会被使用。当系统仍有 60+GB 内存可用且仅使用数百兆交换空间时,这种情况并不罕见。更重要的是,为了进行实验,我决定禁用交换。结果,我的一些虚拟机偶尔被杀死,而监控工具报告系统中有足够的资源。由于我运行的设置非常简单,无需进行太多调整,因此我意识到交换对于虚拟机管理程序来说至关重要。
现在的好问题是如何创建正确的交换设置。
我的系统中有 4 个 NVME SSD。我计划用它们创建一个 ZFS 池,并使用生成的池来满足快速存储需求。有一些想法如何使用 ZFS 创建交换,但这似乎是一个糟糕的决定。 ZFS 在写入期间分配内存,这可能会导致失败。
另一种想法是将 NVME 拆分为多个分区,一个小分区用于交换,另一个大分区用于 ZFS 数据。我做了实验。我在每个驱动器上创建了 16GB 交换分区,并用每个驱动器的其余空间创建了 ZFS 池。之后我将内核配置为使用 4 个交换分区。一切都按预期进行,但我开始观察到,内核仅使用其中一个 SSD 进行交换,而其他所有 SSD 都没有太多利用率。
那么,在这种情况下如何平衡多个 SSD 之间的负载呢?
答案1
无需对交换磁盘进行 raid。这样做不仅没有帮助,而且可能有害。
您可以在每个磁盘上从 zfs 创建一个单独的分区,并将它们全部用作交换分区。如果你给它们不同的优先级,它们将按顺序使用;当每个填满时,下一个将开始使用。你可能应该给它们所有相同的优先级,然后它们将被并行使用,而不需要raid。
您可以在 zfs 上创建交换文件,zfs 将处理并行访问。然而,在过去,这存在崩溃级别的错误,并且一些 zfs 版本文档表示不支持交换文件。另外,如果您的 zfs 使用冗余 raid,则可能是一种浪费。
更好的 zfs 替代方法是使用该命令创建交换卷zfs create -V
。这比单独的交换分区更好,因为它允许您根据需要调整交换卷的大小,并且 zfs 可以完全管理 I/O,而不是让交换和 zfs 竞争磁盘。此外,显式 zfs 交换卷不会出现使用 ram 进行缓存来保存交换页面以释放 ram 的问题...
也可以看看https://askubuntu.com/questions/228149/zfs-partition-as-swap