我试图将一个大目录从一个硬盘驱动器移动到另一个硬盘驱动器。它有大约 6 TB 的小文件(大部分为 4kb-100kb)。
它已经持续了大约五天,我刚刚估计还需要 15 到 30 天才能完成,这比我想要的时间要长得多,而且比复制一个 6 TB 文件的时间要长得多。
事后看来,我应该读:加速复制1000000个小文件但在开始mv之前我并没有想到这一点,也没有想到mv需要近一个月的时间才能完成。
我认为发生的情况是源硬盘驱动器进行了过多的查找,因为 mv 不按磁盘上的位置进行排序。
我之前使用具有相同源和目标硬盘的 mv 来处理 2 TB 的大文件,并且很快完成,因此我不认为硬盘有问题。
这是我到目前为止所尝试过的:
- 增加 mq-deadline read_expire 和 write_expire 设置。
- 切换到 bfq 调度程序。 2A。禁用低延迟选项。 2B。增加向后搜索惩罚。
- 增加 /proc/sys/vm/dirty_ratio
- 增加 /proc/sys/vm/dirty_writeback_centisecs 和 /proc/sys/vm/dirty_expire_centisecs
- 减少 /proc/sys/vm/vfs_cache_Pressure
这些都没有带来显着的改善。理论上,更多的读取和写入将被调度,允许调度程序通过扇区减少搜索来排序它们。我还喜欢 bfq 的向后搜索惩罚,这从表面上看似乎是合乎逻辑的。
是否有任何选项可以减少现有 mv 进程的时间范围,或者是否值得停止 mv 进程并使用其他东西,或者我是否需要等待它,因为我已经让它运行了这么长时间并且知道如果我停止 mv,我将很难恢复,因为它将所有文件留在源目录中。