我想要做的是复制 500K 的文件。
我想在服务器内从一个目的地复制到另一个目的地。它主要包括电子邮件和很多小文件。
它只有 23 GB,但耗时很长(超过 30 分钟但尚未完成),linux cp 命令也仅使用 1 个 CPU。
因此,如果我编写脚本以使用多个 cps,是否会使其速度更快。
系统有 16 个核心、16 GB 内存、15K 个驱动程序(15000 RPM SATA)。
还有什么其他选择?
我相信 tarring 和 untaring 会花费更长时间并且不会使用多核..
答案1
您的瓶颈是硬盘速度。多核无法加快速度。
答案2
复制单个大文件比移动大量小文件要快,因为每次操作的设置和拆卸都存在很大的延迟 - 而且磁盘和操作系统可以对单个大文件进行大量预读。因此,先将其打包会使其更快。不过,一旦考虑到打包所需的时间,它可能不会加快太多速度。
请注意,您仅从单个磁盘读取,因此并行调用磁盘实际上可能会减慢速度,因为它会尝试同时提供多个文件。
答案3
都是在同一个目录下吗?有个脚本可以启动多个cp:http://www.unix.com/unix-dummies-questions-answers/128363-copy-files-parallel.html
对于一棵树,你需要调整它。
答案4
压缩可能会使需要写入的文件大小减半。如果您可以充分高效地利用内核,并且大多数压缩都发生在快速内存中,那么(理论上)这可以将写入时间缩短近一半。写入通常也比读取慢。当然,一半只是一个猜测,很大程度上取决于您尝试压缩的“小”文件的类型、大小和数量。大型日志文件似乎压缩效果最好,因为它们都是文本、大量空格等,而已经压缩的图像文件几乎没有任何改进。与编译一样,来自复制程序的任何终端 I/O 都非常慢,应该分配给文件或使用 >& 序列将其设置为 null,以提高速度。Null 当然不会保存任何错误信息,并将责任放在用户身上,以确保文件被复制。除非可以通过序列或其他方法验证文件,否则这最适合一些大型文件。