rsync部署 附报错解决、配置详解及Windows脚本

文章目录

简介

Linux(CentOS8)为服务端,Windows为客户端

官网:https://rsync.samba.org

Windows端并用脚本控制备份

官网:https://www.itefix.net/cwrsync

文档

rsync服务端及客户端使用手册
详见该专栏内

rsync Windows端powershell脚本及bat批处理文件编写教程
详见该专栏内

版本

Linux端版本:3.1.3-12.el8

Windows端版本:cwrsync_6.3.1_x64_free

Linux(CentOS8)部署

  1. 安装
bash 复制代码
yum -y install rsync

# 检查是否安装成功,有参数提示输出则表示成功
rsync --version
  1. 创建所需文件夹
bash 复制代码
mkdir -p /var/run/rsync/
  1. 创建并编辑配置文件
bash 复制代码
touch /etc/rsync/rsyncd.conf
vim /etc/rsync/rsyncd.conf

rsyncd.conf内容,最后有详解

xml 复制代码
port = 873
uid = root
gid = root
use chroot = false
strict modes = true
max connections = 100
timeout = 1800
pid file = /var/run/rsync/rsyncd.pid
lock file = /var/run/rsync/rsync.lock
log file = /var/log/rsyncd.log
transfer logging = true
log format= "%o [%a] %m (%u) %f %l %b %c"hosts allow
reverse lookup = false
[test]
path = /home
ignore errors = true
read only = true
write only = false
list = true
hosts allow =*
hosts deny = 0.0.0.0/0.0.0.0
auth users = root
secrets file = /etc/rsync/rsyncd.secrets
  1. 创建并编辑密钥文件
bash 复制代码
touch /etc/rsync/rsyncd.secrets
vim /etc/rsync/rsyncd.secrets

密钥文件内容,用户:密码

ini 复制代码
root:pass1234
  1. 创建并编辑rsync程序控制脚本文件
bash 复制代码
touch /home/rsync_control.sh
vim /home/rsync_control.sh
# 添加可执行权限
chmod u+x /home/rsync_control.sh

控制脚本文件内容

shell 复制代码
#!/bin/bash

# rsync 守护进程的配置文件和PID文件位置
CONFIG_FILE="/etc/rsync/rsyncd.conf"
PID_FILE="/var/run/rsync/rsyncd.pid"

# 函数:启动 rsync 守护进程
function start_rsync() {
    if [ -f "$PID_FILE" ] && kill -0 `cat $PID_FILE` > /dev/null 2>&1; then
        echo "rsync is already running (PID=$(cat $PID_FILE))"
    else
        /usr/bin/rsync --daemon --config=$CONFIG_FILE
        if [ $? -eq 0 ]; then
            echo "rsync started successfully"
            if [ -f "$PID_FILE" ]; then
                echo "PID file exists, rsync might have started in background."
            else
                echo "Warning: PID file $PID_FILE does not exist, ensure rsync was started correctly."
            fi
        else
            echo "Failed to start rsync"
        fi
    fi
}

# 函数:停止 rsync 守护进程
function stop_rsync() {
    if [ -f "$PID_FILE" ] && kill -0 `cat $PID_FILE` > /dev/null 2>&1; then
        kill `cat $PID_FILE`
        if [ $? -eq 0 ]; then
            echo "rsync stopped successfully"
            rm -f $PID_FILE
        else
            echo "Failed to stop rsync"
        fi
    else
        echo "rsync is not running or PID file $PID_FILE does not exist"
    fi
}

# 解析命令行参数
case "$1" in
    start)
        start_rsync
        ;;
    stop)
        stop_rsync
        ;;
    restart)
        stop_rsync
        sleep 2
        start_rsync
        ;;
    status)
        if [ -f "$PID_FILE" ] && kill -0 `cat $PID_FILE` > /dev/null 2>&1; then
            echo "rsync is running (PID=$(cat $PID_FILE))"
        else
            echo "rsync is not running"
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac
  1. 运行 rsync
bash 复制代码
/home/rsync_control.sh start

Windows部署

  1. 下载

    https://www.itefix.net/cwrsync/client/downloads

  2. 创建文件夹并解压至内

    我这里放在,D:\rsync\

  3. 创建环境变量(可选)(变量值为你创建文件夹的路径)

    添加环境变量后可在任意目录内执行rsync命令

    变量名:SYNCHOME

    变量值:D:\rsync\

  4. 创建密钥文件rsyncd.password

    文件编码注意是ANSI

    此文件推荐存放在rsync内的bin目录内

    文件内容为服务端密钥文件内的密码,我这里是pass1234

  5. 系统变量Path内新增(可选)

    %SYNCHOME%\bin

  6. 验证

    打开cmd执行,软件介绍输出则为成功

    rsync --version

  7. 测试与服务端链接

    注意:

    在 Windows 系统下使用 cwRsync,在指定文件夹路径时,在真实目录前添加 /cygdrive/ 即可,比如 D:\cwRsync 可用 /cygdrive/D/cwRsync 表示。

    打开cmd执行,能够获取到服务端指定目录内的文件列表表示成功

    rsync --password-file=/cygdrive/d/sync/bin/rsyncd.password root@192.168.2.24::test

    --password-file为密钥文件
    root为服务端密钥文件内的用户
    IP地址为你的Linux服务器地址
    test为服务端配置文件内的模块名称

  8. 执行备份
    rsync_command=rsync -avz --delete --progress --password-file=/cygdrive/d/sync/bin/rsyncd.password root@192.168.2.24::test /cygdrive/d/backup/backup

