当在 SMR 驱动器(叠瓦式驱动器)上运行时,我可以做些什么来提高 rsync 的性能?

当在 SMR 驱动器(叠瓦式驱动器)上运行时,我可以做些什么来提高 rsync 的性能?

与 SMR 驱动器同步或从 SMR 驱动器同步时,rsync性能会下降到至少 3 到 5 mb/s,并且会出现明显的磁头飞动噪音。

如果只读取 SMR 驱动器,这一点尤其出乎意料。rsync读取以叠瓦方式写入的数据的性能应该与 PMR 驱动器(垂直磁记录驱动器)相当。

任何流行的文件系统似乎都表现出类似的行为。

有什么办法可以提高rsyncSMR 驱动器(叠瓦式驱动器)的性能?

答案1

如果你rsync SMR 驱动器,请确保文件系统已安装read-only或带有noatime选项。

否则,SMR 驱动器将需要为 rsync 读取的每个文件写入时间戳,从而导致性能显著下降(从大约 80 mb/s 下降到 3-5 mb/s)和头部磨损/咔嗒噪音。

如果你已经有一个性能不佳的 rsync 任务正在运行,则无需停止它,你可以重新挂载源文件系统

sudo mount -o remount,ro  /path/to/source/fs

效果不会立即显现,请耐心等待 10 到 20 分钟,直到驱动器完成写入缓冲区中所有数据。此建议已尝试并测试过。


这也适用rsyncSMR 驱动器,即如果文件系统在文件完全写入磁盘后尝试更新时间戳。这会使连续工作负载抖动,并且大量数据带会不断重写,从而导致驱动器磨损。以下可能帮助:

sudo mount -t fs_type -o rw,noatime device /path/to/dest/fs

这必须在运行 rsync 之前完成;其他因素可能会使此选项变得无关紧要,例如无缓冲的 FAT/MFT 更新、如果文件系统主要针对 SSD 进行优化则并行写入等。


如果您无论如何都想备份完整的文件系统,请尝试使用dd bs=32M然后调整 SMR 目标上的文件系统的大小(在这种情况下,无需安装它并运行 rsync 来传输每个文件)。


这里使用的示例硬件是 Seagate 驱动器管理的 SMR 8TB 消费级驱动器。其他硬件可能会有所不同。

答案2

对于将 SMR rsync 备份到 Seagate 4TB“扩展便携式驱动器”,我发现我需要使用 rsync 的--bwlimit选项来限制 rsync,以阻止它超出 SMR 的缓存/快速写入区域。

我目前--bwlimit根据工作负载将其设置为 15MB/秒到 30MB/秒之间的某个值,例如

mount -o noatime,nodiratime,data=writeback /dev/mapper/usbluks /mnt/usbbackup
rsync -a -HAX --sparse --bwlimit=20M /home/ /mnt/usbbackup/

也可以用于systemd-run限制 IO 带宽:

systemd-run -tP --wait -p "IOWriteBandwidthMax=/mnt/usbbackup 30M" rsync -a -HAX --sparse /home/ /mnt/usbbackup/

我正在安装 LUK 的 ext4 文件系统data=writeback,试图让驱动器优化写入。我认为这很有帮助,但如果断电,则存在一定风险。

如果驱动器确实降速到低于 1MB/秒,我有时会暂停工作一段时间,让硬盘自行恢复。我通常在终端中运行外部备份,这样我就可以根据需要轻松地使用 control-z 和 fg 进行操作。

除了完成一两次同步之外,我还倾向于让驱动器静置一段时间,以防它仍在对其快速写入区域进行整理。

还有 rsync--fsync选项可以进一步限制复制,但它可能会破坏小写入,我不确定这是否是个好主意。

我最近才意识到 SMR 是导致我的备份速度缓慢的原因,所以这一切都只是一点实验而已。

相关内容