找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

367

积分

0

好友

44

主题
发表于 2025-12-26 11:01:58 | 查看: 35| 回复: 0

Rsync 是一款功能强大的文件同步与增量备份工具,广泛应用于 Linux/Unix 系统。它支持本地复制、跨主机同步(通过 SSH 或 rsync 守护进程),并能高效地只传输有变动的文件,是运维和数据备份的利器。本文将以 CentOS 7 为例,详细介绍 Rsync 的安装、配置及各种实战应用场景。

安装 Rsync

在 CentOS 7 系统中,可以使用 yum 包管理器快速安装 rsync。

# 安装rsync
yum -y install rsync

# 查看服务相关文件路径
rpm -ql rsync | grep -i service

查看rsync服务文件

安装完成后,可以启动 rsync 守护进程服务并设置开机自启。守护进程模式适用于独立的用户名/密码认证,而 SSH 免密传输则无需此服务。

# 设置服务开机自启并立即启动
systemctl enable --now rsyncd.service

# 检查服务端口(TCP/873)是否监听
netstat -tunlp | grep 873

配置服务端

Rsync 守护进程的主要配置文件是 /etc/rsyncd.conf。下面是一个基础配置模板。

vim /etc/rsyncd.conf

# 设置运行rsync进程的用户
uid = root
gid = root

# 将指定目录作为根目录,限制进程访问范围
use chroot = no
# 最大连接数
max connections = 4
# 忽略同步过程中的错误
ignore errors = yes
ignore nonreadable = yes

# 排除特定文件或目录(如损坏文件碎片)
exclude = lost+found/

# 指定日志文件
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock
reverse lookup = no
transfer logging = yes
timeout = 900

# 指定传输时不压缩的文件类型
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# ************安全配置***********
# 访问控制
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/24
# 禁止列出模块列表
list = false

# 定义模块:每个模块对应一个目录
[backup]
comment = mysql数据备份
path = /data/mysql/backup
read only = no
# 指定认证用户(非系统用户)
auth users = rsyncuser
# 指定密码文件
secrets file = /etc/rsync.pas

像素化图像占位符

共享模块配置示例

这是一个更具体的模块配置示例,适用于实际部署环境。

uid = root
gid = root
use chroot = yes
read only = no
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
# 允许连接的客户端IP段
hosts allow = 10.99.xx.0/24 10.99.yy.0/24 10.99.zz.0/24
exclude = lost+found/
transfer logging = yes
timeout = 900

[app-image]
comment = app-nginx-images rsync
path = /mnt/gxyb/upload/pro
read only = no
auth users = root
secrets file = /etc/rsyncd_pass/rsyncd.pass

像素化图像占位符

创建 Rsync 专用用户

如果配置中指定了非 root 的 uidgid,则需确保该用户存在。创建一个不用于登录的系统用户是常见做法。

# 创建rsync用户,不创建家目录,并禁止登录
useradd -s /sbin/nologin rsync -M

检查rsync用户是否存在

生成 Rsync 认证文件

认证文件用于存储虚拟用户的账号和密码,必须设置严格的权限

# 创建认证文件,格式为“用户名:密码”
echo "rsyncuser:pas123" > /etc/rsync.pas

# 修改权限为600,确保只有所有者可读
chmod 600 /etc/rsync.pas

完成服务端配置后,需要重启服务使其生效。

# 建议配置文件也设置为600权限
chmod 600 /etc/rsyncd.conf

# 重启rsync服务
systemctl restart rsyncd

配置客户端

客户端也需要创建密码文件以实现非交互式认证。

# 创建认证文件(内容需与服务端secrets file中定义的用户密码一致)
echo "pas123" > /etc/rsync.pas
chmod 600 /etc/rsync.pas

客户端测试访问

在客户端,你可以通过以下命令测试与服务器的连接。

# 查看远程rsync服务器的模块列表(匿名访问)
rsync rsync://${rsync服务器ip}

查看远程rsync模块信息

# 查看需要认证的模块内容(会提示输入密码)
rsync rsync://${rsync用户名}@${rsync服务器ip}/${模块名}

带密码验证查看模块内容

非交互式访问与数据同步

为了实现自动化,可以使用 --password-file 参数指定密码文件。

# 非交互式查看共享目录
rsync --password-file=/etc/rsync.pas rsync://${rsync用户名}@${rsync服务器ip}/${模块名}
# 将本地目录同步到远程rsync服务器
rsync -avz --delete --password-file=/etc/rsync.pas /localdata/www/ ${rsync用户名}@${rsync服务器ip}::${模块名}

# 将远程rsync服务器模块同步到本地目录
rsync -avz --delete --password-file=/etc/rsync.pas ${rsync用户名}@${rsync服务器ip}::${模块名} /localdata/www/

以上是 Rsync 守护进程模式的基本用法。在实际的运维/DevOps工作中,除了这种方式,也常常结合 SSH 密钥认证进行文件同步,以实现更高程度的自动化。

