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/

相关推荐
sukalot27 分钟前
windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(二)
windows
喜欢打篮球的普通人1 小时前
2024 Rust现代实用教程:1.3获取rust的库国内源以及windows下的操作
开发语言·windows·rust
sukalot2 小时前
windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(四)
windows·单片机·嵌入式硬件
微雨盈萍cbb4 小时前
Windows 上更新OpenSSL 到 1.1.1
windows
askah66444 小时前
无法启动此程序win10玩游戏找不到d3dx9_43.dll缺失的五种常用有效解决方法
windows·游戏·电脑·dll丢失·1024程序员节
cpp_learners16 小时前
Windows环境 ffmpeg 命令使用介绍
windows·ffmpeg·ffmpeg命令
lqqjuly1 天前
Windows 11在conda虚拟环境中安装cuda、cudann
pytorch·windows·python·算法·conda
ChenglimK1 天前
使用virtualenv导入ssl模块找不到指定的模块
windows·virtualenv·ssl
感谢地心引力1 天前
【Windows】电脑端口明明没有进程占用但显示端口被占用(动态端口)
windows