我的 NAS 正在运行 zfs,并且时不时地进行清理。
当它运行时,它会读取所有数据(如预期),但它也会在运行期间写入一点数据(大约 0.5%):
Device rkB/s wkB/s %util
sda 13628.80 69.60 58.04
sdb 13625.60 73.60 59.48
sdc 13625.60 70.80 58.96
sdd 13625.60 68.40 58.24
sde 13625.60 69.60 60.00
这可以通过使用它的其他系统来解释。但是没有使用 NAS 的系统,也没有在服务器上运行的用户进程来访问 NAS。此外,速率在数小时内保持恒定:完全读取 4.5 秒,然后写入 0.5 秒。它是固定的节奏:沉默4.5秒,然后是写字时的DRRRDRRD寻找声。
但为什么这么写任何事物当没有客户也没有什么可纠正的时候?
我的印象是,只要所有数据都是干净的、一致的并且自上次清理以来没有变化,就不需要写入任何数据。
答案1
这不是一个答案——甚至不是一个解决方法,但它使问题变得更小。
我可以通过以下方式将 5 秒调整为 30 秒:
echo 30 > /sys/module/zfs/parameters/zfs_txg_timeout
它现在仍然无法解释为什么要写入任何东西。我能想到的唯一办法就是写入进度,这样如果断电,scrub 就可以从它到达的地方继续。但这似乎浪费了大量 IO,而这不太可能发生,而且只能节省几秒钟。
从 5 秒更改为 60 秒,平均 IO 从 16200 提高到 18000 - 大约提高了 12%。