我如何防止使用 ntfs-3g 排气我​​的记忆 ZFS ARC?

我的显微镜正在运行 HP
http://www.openmediavault.org/
2.1.18 (Stone Burner) 在基础上 Debian GNU / Linux 7 (wheezy).

几天前,我需要从格式化的USB驱动器中复制大量文件 NTFS. 连接,安装,启动副本并留下直到完成。

一天后,我发现他几乎没有复制,以及我的表现 NAS 摔倒了。 在调查过程中,我发现页面和缓冲区缓存现在占用更多 3/4 系统内存 (他们一起常常少 10%), 和 ZFS ARC 现在压缩在剩下的记忆中 (较少的 1/4 从正常大小。 ).

当我意识到并非如此时,我停止了副本,卸下并关闭了磁盘,并且非常快速的kechi返回正常大小,然后 ARC 开始填补正常水平。

因此,如果我需要在将来做更多的直接副本,如何防止磁盘的安装 ntfs, 导致消耗大量记忆和剥夺我的 ZFS ARC 必要的记忆?

注意:我试图运行

echo 3 > /proc/sys/vm/drop_caches

(在“免费缓存页面上 dentries 和 inodes» 依据

man 5 proc

), 因为
https://serverfault.com/users/269155/shodanshok
https://serverfault.com/a/734645/25092
, 但它也清除了我的 ARC (除了标题缓存所需的内存之外 L2ARC). 因此,我的系统中有很多自由内存,但由于一切都仅缓存 ARC 或者 L2ARC, 我的系统已经花了整个永恒来充电骰子以进行重复填充 ARC, 什么是一种不可取的事态。

在此图像中,您可以看到禁食 ZFS 在第5次开始时,我推出了我的副本 ntfs, 磁盘断开连接时,一切都返回正常情况 ntfs 在第6次开始,然后,最后,清除了 (并恢复) ARC 使用后 drop_caches, 2月7日。
已邀请:

知食

赞同来自:

最简单的解决方案 - 定期清洁缓冲区和页面缓存。 您可以通过运行类似的字符串轻松完成。 bash 在背景中 (或其他 tty):


while true; do echo 1 > /proc/sys/vm/drop_caches; sleep 5; done

此外,您可以尝试另一种避免污染缓冲区的方法 / 缓存页面。 实质上,您需要使用 DIRECT_IO, 完全绕过页面的缓存。 你可以用一个团队这样做:


dd if=srcfile of=dstfile bs=1M iflag=direct

上面的命令打开 srcfile 有选择 O_DIRECT, 读取时绕过页面的缓存。

但不是在录音期间

. 如果您需要甚至录制缓存,则可以添加另一个

oflag=direct

选项。

以上决定的这个问题是您必须通过执行几个逐个指定文件 (也许数千人). 这意味着您必须在周围编写脚本

dd

, 所以你可以复制三个的目录。

其他选项包括:

使用

ddrescue

代替

dd

使用简单

cp

用第一个启动

libdirectio

(看
https://github.com/gburd/libdirectio
更多细节)

最后,您可以尝试启动应用程序 / 复制 NTFS 穿过

systemd-run

并安装某些内存限制,也应该有效限制页面缓存。

要回复问题请先登录注册