首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不使用文件缓存,我可以更快地复制大型文件吗?

如果不使用文件缓存,我可以更快地复制大型文件吗?
EN

Ask Ubuntu用户
提问于 2012-04-17 14:37:34
回答 2查看 22.9K关注 0票数 21

在添加preload包之后,我的应用程序似乎会加快速度,但是如果我复制一个大文件,那么文件缓存就会增长一倍以上。

通过将单个3-4 GB的virtualbox图像或视频文件传输到外部驱动器,这个巨大的缓存似乎会从内存中删除所有预加载的应用程序,从而导致加载时间的增加和一般性能的下降。

有没有一种方法可以复制大的、多千兆字节的文件而不缓存它们(即绕过文件缓存)?还是从缓存中用白名单或黑名单列出特定文件夹的方法?

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2012-07-03 08:55:52

有一个nocache实用程序,它可以添加到命令(如ionicenice )中。它的工作方式是预装一个库,它将带有posix_fadvise标志的POSIX_FADV_DONTNEED添加到任何打开的调用中。

简单地说,它建议内核不需要对特定文件进行缓存;然后内核通常不会缓存该文件。有关技术细节,请参见这里

它对于任何大型复制作业都会产生奇迹,例如,如果您想在后台备份一个对运行系统的影响最小的数百兆字节磁盘,您可以沿着nice -n19 ionice -c3 nocache cp -a /vol /vol2执行一些操作。

Ubuntu 13.10及以上版本将提供一个软件包。如果您是在上一个版本中,您可以安装13.10包,也可以选择使用Fran ois Marier的这个12.04的后台

票数 25
EN

Ask Ubuntu用户

发布于 2012-06-26 00:45:56

对于单个大文件,使用dd和直接I/O绕过文件缓存:

如果您想要传输一个(或几个)大的多千兆字节文件,那么使用dd很容易:

代码语言:javascript
复制
dd if=/path/to/source of=/path/to/destination bs=4M iflag=direct oflag=direct
  • direct标志告诉dd在读写时使用内核的直接I/O选项(O_DIRECT),从而完全绕过文件缓存。
  • bs块大小选项必须设置为相当大的值,因为为了最小化dd必须执行的物理磁盘操作的数量,因为读/写不再缓存,过多的小的直接操作可能导致严重的减速。
    • 可以随意实验1到32 MB的值;上面的设置是4MB (4M)。

不幸的是,对于多个/递归目录副本,没有容易获得的工具;通常的cp等不支持直接I/O。

/e标志和标志更改为正确的时差和标志

票数 15
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/122857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档