test后的地址为备份文件存放地址

报错解决

Centos8 yum 官方源下线后无法使用问题

  • 现象
bash 复制代码
CentOS-8 - Base - mirrors.aliyun.com                                       299  B/s | 2.3 kB     00:07    
Errors during downloading metadata for repository 'base':
  - Status code: 404 for https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml (IP: 39.96.118.194)
  - Curl error (7): Couldn't connect to server for http://mirrors.aliyuncs.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml [Failed to connect to mirrors.aliyuncs.com port 80: Connection timed out]
  - Status code: 404 for http://mirrors.cloud.aliyuncs.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml (IP: 100.100.2.148)
Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
  • 解决
bash 复制代码
# 备份所有的.repo文件
mv /etc/yum.repos.d/ /etc/yum.repos.d_bak && mkdir /etc/yum.repos.d/

# 重新下载可用配置(二选一)
# 使用wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# 若未安装wget,可使用curl
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

# 运行 dnf makecache 生成缓存
dnf makecache

rsyncd.conf配置详解

官网解释:https://download.samba.org/pub/rsync/rsyncd.conf.5

ini 复制代码
# 默认端口
port=8730
# 服务运行时的用户
uid=root
# 服务运行时的用户组
gid=root
# rsync daemon 在传输前是否切换到指定的 path 目录下,并将其监禁在内,用于增加传输的安全性
use chroot=no
# 为true:rsync daemon进程运行时使用的用户ID外,其他任何用户ID都不能读取rsyncd.secrets
strict modes = true
# 指定最大连接数量,0表示没有限制
max connections=100
# 确保rsync服务器不会永远等待一个前渍的客户端,0表示永远等待
timeout = 1800
# 指定rsync daemon的pid文件
pid file = /var/run/rsync/rsyncd.pid
# 指定锁文件
lock file = /var/run/rsync/rsync.lock
# 指定rsync的日志文件,而不把日志发送给syslog
log file = /var/log/rsyncd.log
# 启用按文件记录下载和上传
transfer logging = true
# 定义日志格式
log format= "%o [%a] %m (%u) %f %l %b %c"hosts allow
# 控制rsync daemon是否对客户端的 IP 地址执行反向查找以确定其主机名,默认启用,禁用后将使用UNDETERMINED
reverse lookup = false

# 要同步的模块(可以有多个),这里一般以项目名命名
[test]
# 同步的目标文件夹
path = /home
# 该参数告诉 rsyncd 在决定是否运行传输的删除阶段时忽略守护进程上的 I/O 错误
ignore errors = true
# 该参数决定客户端是否能够上传文件
read only = true
# 该参数决定客户端是否能够下载文件
write only = false
# 该参数决定当客户端请求可用模块列表时是否列出该模块
list = true
# 指定允许连接到该模块的ip,多个1p用空格隔开或者设置区间
单ip:hosts allow =192.168.1.1;ip区间:192.168.1.0/24
hosts allow =*
# 指定不允许连接到该模块的ip或区间
hosts deny = 0.0.0.0/0.0.0.0
# 进行验证时的用户名,必须是系统存在的用户
auth users = root 
# 连接用户时的密码
secrets file = /etc/rsync/rsyncd.secrets

参考:

https://blog.csdn.net/cjiankai/article/details/131000345

https://blog.51cto.com/u_16099248/10410599

https://xiashuo.xyz/posts/devops/ssh_ssl/rsync_from_windows_to_linux/

相关推荐
怪兽软家3 小时前
DaVinci Resolve/达芬奇 20安装教程及下载
windows·经验分享·生活
chao1898443 小时前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
Hello_Embed4 小时前
Windows 安装 Claude Code 并接入 模型
windows·笔记·ai编程
Muyuan19984 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
AxureMost6 小时前
4DDiG DLL Fixe 1.0.8.2 系统DLL修复工具
windows
怣疯knight8 小时前
Windows不安装 Android Studio如何打包安卓软件
android·windows·android studio
空中海8 小时前
02. 静态逆向、Manifest 分析与 Smali 重打包
服务器·网络·windows
一拳一个娘娘腔9 小时前
告别图形化界面:基于CLI的Windows系统入侵排查与防御实战手册
windows·安全
疋瓞9 小时前
批处理_基础补充、文件和文件夹处理_02
windows
nudt_qxx10 小时前
Ubuntu 24.04/26.04 与 Windows 10/11 双系统时间不同步终极解决方案
windows·stm32·ubuntu