欢迎光临
我们一直在努力

rsync传输中断怎么办?断点续传教程

迁移网站、传输备份压缩包或同步服务器文件时,最让人头疼的情况之一,就是文件传到一半,网络突然中断。

对于较大的文件,重新完整上传可能需要很长时间。使用 rsync 时,可以提前保留未传完的数据,连接恢复后重新执行命令,利用已有内容继续完成传输。

本文以两台 Linux 服务器之间通过 SSH 传输文件为例,介绍 rsync 的安装、路径填写、断点续传和文件校验方法。

1. rsync如何继续传输未完成的文件?

rsync 会比较源文件与目标端已有的数据,通过差异传输减少重复发送的内容。

本次使用以下参数保留中断时的部分文件:

--partial-dir=.rsync-partial

它会将未传完的内容保存在目标端对应的临时子目录中。下次执行传输时,rsync 可以利用这些数据继续完成文件传输。

这个参数应在第一次开始传输时就加上。 如果上一次没有保留部分文件,之后补加参数也无法找回已经被清除的数据。

本教程适合传输普通文件、网站静态资源,以及已经生成完成的备份压缩包。正在运行的数据库,应先通过数据库自身支持的方式生成一致性备份,再传输备份文件。

2. 安装工具并确认连接

本次示例约定如下:

项目示例内容
源服务器目录/data/project/
目标服务器IP203.0.113.10
目标服务器SSH用户root
SSH端口22
目标接收目录/backup/

203.0.113.10 是文档示例地址,必须替换为实际服务器IP。用户名、端口和目录也需要按实际情况修改。

目标目录建议使用专门的接收目录,已有同名文件时,应确认这些文件允许被更新。

迁移到莱卡云 Linux 云服务器时,可以先完成文件传输与校验,再安排业务切换。

查看官网购买链接: https://www.lcayun.com

9折优惠码:bloglcayun

2.1 两台服务器都安装rsync

在 Debian 或 Ubuntu 上,分别执行:

sudo apt-get update
sudo apt-get install -y rsync openssh-client

如果已经使用 root 登录,可以省略 sudo。

然后检查版本:

rsync --version

源服务器和目标服务器都需要安装 rsync。 通过 SSH 传输时,目标服务器也会运行 rsync 进程。

2.2 从源服务器检查目标连接

从这一步开始,后续命令均在源服务器终端执行。

先检查能否通过 SSH 调用目标服务器上的 rsync:

ssh -p 22 root@203.0.113.10 'rsync --version'

将示例信息替换后,如果能够正常显示远端版本,再创建目标接收目录:

ssh -p 22 root@203.0.113.10 'mkdir -p /backup'

这里的目录创建操作实际发生在目标服务器上。

如果 SSH 使用其他端口,后续所有命令中的 22 都要同步修改。使用普通账户时,目标目录需要是该账户有权限写入的位置。

3. 源目录末尾的斜杠有什么区别?

rsync 命令中,源目录末尾是否带 /,会影响目标目录层级。

假设源文件为:

/data/project/readme.txt

并且目标目录 /backup/ 已经存在:

源目录写法复制内容目标文件位置
/data/project/project目录里面的内容/backup/readme.txt
/data/projectproject目录本身/backup/project/readme.txt

本教程使用:

/data/project/

因此,文件会直接进入目标 /backup/ 目录,不会额外增加一层 project。这一行为也与 rsync 官方文档对源目录末尾斜杠的说明一致。

正式传输前,应先确认自己需要哪一种目录结构。

rsync源目录末尾斜杠对目标目录层级的影响

4. 先预演,再开始正式传输

4.1 预演需要同步的内容

在源服务器执行:

rsync -avhn --itemize-changes \
  --partial-dir=.rsync-partial \
  -e 'ssh -p 22' \
  /data/project/ \
  root@203.0.113.10:/backup/

这里的 -n 表示预演,用于查看计划执行的同步操作,不会实际复制文件。

重点检查:

  • 源目录是否正确。
  • 目标服务器IP是否正确。
  • 目标目录是否正确。
  • 列出的文件是否属于本次传输范围。

预演可以帮助发现路径错误,但不能代替实际写入和传输验证。

4.2 开始正式传输

确认无误后,执行:

rsync -avh \
  --partial-dir=.rsync-partial \
  --info=progress2 \
  -e 'ssh -p 22' \
  /data/project/ \
  root@203.0.113.10:/backup/

主要参数说明:

参数作用
-a归档模式,递归复制并尽可能保留常见文件属性
-v显示详细信息
-h使用更易读的数字单位
--partial-dir=.rsync-partial保留未传完的部分文件
--info=progress2显示整体传输进度
-e 'ssh -p 22'使用SSH,并指定连接端口

