原文地址:https://www.pfjsb.com/kfyw/linux-rsync.html

对于海量文件的稳定复制,推荐使用 rsync,因为它支持断点续传、校验文件完整性,并能显示进度。

推荐方法:使用 rsync 进行稳定复制

rsync -avh --progress --stats /源目录/ /目标磁盘/目标目录/

参数解释

  • -a:归档模式,保持文件的权限、时间戳、符号链接等属性。
  • -v:显示详细信息(可选)。
  • -h:人类可读格式(文件大小等)。
  • --progress:显示复制进度。
  • --stats:显示最终的统计信息。

示例

如果你的源目录是 /mnt/images/,目标磁盘是 /mnt2/backup/,执行:

rsync -avh --progress --stats /mnt/images/ /mnt2/backup/

这样会把 /mnt/images/ 整个复制到 /mnt2/backup/ 目录下。

提高复制速度(适用于海量小文件)

方法 1:使用 rsync --info=progress2(实时进度 + 断点续传)

rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
  • --info=progress2:显示整体进度(比 --progress 更友好)。
  • rsync 断点续传,不会重复复制已经存在的文件。

方法 2:使用 rsync --bwlimit 限制带宽(防止服务器负载过高)

如果你要在生产环境下复制,避免影响业务,可以限制带宽:

rsync -avh --info=progress2 --bwlimit=100000 /mnt/images/ /mnt2/backup/
  • --bwlimit=100000 限制速度为 100MB/s,你可以根据情况调整。

方法 3:使用 rsync --remove-source-files(删除已复制的文件,适用于迁移)

如果你想复制完后删除源文件,释放磁盘空间:

rsync -avh --progress --remove-source-files /mnt/images/ /mnt2/backup/
find /mnt/images/ -type f -empty -delete
  • --remove-source-files:复制成功后删除已复制的文件(但不删除空目录)。
  • find ... -delete:清理空目录。

⚠ 注意:如果你要彻底删除源目录,最后用:

rm -rf /mnt/images/

其他方法

使用 cp(不推荐)

cp -a /mnt/images/ /mnt2/backup/
  • cp -a 可以保持文件属性。

缺点:

  • 不支持断点续传,失败后需要重新开始。
  • 复制大文件时效率较低,无法显示进度。

总结

✅ 推荐

rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/

(稳定、高效、可断点续传)

✅ 限速

rsync --bwlimit=100000

(避免服务器过载)

✅ 迁移

rsync --remove-source-files

(复制完后删除源文件)

❌ 不要用

cp -a

(不稳定,大数据复制容易失败)

使用rsync -avh –info=progress2命令中断后,该如何接着上次继续?

rsync 默认支持断点续传,如果命令执行中断,你可以直接重新运行相同的 rsync 命令,它会自动跳过已完成的文件,仅复制未完成或新变化的文件。

💡 继续上次的 rsync 复制

假设你之前运行的命令是:

rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/

如果中断了,直接运行 同样的命令:

rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/

✅ 它会自动跳过已复制的文件,只同步未完成的文件。

🛠 进阶优化(适用于大文件)

如果你复制的文件特别大,可以加上 --partial--append-verify 参数:

rsync -avh --info=progress2 --partial --append-verify /mnt/images/ /mnt2/backup/
  • --partial:保留部分已复制的文件,避免重新复制。
  • --append-verify:对大文件进行增量复制,确保完整性(比 --append 更安全)。

🔹 适用于大文件(如 1GB+ 视频、ISO、数据库备份等)。

🎯 让 rsync 在后台运行(防止 SSH 断连)

如果你的 SSH 连接容易断开,建议用 screennohuprsync 在后台运行:

方法 1:使用 screen(推荐)

screen -S rsync_copy
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/

📌 SSH 断开后,screen -r rsync_copy 可恢复进程。

方法 2:使用 nohup(简单)

nohup rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/ > rsync.log 2>&1 &

📌 SSH 断开后任务仍在运行,可查看 rsync.log 进度:

tail -f rsync.log

🚀 总结

  • 直接重新运行 rsync,会自动跳过已完成的文件:
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/
  • 对于大文件,使用 --partial --append-verify 防止重新复制:
rsync -avh --info=progress2 --partial --append-verify /mnt/images/ /mnt2/backup/
  • 使用 screennohup,防止 SSH 断连导致中断:
screen -S rsync_copy
rsync -avh --info=progress2 /mnt/images/ /mnt2/backup/

SSH 断开后,输入

screen -r rsync_copy

恢复任务。

这样,即使 rsync 复制任务被中断,你也可以无缝续传,确保数据完整性!🚀

0%