将文件从一个 USB 闪存驱动器复制到多个其他闪存驱动器的最快方法?

将文件从一个 USB 闪存驱动器复制到多个其他闪存驱动器的最快方法?

我正在编写一个 bash 脚本,用于将文件从一个 USB 驱动器复制到多个其他驱动器。

我目前正在使用 rsync 从源复制到单个目标,一次一个循环地遍历所有输出驱动器:

for line in $(cat output_drives_list); do
            rsync -ah --progress --delete mountpoints/SOURCE/ mountpoints/$line/
        done

我正在尝试优化该过程,以最大限度地利用 USB 带宽,从而避免单个驱动器写入速度的瓶颈。

是否可以执行类似 rsync 的操作,但使用多个输出目录,可以一次写入所有输出驱动器,但只从输入读取一次?

我猜想其中一些已经由系统缓存处理了,但这只是针对读取进行了优化。

如果我并行运行多个 rsync 进程,这可能会优化写入速度,但我也担心它会降低读取速度。

并行复制时是否需要关心单读?

答案1

我无法测试它,但如果您在后台启动更多进程,它可能是解决方案:

START=$(date +%s)
for line in $(cat output_drives_list); do
    rsync -ah --progress --delete mountpoints/SOURCE/ mountpoints/$line/ &
done
jobs # get a list of running jobs
wait # wait for all processes to complete
sync
echo It took: $(( $(date +%s)-START )) seconds

编辑:date在提到“基准测试”后添加了 -stuff。

答案2

读取速度将成为目标写入的最大瓶颈。

根据源磁盘有多大,如何在复印机上创建一个 RAM 磁盘,将文件缓存在其中,然后使用并发进程从那里复制到多个目标,如 @hschou 上面演示的那样?

如何创建保留内存的“真实”RAM 磁盘

RAM 读取始终比对闪存或 SSD 进行多次随机访问要快,即使某些 RAM 磁盘最终被交换到本地物理磁盘。

相关内容