1 个不稳定版本

0.1.0 2022年10月13日

#1058 in 异步

自定义许可证

14KB
204

为什么?

有许多很好的程序可以完成这项任务。那么为什么还需要另一个呢?因为有一个单一的情况,我找不到任何足够好的解决方案,这就是我制作这个应用程序的原因。这种情况是当你想将分布在许多目录中的大量小文件从一个磁盘移动到另一个磁盘时。

在我的情况下,我有几个节点使用小磁盘(5TB)收集数据,这些磁盘每天会产生大约800MB的数据,分布在50个目录中的800个文件中。当小磁盘快满时,我将所有内容转储到更大的存储(那里将进行处理)。这个任务意味着要移动数百万个文件。使用rsync或其他传统工具需要很长时间。主要是因为它们逐个复制文件,而要使rsync并发,则需要使用像parallel或xargs这样的工具进行很多“技巧”,还需要准备一个正确的策略,以有效地使用这些工具。这非常“复杂”,我想要一个易于使用但功能强大的东西。

这个应用程序只是做并发的事情。

复制器

这个程序copies以异步的方式复制文件。每个目录都在不同的tokio任务中处理。它使用任务池来控制最大并发性。基本上,程序发现新的目录,并在找到新的目录时立即启动更多任务。你必须明智地选择这个值,因为更多的并发并不一定意味着更快的速度,而且实际上大值可能会使你的磁盘传输速度变慢。在某些情况下,异步解决方案是一个游戏规则改变者,但它们不是万能的。

我发现,使用这个解决方案,我可以达到磁盘可以提供的最大吞吐量,但你必须通过尝试不同的值并使用像iotop这样的工具来测量它来找到最适合你磁盘的最佳值。

如果你有一些包含大文件的目录,这个程序永远不会优于rsync,甚至可能更慢。记住,asyc有成本,在这种情况下,这种开销不会带来任何好处。

何时使用此程序

  • 大量分布在许多目录中的文件
  • 小文件(最多几兆字节)

不使用此程序的情况

  • 大文件
  • 单个或少数几个目录

使用程序

只需要两个参数:源和目标。除此之外,您可以指定是否要删除源(移动文件)以及并发级别。例如

--source data_origin --destination data_destination --delete-source true --concurrency 20

但您始终可以使用 --help 运行来获取更多详细信息

缺少的功能

指标、进度条以及这些花哨的功能尚未实现。

依赖项

~6–14MB
~141K SLoC