-a 并不代表完整复制所有文件系统属性。实际保留效果还取决于账户权限和文件系统;完整系统迁移需要另行考虑 ACL、扩展属性及硬链接等内容。

5. 传输中断后怎么继续?

如果传输过程中网络中断,先恢复源服务器到目标服务器的 SSH 连接。

然后在源服务器重新执行同一条命令:

rsync -avh \
  --partial-dir=.rsync-partial \
  --info=progress2 \
  -e 'ssh -p 22' \
  /data/project/ \
  root@203.0.113.10:/backup/

保持源目录、目标目录和相关参数一致,并保留目标端的 .rsync-partial 数据。

对于需要更新的文件,rsync 会重新比较已有数据。进度显示可能重新计算,因此不能只看百分比是否从上次的位置开始。

保留部分文件不等于自动重连。 本文命令在连接失败退出后,需要再次执行。

任务结束后,紧接着运行:

echo $?

这是查看上一条命令的退出状态:

  • 0:本次 rsync 任务成功结束。
  • 非 0:查看上方错误信息,确认原因后再处理。

不要先执行其他命令再查看 $?,否则得到的是其他命令的结果。

如果传输期间源文件仍在变化,可能需要再次同步。对于网站迁移,应根据业务情况安排最后一次同步和切换时间。

6. 传完后如何校验文件?

rsync保留部分文件、重新传输和SHA256校验流程

传输结束后,建议对重要压缩包、数据库导出文件等进行额外校验。

例如,本次传输的关键文件是:

/data/project/backup.tar.gz

先在源服务器计算 SHA256:

sha256sum /data/project/backup.tar.gz

再从源服务器调用目标服务器,计算接收文件的 SHA256:

ssh -p 22 root@203.0.113.10 \
  'sha256sum /backup/backup.tar.gz'

将文件路径替换为真实路径。

比较两条命令输出前面的完整哈希值。对于同一个、内容已经固定的文件,两端 SHA256 一致,可以作为传输后内容一致的校验依据。sha256sum 是 GNU Coreutils 提供的 SHA-2 校验工具之一。

注意以下几点:

  • 比较的是完整哈希值,文件路径可以不同。
  • 校验期间不要继续修改源文件。
  • 校验一个文件,只能说明该文件的结果。
  • 校验大文件需要读取完整内容,耗时与文件大小和磁盘速度有关。

如果传输的是网站文件,还应检查网站能否正常访问、上传目录权限是否正确,以及程序能否连接数据库。

可以继续参考本站的 网站迁移前如何测试新服务器,在修改公共 DNS 前先验证新服务器。

7. 常见问题排查

7.1 提示rsync找不到

如果出现:

rsync: command not found

检查本机和远端是否都已经安装 rsync。

可以在源服务器分别执行:

rsync --version
ssh -p 22 root@203.0.113.10 'rsync --version'

这样能够区分是本机缺少命令,还是远端缺少命令。

7.2 提示Permission denied

先确认错误发生在哪个阶段:

现象检查方向
SSH登录时被拒绝登录用户、密码或密钥、SSH登录配置
无法读取源文件当前账户对源文件的读取权限
无法创建目标文件目标目录的所有者及写入权限
无法设置文件属性接收账户权限与目标文件系统能力

根据具体路径调整权限,避免直接对整个目录执行 chmod 777。

7.3 出现退出码23或24

  • 退出码23: 部分传输因错误未完成,应查看具体报错文件和原因。
  • 退出码24: 传输期间部分源文件消失,常见于源目录仍在变化的场景。

重要文件传输不能只看到部分文件已经出现,就忽略错误码。

7.4 为什么没有看到.rsync-partial目录?

它主要用于保存未完成文件,正常完成后相关临时数据会被清理。另外,以英文句点开头的目录属于隐藏目录。

检查时可以通过 SSH 查看目标目录:

ssh -p 22 root@203.0.113.10 'ls -la /backup'

子目录里的文件中断时,部分文件目录也可能出现在对应子目录下。

7.5 能不能直接加上–append?

普通目录同步继续使用本文命令即可。

--append 和 --append-verify 有特定使用条件,主要针对已知只会继续增长的文件,不适合作为所有文件的通用续传选项。

8. 写在最后

使用 rsync 传输大文件时,提前保留部分文件,可以减少网络中断后重复传输的成本。操作时应先确认目录层级,通过预演核对范围,再开始正式传输。

中断后保留已有数据,重新执行相同命令;完成后检查退出状态,并对关键文件进行 SHA256 校验。

如果后续要把文件同步安排成定时任务,可以参考本站的 Linux定时任务不执行怎么办?Cron常见问题排查。用于备份时,还应保留多个历史版本,避免只剩一份不断被更新的副本。

赞(0)
未经允许不得转载:莱卡云 » rsync传输中断怎么办?断点续传教程