常用参数详解

注意:部分参数在 Windows 版 rsync 中可能不支持。

选项 全称 说明
-a --archive 归档模式,递归传输并保持所有文件属性(等同于 -rlptgoD
-v --verbose 详细模式输出
-z --compress 传输时压缩文件数据
-r --recursive 递归处理子目录
--delete 删除接收端存在但发送端已不存在的文件,保持两端一致
-P 等价于 --partial --progress,断点续传并显示进度
-e ssh --rsh=ssh 通过 SSH 协议传输数据
-n --dry-run 模拟运行,不实际传输

保持权限与属性参数

选项 全称 说明
-p --perms 保持文件权限
-o --owner 保持文件属主信息(需 root 权限)
-g --group 保持文件属组信息
-t --times 保持文件修改时间
-l --links 保留软链接
-H --hard-links 保留硬链接关系

删除策略参数

选项 全称 说明
--delete-before 传输前删除目标端多余文件(默认)
--delete-during 传输中删除多余文件(内存效率高)
--delete-after 传输后删除多余文件(最安全)

提示:实现“镜像同步”(目标与源完全一致)推荐使用 rsync -av --delete --delete-after。首次使用 --delete 前,建议先加 -n 参数进行测试,以防误删重要数据。

Rsync 常用操作实战

1. 本机目录同步

这是最常用的场景,-a 参数可以完美保持文件的所有属性。

rsync -aP /源目录/ /目标目录/

2. 通过 SSH 同步到远程主机

这种方式利用现有的 网络/系统 SSH 通道,无需单独配置 rsync 服务端。

# 同步到远程
rsync -avzP local.file user@remote_host:/目标路径/

# 从远程同步到本地
rsync -avzP user@remote_host:/远程文件 /本地路径/

3. 镜像同步(删除目标端多余文件)

适用于需要两个目录完全一致的场景,如备份或内容分发。

rsync -avzP --delete -e ‘ssh -p 端口号‘ user@remote_host:/远程目录/ /本地目录/

高级技巧与应用

快速清空目录下的大量文件

与传统 rm 命令逐个删除相比,rsync 通过“空目录替换”机制,能极大提升删除大量文件的速度。

  1. 首先创建一个空目录:

    mkdir /tmp/empty
  2. 使用 rsync 清空目标目录(会丢失原目录权限):

    rsync -dv --delete-before /tmp/empty/ /要清空的目录/
  3. 清空目标目录并保持原目录权限:

    rsync --delete -dlptogHD /tmp/empty/ /要清空的目录/

    像素化图像占位符

同步 Yum 源到内网

在内网环境中搭建本地镜像源时非常有用。

rsync -avzP --delete --exclude=debug rsync://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/ /本地存储路径/

使用 xsync 脚本优化集群同步

对于需要将文件同步到多台主机(如 Hadoop 集群)的场景,可以借助 xsync 脚本进行批量操作。

首先,下载并配置脚本:

mkdir -p ~/bin
wget -P ~/bin/ https://raw.gitcode.com/liqiaofei/xsync/raw/main/xsync
chmod +x ~/bin/xsync

# 验证命令路径
which xsync

验证xsync路径

然后,编辑主机列表文件 ~/xsync.txt,将需要同步的主机名(需配置SSH免密登录)逐行写入。

master1
node1
node2

编辑xsync主机列表

xsync 脚本核心逻辑

脚本的核心是遍历主机列表,并使用 rsync 进行同步。确保所有目标主机都已安装 rsync

#!/usr/bin/env bash
# 依赖检查
which rsync >>/dev/null 2>&1 || yum install -y rsync || apt install -y rsync
ls ~/xsync.txt &>/dev/null || touch ~/xsync.txt

if [ $# -lt 1 ]; then
    echo “必需有一个参数”
    echo “使用示例: xsync 目录”
    exit
fi

for host in $(cat ~/xsync.txt); do
    echo =======当前主机: “$host”=================
    for file in “$@”; do
        if [ -e “$file” ]; then
            pdir=$(cd -P $(dirname “$file”) || exit; pwd)
            fname=$(basename “$file”)
            ssh “$host” “mkdir -p $pdir”
            # 核心同步命令
            rsync -aSHP “$pdir”/“$fname” “$host”:”$pdir”
        else
            echo “$file” 文件不存在!
        fi
    done
done

像素化图像占位符

使用调试模式运行脚本,可以更清楚地看到执行过程:

bash -xv ~/bin/xsync /usr/java/

通过本文的介绍,您应该已经掌握了 Rsync 从基础安装配置到高级集群同步的完整技能栈。无论是简单的本地备份,还是复杂的跨网络多主机文件同步,Rsync 都是一个可靠且高效的选择。




上一篇:JavaScript事件对象:详解鼠标坐标获取、兼容性处理与实战应用
下一篇:OC/C/JS 基础手册:iOS开发必备的内存管理、多线程与调试技巧
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-12 02:20 , Processed in 0.199020 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表