我有一台 CentOS 服务器,它使用 zfs 来管理一个大而慢的网络附加卷。
我们从这个卷中读取了很多内容,因此我想优化读取性能。
这个想法显然是一个 L2ARC 缓存。
不幸的是,我只有一个 SSD 磁盘连接到这台机器,并且已经用 xfs 格式化,托管 /,并且我无法连接更多(由其他人管理的机器)。
我想知道是否可以在 SSD 磁盘中创建一个文件并以某种方式将 L2ARC 放入该文件中。
我正在考虑循环安装磁盘,但循环安装似乎仅支持只读设备。
还有其他选择吗?
$ dd if=/dev/zero of=/root/cache size...
$ mount -o rw,loop /root/cache /mnt/cache-file
mount: /dev/loop0 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
答案1
是的,你可以使用文件进行 L2ARC。你甚至不需要 loopback mount:你可以简单地发出zpool add tank cache <absolute_file_path>
话虽如此,L2ARC 仅在特定情况下有用,因此并不能保证它能够改善您的状况。
答案2
这目前接受的答案如果使用不当,会导致错误;
$>touch /zfs.cache
$>zpool add poolname cache /zfs.cache
cannot add to 'poolname': device is less than the maximum size (64M)
首先需要预留一个文件:
truncate -s 256g /etc/zfs.cache
或使用
zpool set cachefile=/zfscache/zpool.cache poolname