Ubuntu22.04 配置Rsync服务并实现增量同步

rsync是一个开源的快速备份工具,可以镜像保存整个目录树和文件系统。

rsync使用所谓的“rsync算法”来使本地和远程的文件保持同步。这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

rsync可以工作在unix/linux,windows,mac等等。

rsync可以实现增量备份,即上传文件时,先与本地文件进行比较,只上传本地文件有变化的部分,这样就避免了上传整个文件。

如果rsync命令无效请执行

sudo apt-get install rsync

一、服务端配置

1. 编辑/etc/default/rsync

# 打开rsync
sudo vim /etc/default/rsync
# 编辑rsync
RSYNC_ENABLE=true

2. 创建/etc/rsyncd.conf,并填写配置信息

sudo vim /etc/rsyncd.conf
max connections = 2
log file = /var/log/rsync.log
timeout = 300
Charset = UTF-8

[share] # 模块名
comment = Public Share
# path为需要同步的文件夹路径
path = /home/share
read only = no
list = yes
uid = root
gid = root
# 必须和 rsyncd.secrets中的用户名对应
auth users = user
secrets file = /etc/rsyncd.secrets

3. 创建/etc/rsyncd.secrets,配置用户名和密码.

sudo vim /etc/rsyncd.secrets

4. 配置用户名和密码,密码可以任意设置

user:password

5. 修改rsyncd.secrets文件的权限

sudo chmod 600 /etc/rsyncd.secrets

6. 重启rsync服务

sudo /etc/init.d/rsync restart

二、客户端使用,并缺省密码

方法 1:使用 RSYNC_PASSWORD环境变量(密码明文在命令中)

RSYNC_PASSWORD="your_password" rsync -cvazu --progress user@10.155.0.5::halo ./
  • 优点:简单直接,适合临时使用。
  • 缺点:密码会出现在命令行历史记录中(不安全)。

方法 2:使用 --password-file(推荐,更安全)

步骤 1:创建密码文件

echo "your_password" > /tmp/rsync_passwd
chmod 600 /tmp/rsync_passwd  # 限制权限,避免泄露

步骤 2:运行 rsync

rsync -cvazu --progress --password-file=/tmp/rsync_passwd user@10.155.0.5::halo ./
  • 优点:密码不会出现在命令行历史记录,更安全。
  • 缺点:需要额外管理密码文件。

方法 3:使用 SSH 认证(免密登录,最安全)

如果目标服务器支持 SSH(而不是 rsync daemon 模式),可以使用 SSH 密钥认证:

rsync -cvazu -e "ssh -i /path/to/your/private_key" --progress user@10.155.0.5:/remote/path/halo ./
  • 优点:无需密码,安全性最高。
  • 缺点:需要提前配置 SSH 密钥。

命令参数说明

  • -c​:基于校验和(而非时间戳)判断文件变化(可选)
  • -v​:显示详细输出
  • -a​:归档模式(保持权限、时间戳等)
  • -z​:压缩传输
  • -u​:增量同步(跳过目标端已更新的文件)
  • --progress​:显示传输进度

注意事项

  1. 安全性:方法 1 会暴露密码,建议仅在测试环境使用。

  2. 清理密码文件:使用方法 2 后,记得删除临时密码文件:

    rm -f /tmp/rsync_passwd
    
  3. 如果连接的是 rsync daemon(使用 ::​ 语法),确保服务端已正确配置模块(如 [halo]​)。

如果需要进一步优化(如排除某些文件、限速等),可以追加 --exclude​ 或 --bwlimit​ 参数。