scp 传输中断后如何用 rsync --partial-dir 实现续传

发布时间 - 2026-01-26 00:00:00    点击率:
rsync 支持断点续传,需同时使用 --partial 和 --partial-dir(如 .rsync-partial/),并注意源文件未修改、权限及路径配置;仅 --partial-dir 无效。

scp 中断后不能直接续传,必须换 rsync

scp 本身不支持断点续传,传输中断就只能重来。rsync 的 --partial--partial-dir 才是真正解决这个问题的组合。但注意:--partial-dir 不是“自动续传开关”,它只是把未完成的临时文件存到指定目录,避免污染目标路径——真正起续传作用的是 --partial + --append(大文件)或默认的增量比对逻辑。

rsync --partial-dir 的正确用法和必要参数

只加 --partial-dir 不够,常见错误是漏掉 --

partial 或忽略权限/时间戳干扰。实际命令要这样组织:

rsync -av --partial --partial-dir=.rsync-partial/ \
  --rsh="ssh -p 2222" \
  /local/file.zip user@host:/remote/path/
  • --partial:保留传输中断时的不完整文件(否则 rsync 默认删掉)
  • --partial-dir=.rsync-partial/:把所有未完成的临时文件放进这个子目录,不影响目标目录的干净性
  • -a 保持属性,但若源文件被修改过,可能触发全量重传;如只关心内容一致,可改用 -r --checksum
  • --rsh 显式指定 ssh 参数(比如非标端口),否则容易因连接配置缺失导致失败

中断后重试时 rsync 怎么识别并续传

rsync 不会“扫描 .rsync-partial/ 然后接上”,它的续传逻辑依赖两点:源文件没变 + 目标端已有同名不完整文件。所以:

  • 如果目标路径下已存在 file.zip(完整),rsync 会跳过 —— 它不校验是否真和源一致,只看大小和修改时间
  • 如果中断后目标端只有 .rsync-partial/file.zip.12345(临时名),rsync 会把它重命名为 file.zip 并继续写入(前提是加了 --partial
  • 若源文件在中断后被修改过,rsync 会当作新文件处理,丢弃旧临时文件,从头传 —— 这是设计使然,不是 bug
  • 对超大单文件,可加 --append 强制追加模式(要求文件末尾没变化),比默认行为更可靠

容易被忽略的权限与路径陷阱

--partial-dir 路径是相对于目标目录的,且 rsync 必须有写入该目录的权限。常见翻车点:

  • 目标路径是 /var/www/--partial-dir=.rsync-partial 实际创建在 /var/www/.rsync-partial/,如果 ssh 用户对 /var/www/ 只有写文件权限、没有建目录权限,就会报错 mkdir failed: Permission denied (13)
  • 使用绝对路径如 --partial-dir=/tmp/rsync-partial 可绕过,但需确保远程用户对那个路径有读写权,且注意磁盘空间归属
  • 如果目标是 root 目录,又没用 sudo 或对应权限,--partial-dir 创建失败会导致整个传输终止,不会退化为无目录模式
  • 某些老版本 rsync(--partial-dir,执行时报错 unrecognized option,得先查 rsync --version

真正麻烦的不是语法,而是中断后你得确认源文件没动、目标端临时文件还在、权限够写、rsync 版本支持——四个条件缺一不可。


# app  # 端口  # ai  # var  # append  # bug  # ssh  # 续传  # 临时文件  # 未完成  # 不完整  # 的是  # 断点续传  # 这是  # 就会  # 还在  # 已有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Android 常见的图片加载框架详细介绍  如何自定义建站之星网站的导航菜单样式?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel安装步骤详细教程_Laravel环境搭建指南  如何在阿里云域名上完成建站全流程?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Android滚轮选择时间控件使用详解  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  如何快速选择适合个人网站的云服务器配置?  Laravel API资源类怎么用_Laravel API Resource数据转换  微信小程序 配置文件详细介绍  深圳网站制作平台,深圳市做网站好的公司有哪些?  Python数据仓库与ETL构建实战_Airflow调度流程详解  javascript如何操作浏览器历史记录_怎样实现无刷新导航  黑客如何通过漏洞一步步攻陷网站服务器?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  实例解析angularjs的filter过滤器  利用 Google AI 进行 YouTube 视频 SEO 描述优化  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  jQuery 常见小例汇总  七夕网站制作视频,七夕大促活动怎么报名?  个人网站制作流程图片大全,个人网站如何注销?  如何选择PHP开源工具快速搭建网站?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何在万网ECS上快速搭建专属网站?  nodejs redis 发布订阅机制封装实现方法及实例代码  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  青岛网站建设如何选择本地服务器?  详解Android——蓝牙技术 带你实现终端间数据传输  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  java ZXing生成二维码及条码实例分享  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  西安专业网站制作公司有哪些,陕西省建行官方网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  C#如何调用原生C++ COM对象详解  利用vue写todolist单页应用  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析