Answers:
有该nocache
实用程序,可以在诸如ionice
和的命令之前添加nice
。它通过预加载一个库来工作,该库在任何打开的调用中添加posix_fadvise
了POSIX_FADV_DONTNEED
标志。
简单来说,它建议内核该特定文件不需要缓存。内核通常不会缓存文件。有关详细技术信息,请参见此处。
它确实对任何大型复制作业都产生了奇迹,例如,如果您想在后台备份多TB磁盘,而对运行的系统造成的影响最小,则可以采取一些措施nice -n19 ionice -c3 nocache cp -a /vol /vol2
。
软件包将在Ubuntu 13.10及更高版本中提供。如果您使用的是先前版本,则可以安装13.10软件包,也可以选择FrançoisMarier 进行的12.04反向移植。
dd
与直接 I / O一起使用以绕过文件缓存:如果您要传输一个(或几个)大的千兆字节文件,可以很容易地做到dd
:
dd if=/path/to/source of=/path/to/destination bs=4M iflag=direct oflag=direct
direct
标志指示在读写时dd
使用内核的直接I / O选项(O_DIRECT
),从而完全绕过文件缓存。bs
块大小选项必须设置为一个相当大的值,因为,以尽量减少物理磁盘操作的数量dd
必须执行,因为读/写操作都不再缓存,并可能导致严重的经济放缓太多的小的直接操作。
4M
)。不幸的是,对于多个/递归目录副本,没有容易获得的工具。通常cp
,等不支持直接I / O。
/ e iflags&oflags更改为正确的iflag&oflag
zsh
的**
运算符进行递归。zsh
需要从仓库中手动安装。
dd
怪异的语法使** oprtator犯规。你仍然可以使用(有争论通常一个shell脚本dd.sh in.file out.file
的文件名与**)而得到的文件名来dd
使用$1
,$2
等等,这不应该由DD的怪异语法犯规。
dd
使用find
和递归复制目录mkdir
我们需要解决两个问题:
dd
不知道该如何处理目录dd
一次只能复制一个文件首先让我们定义输入和输出目录:
SOURCE="/media/source-dir"
TARGET="/media/target-dir"
现在cd
进入源目录,以便find
报告我们可以轻松操作的相对目录:
cd "$SOURCE"
将目录树从复制$SOURCE
到$TARGET
find . -type d -exec mkdir -p "$TARGET{}" \;
从复制文件$SOURCE
到$TARGET
省略写缓存(但要使用读缓存!)
find . -type f -exec dd if={} of="$TARGET{}" bs=8M oflag=direct \;
请注意,这不会保留文件修改时间,所有权和其他属性。