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/

相关推荐
emplace_back16 分钟前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
一禅(OneZen)4 小时前
「Windows/Mac OS」AIGC图片生成视频 ,webui + stable-diffusion环境部署教程
windows·stable diffusion
AirDroid_cn5 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
小龙在山东7 小时前
Python 包管理工具 uv
windows·python·uv
昏睡红猹7 小时前
我在厂里搞wine的日子
windows·wine
love530love10 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
1024小神15 小时前
tauri项目在windows上的c盘没有权限写入文件
c语言·开发语言·windows
程序视点1 天前
Window 10文件拷贝总是卡很久?快来试试这款小工具,榨干硬盘速度!
windows
wuk9981 天前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
lzb_kkk1 天前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节