Linux下使用Rsync实现增量备份 远程服务器数据同步方案【指南】

秋芳酱_9128

秋芳酱_9128

2026-04-13

1006人浏览

原创

rsync增量备份依赖目标端保留历史文件属性,若目标被清空、权限重置或时间戳篡改,则默认基于修改时间和大小的快速比对失效,导致全量传输。

linux下使用rsync实现增量备份 远程服务器数据同步方案【指南】

rsync 增量备份不是自动发生的,它依赖于你是否保留上一次同步的目标目录结构和元数据 —— 没有“历史快照”,就没有增量可言。

为什么 rsync -a --delete 看起来没增量?

很多人执行 rsync -a --delete /src/ user@host:/dst/ 后发现每次都在传全部文件,其实根本原因在于:rsync 的“增量”判断只发生在本地与目标端的文件属性比对阶段。如果目标端被清空、权限被重置、或时间戳被篡改(比如挂载了 noatime 的文件系统),--update 或默认的 quick-check 就会失效。

  • rsync 默认用「修改时间 + 文件大小」做快速比对,不校验内容;加 -c 会强制 checksum,但大幅降低速度
  • --delete 不影响增量逻辑,但它会删掉目标端多余文件,让结果“看起来更干净”,也更容易掩盖同步失败
  • 远程路径末尾带不带 / 影响极大:/src/ 表示同步目录内容,/src 表示同步目录本身 —— 错一个斜杠,rsync 就可能在目标端多建一层嵌套

远程增量备份必须配 SSH 免密登录

定时任务(如 cron)无法交互输入密码,一旦 rsync 触发 SSH 连接卡在 password prompt,整个备份就静默失败。这不是 rsync 的问题,而是 SSH 层的阻塞。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 生成密钥用 ssh-keygen -t rsa -b 4096,不要用默认 2048 位(部分新系统已警告弃用)
  • 公钥必须追加进远程用户的 ~/.ssh/authorized_keys,且远程 ~/.ssh 目录权限不能大于 700,authorized_keys 不能大于 600
  • 测试连通性别只跑 ssh user@host,要跑完整命令:rsync -n -avz /dev/null user@host:/tmp/(-n 表示 dry-run)

真正可靠的增量需要保留历史快照

单纯靠 rsync 两次直连同步,只能做到「当前态一致」,无法回溯昨天/上周的文件状态。要实现带时间维度的增量,必须引入硬链接机制。

  • 用 --link-dest=PATH 参数指定上一次备份目录,rsync 会为未变化文件创建硬链接而非复制,节省空间且保留时间戳
  • 典型结构:/backup/daily.0(当前)、/backup/daily.1(昨日)、/backup/daily.2(前日)…… 每次先 mv daily.0 daily.1,再用 --link-dest=/backup/daily.1 同步到 daily.0
  • 注意:硬链接仅在同文件系统内有效;跨设备(如不同磁盘、LVM 逻辑卷)会退化为完整复制

备份脚本里最容易漏掉的三件事

一个看似能跑通的 rsync 脚本,往往在线上出问题时才发现缺关键防护。

  • 没加 -e 'ssh -o StrictHostKeyChecking=no':首次连接远程主机时,SSH 会卡在 yes/no 提示 —— cron 里完全不可见
  • 没检查退出码:rsync 失败时返回非 0 值,但脚本若没写 if [ $? -ne 0 ]; then exit 1; fi,就会假装成功
  • 没加超时控制:网络抖动可能导致 rsync 卡死,建议加 -e 'ssh -o ConnectTimeout=10 -o ServerAliveInterval=30'

硬链接式增量备份看着简单,但一旦源目录有大量小文件、目标存储是 NFS 或 CIFS,--link-dest 就可能 silently 失效 —— 这时候得看 rsync 输出里的 hard-link 字样是否真出现,而不是只信日志里 “sent XXX bytes”。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

2023.11.13

2831

4

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.29

865

3

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3970

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3393

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2553

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6190

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5842

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习