rsync,包含300万个文件的目录,可以跟上吗?

时间:2017-05-09 14:43:48

标签: bash bioinformatics rsync fswatch

我正在通过终端使用bash命令在mac计算机上工作。

我正在运行DNA测序仪,在48小时内产生约3-5百万个文件。出于速度原因,这些文件将保存到计算机的SSD中。我想使用fswatch和rsync命令监视目录,并在生成它们时将这些文件传输到服务器,以减少测序后的长传输时间。

这是我提出的命令。

fswatch -o ./ | (while read; do rsync -r -t /Source/Directory /Destination/Directory; done)

但我担心由于大量的文件> 300万和大的总尺寸>这些工具100gb可能难以跟上。有更好的策略吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您将使用的命令可能有效但会出现一些我想避免的性能问题。

  • " fswatch"将在每次修改FS时生成输出(例如,每次更新文件。
  • " rsync"每次都会递归检查目录及其子目录和文件中的所有可能的变化。 (不计算实际的数据副本,只有在源和目的地有大量文件和目录时,此操作需要很长时间)

这意味着对于" fswatch"输出的每一行。会有一个" rsync"实例开始,而" rsync"会越来越大。

48小时是很多时间,复制文件(~100GB)无论如何都不会花费这么长时间(磁盘到磁盘非常快,千兆网络也非常快)。

相反,我会在生成过程中定期(例如30分钟)建议执行rsync -a --delete /source /destination,最后一次,确保没有遗漏任何内容。一个简短的脚本可以包含:

#!/bin/bash
while ps -ef | grep -q "process that generates files"; do
    echo "Running rsync..."
    rsync -a --delete /source /destination
    echo "...waiting 30 minutes"
    sleep 1800 # seconds
done
echo "Running final rsync..."
rsync -a --delete /source /destination
echo "...done."

...只需替换生成文件的"进程"无论名称如何,生成文件的过程都在" ps -ef"输出正在运行。根据需要调整时间,我认为在30分钟内创建~2GB的数据,可以在几分钟内复制。

该脚本将确保" rsync"它不应该运行多次,它会专注于复制文件而不是经常比较源和目的地。

选项" -a" (存档)意味着您使用的选项和更多(-rlptgoD)," - 删除"将删除" / destination"上存在的任何文件但并不存在于" / source" (如果临时文件被复制但在最终结构中实际上不需要),则很方便。

答案 1 :(得分:1)

文件系统限制可能会成为一个问题。

请参阅此答案:How many files can I put in a directory?

通常,目录中的文件越多,文件系统的执行速度就越慢。