在同一硬盘上复制数千个文件

在同一硬盘上复制数千个文件

我发现自己正处于这样一种情况:我正在将整个文件系统复制到两个不同的 HD 分区(大小和文件系统类型不同)。到目前为止,问题是两者都会cprsync源上读取单个文件,并将其写入目标 - 对每个小文件都这样做。因此,我只有一些小型操作系统缓冲和 HD 缓存本身,以防止 HD 磁头为每个小文件来回移动 - 但感觉它非常接近那样。

机器有足够的 RAM。我能做什么呢?在将同一分区上的几兆字节(甚至几 GB)的数据提交到另一个分区之前,先读取这些数据?

如果重要的话,我正在从 BTRFS 复制到 EXt4 - 数据包括几个 git 树、源文件等(一些大型视频和音频文件)。

答案1

您可以尝试使用cpiotar管道,例如cpio使用--io-size

话虽如此,我不相信你会获得比离开cprsync完成他们的工作更好的性能。实际上,文件系统和底层操作系统的工作是处理硬盘驱动器行为并帮助它决定是否寻道。

您可能会对此有更好的了解那么问题来了。 特别:

编辑:啊,“原生 Linux”可能通过将读写与异步 I/O 交错来提高性能。让命令堆积起来可以帮助磁盘驱动程序决定何时最适合寻道。您可以尝试 Boost Asio 或 pthreads 进行比较。至于“无法击败 POSIX 文件描述符”……好吧,如果您对数据进行任何操作,而不仅仅是盲目复制,那么这是真的。

相关内容