我可以让 tar 在读取文件时不使用文件系统缓存吗?

我可以让 tar 在读取文件时不使用文件系统缓存吗?

我们在生产 Web 服务器上有一个 cronned 作业,需要将文件系统中的文件打包成 tar 文件。它运行大约 105 分钟,在此期间,Apache 开始交换,因为读取几 GB 的文件会扩大文件系统缓存的内存量。

tar 正在读取的数据不需要存在于文件系统缓存中。它将进入 tarfile,仅此而已。有什么我们可以说的吗tar cvf whatever/ --no-system-file-buffer-reads?我的阅读man tar没有发现任何看起来有帮助的东西。

您不必指出,这可以看作是“医生,我这样做会很疼!所以不要这样做”的情况。我们需要以某种方式将文件转储到 tar 文件中,因此不这样做不是一个选择。

答案1

我认为这已经得到解答这里

无缓存实用程序,可以添加到 ionice 和 nice 等命令的前面。它的工作原理是预加载一个库,该库会将标志添加 posix_fadvisePOSIX_FADV_DONTNEED任何打开的调用中。

简单来说,它告知内核不需要缓存该特定文件;内核通常不会缓存该文件。参见这里了解技术细节。

它对于任何巨大的复制工作都有奇效,例如,如果您想在后台备份一个多 TB 的磁盘,同时尽量减少对正在运行的系统的影响,您可以采取一些措施nice -n19 ionice -c3 nocache cp -a /vol /vol2

相关内容