加速 cp -a 的方法(在拇指驱动器中使用 cp -a 非常慢)

加速 cp -a 的方法(在拇指驱动器中使用 cp -a 非常慢)

当使用带有持久操作系统的拇指驱动器时,casper-rw如果在关闭操作系统后过早拔出拇指驱动器,则持久分区可能会损坏。

不幸的是,在使用 ubuntustudio-20.04.2 时,我点击关机按钮后屏幕会变黑长达一分钟,但casper-rw分区会发生大量写入操作。因此,过早拔出电源很容易损坏分区。

为了从这样的事故中恢复,我创建了一个备份分区,casper-rw并在正确设置变量 QUELLE 和 ZIEL 后使用命令(成为超级用户后):

time cp -a "${QUELLE}/upper" "${ZIEL}"

time cp -a "${QUELLE}/work" "${ZIEL}"

time cp -a "${QUELLE}/lost+found" "${ZIEL}"

当我的脚本运行时,我看到

  • CPU 活动非常低
  • 很少的 RAM 使用率
  • htop这表明cp -a在 D 状态下该过程耗费大量时间。

如果我理解正确的话(请纠正我),这意味着计算机必须经常等待,因为 USB 记忆棒的控制器无法有效地处理这么多的读写操作(尽管它是 USB3 插槽中的 USB3 设备!)。

有没有办法让 cp -a 使用更大的缓冲区来加快速度,理想情况下按顺序写入整个文件?

答案1

看起来,通过首先将目录 和 (如果存在) 复制到 SSD 上的某个目录,可以显著加快复制速度。upperwork步骤lost+found需要casper-rw2 分钟多一点的时间。可用cp -a于此目的。

如果您希望将备份放在同一根棒上的单独分区中,则将其从 SSD 复制到 USB 棒需要大约 31 分钟(对于 66500 个文件中的 4.1 GiB 数据,USB3 棒放在 USB3 插槽中)。在将任何当前内容复制到备份分区之前,cp -a分区的先前内容已被擦除)。rm -rf "${ZIEL}/upper"; rm -rf "${ZIEL}/work"; rm -rf "${ZIEL}/lost+found

有人知道在重新使用之前以这种方式擦除分区是否会有所不同吗?或者在将网络内容放入分区之前对其进行格式化是否会进一步加快速度?如果分区损坏,则必须先对其进行格式化,casper-rw然后才能从备份中恢复其内容。

当然,可以通过将文件备份为 来进一步改善这一点backup.tar.gz。这可以减少要写入的数据量,尤其是第二步会从中受益。

答案2

用于sync强制立即写入目标

当您cp打开一个文件并且它出现在目标文件系统时,并不能保证该文件实际上已经存在于存储介质上。

原因是,数据首先在各种内部缓冲区之间提取,这样速度更快,更方便用户使用,直到它实际到达目标存储设备。将数据写入目标设备实际上是在后台执行的,不会消耗太多 CPU 周期,这就是为什么在活动监视器中很难看到它的原因。

sync您始终可以在复制后尝试强制立即将数据从缓冲区写入目标存储设备,例如cp ${QUELLE} ${ZIEL} && sync

另外,考虑rsync仅将已更改或新的文件复制到目标。

相关内容