用于大规模 USB 复制的同步还是异步?

用于大规模 USB 复制的同步还是异步?

我正在编写一个 bash 脚本,该脚本将文件从一个“源”pendrvie 复制到多个其他文件(如果未安装,还将驱动器格式化为 FAT32)。

我正在使用 rsync 复制文件。

我注意到 rsync 完成得非常快,有时会报告可笑的写入速度,例如 500 MB/s,但通常保持在 15 MB/s。

问题是,之后卸载驱动器可能需要长达几分钟的时间,我发现这是因为系统磁盘缓存和异步 I/O。

我想知道以“同步”模式而不是默认的“异步”模式安装驱动器是否允许 rsync 进程显示真实的写入速度,并避免长时间卸载,而这种情况无法轻松监控。

我想跟踪真正的进度并产生合理的预计到达时间会更容易,但我担心我会以某种方式损害性能,并禁用一些很酷的功能(例如强制从源重新读取每个副本)驱动器而不是 RAM 缓存)。

在这个特定的用例中,同步相对于异步可以产生哪些优点和缺点?

答案1

是的,这是因为磁盘缓存:在卸载之前,必须完成所有挂起的写入。

安装它sync不会改善所需的总时间:需要写入的内容需要写入,无论是否rsync已经退出。事实上,挂载sync可能会强制某些块被不必要地写入多次(例如目录),这会稍微缩短棒的寿命,并且还会增加所需的总时间。

如果您想监控实际的写入速度,只需使用不同的工具,例如atopiotop,它将显示特定设备的写入速度。

监控或编写完整交易的脚本也很容易:只需等待最终umount返回,而不必担心何时rsync完成。

所以我建议不要使用sync.

相关内容