ZFS 分区作为交换

ZFS 分区作为交换

我正在使用 native-zfs,想知道是否有办法将 ZFS 分区用于 SWAP。我正在使用拇指驱动器运行我的服务器,我认为这将是一个稍微加快速度的好方法。

答案1

以下是一份更详细的指南,摘自zfsonlinux 维基

步骤 1:创建一个卷数据集 (zvol) 用作交换设备

zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \
      -o logbias=throughput -o sync=always \
      -o primarycache=metadata -o secondarycache=none \
      -o com.sun:auto-snapshot=false rpool/swap

4G您可以根据需要调整尺寸(部分)。

压缩算法设置为,zle因为它是成本最低的可用算法。对于ashift=12(磁盘上有 4 kiB 块),4 kiB 页面大小的常见情况意味着没有压缩算法可以减少 I/O。例外情况是全零页面,这些页面会被 ZFS 丢弃;但必须启用某种形式的压缩才能获得此行为。如果您的池使用ashift=9,则可以使用compression=lz4

第 2 步:格式化交换设备

mkswap -f /dev/zvol/rpool/swap

步骤 3:更新/etc/fstab

echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab

警告:/dev/zvol在配置文件中始终使用长别名。切勿使用短/dev/zdX设备名称。

步骤 4:启用交换设备

swapon -av

答案2

使用 ZFS 进行交换应该可以正常工作,就像在 Solaris 和 FreeBSD 下一样。

zfs create pool/swap -V 1G -b 4K
mkswap -f /dev/pool/swap
swapon /dev/pool/swap

答案3

可以交换到 ZFS zvol,但是不是一个好主意,因为打开一个错误,当空间不足时可能会导致你的机器死锁

当机器内存不足并尝试通过交换不常用的数据来释放一些内存时,就会使用交换空间。

当 ZFS 处理对 zvol 的写入时,它可能需要在内核中分配新内存来处理对各种 ZFS 数据结构的更新。如果机器的空间已经不足,它可能需要交换一些东西来腾出这个空间,但这会导致无限循环。

因此,无需交换到 ZFS,只需留出一小块额外的分区作为交换空间即可。或者,在许多情况下,您可以不使用交换,而是依靠分页到文件系统的其他数据来释放内存。

相关内容