windows安装Rsync把文件同步到Linux服务器,安心备份数据
先简单介绍一下rsync, rsync 是一个开源的、强大的命令行工具,主要用于 快速、灵活地进行文件和目录的同步和备份, 使用rsync,可以做到增量同步备份、本地或远程同步、单向同步或双向同步等。笔者这次主要是使用rsync进行文件的单向异机增量同步备份文件。
首先在windows中下载和安装cwRsync客户端。目前最新版本为6.4.2,下载时要右键单击下载链接,然后点击“另存为”
https://www.itefix.net/cwrsync/client/downloads
下载后解压至D盘根目录并修改一下名称
为了后面方便在命令行中使用 Rsync,需要将cwrsync目录的 bin 子目录添加到系统环境变量 PATH 中:
配置好环境变量后,使用快捷键 “win+R” 打开运行窗口执行“cmd”打开cmd命令程序,执行 “rsync –version” 命令,就可以查看到rsync的版本信息。
以上步骤就完成了windows的rsync客户端的安装,下面在linux主机中部署rsync服务端。
笔者的Linux主机安装的是Rocky linux 9.4 发行版
-
开始安装Rsync,执行如下命令:
dnf install rsync -y
然后创建一个 Rsync 同步目录,并将其所有子目录和文件的所有者和所属组更改为 nobody
mkdir /rsync_data
chown -R nobody:nobody /rsync_data -
配置 Rsync 守护进程
(1) 创建 Rsync 配置文件
Rsync 的配置文件默认路径为 /etc/rsyncd.conf,创建并编辑它:
nano /etc/rsyncd.conf
修改成:
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
[backup]
path = /rsync_data
comment = Backup Directory
read only = no
auth users = backupuser
secrets file = /etc/rsyncd.secrets
其中”[backup]“是定义了一个名为 “backup” 的模块。这个模块允许客户端通过 rsync 协议访问指定的文件路径。
(2) 配置身份验证
创建连接rsync的认证文件 /etc/rsyncd.secrets,在文件中指定用户和密码:
nano /etc/rsyncd.secrets
文件内容如:
backupuser:123abc
修改文件权限,确保只有 root 能读取:
chmod 600 /etc/rsyncd.secrets
- 启动 Rsync 服务:
systemctl enable rsyncd
systemctl start rsyncd
如果启动 Rsync 服务时出现如下错误提示,一般是因为rsyncd 服务文件(rsyncd.service)没有随包一起安装,需要需要手动创建或安装相应的服务文件。
[root@localhost /]# systemctl enable rsyncd
Failed to enable unit: Unit file rsyncd.service does not exist.
[root@localhost /]# systemctl start rsyncd
Failed to start rsyncd.service: Unit rsyncd.service not found.
解决方法如下:
(1) 创建 rsyncd.service 文件
nano /usr/lib/systemd/system/rsyncd.service
在文件中添加以下内容:
[Unit]
Description=Rsync Daemon
After=network.target
[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=root
Group=root
[Install]
WantedBy=multi-user.target
(2) 重新加载 systemd 配置
systemctl daemon-reload
(3)运行Rsync 服务并设置开机自动启动
systemctl enable rsyncd
systemctl start rsyncd
这样应该就能解决上面启动rsync服务时的错误。
- 执行如下命令查看rsync服务的状态:
systemctl status rsyncd
如果打开了防火墙的,需要放行873端口:
firewall-cmd –permanent –add-port=873/tcp
firewall-cmd –reload
到此,rsync服务端口也安装配置完成了。
回到客户端windows的CMD命令行程序,执行如下命令按提示输入上面配置的rsync连接密码,就可以同步文件:
rsync -avz –progress /cygdrive/d/vscode [email protected]::backup
在windows的cwRsync 中,文件路径以 /cygdrive/ 开头,比如要备份D盘目录下的vscode文件夹,“D:\vscode”需转换成“/cygdrive/d/vscode”来表示。”backupuser“是上面配置身份验证文件中的用户,“192.168.1.49"是rsync服务端的ip地址,”backup“就是上面服务端定义的模块名称。
如果你不想每次输入那一行同步命令,可以做一个.bat批处理文件:
@echo off
setlocal enabledelayedexpansion
:: 设置密码环境变量
set RSYNC_PASSWORD=123abc
:: 替换以下路径为实际 rsync.exe 的路径
"D:\cwrsync\bin\rsync.exe" -avz --progress /cygdrive/d/vscode [email protected]::backup > D:\rsync\rsync_test.log 2>&1
:: 检查日志是否生成
if exist rsync.log (
echo Log File Created Successfully
type rsync.log
) else (
echo Log File Not Found. Check rsync execution.
)
:: 自动退出
exit
然后另存为 rsync.bat 文件,双击这个 .bat 文件,就能执行同步任务了。我们还可以使用任务计划程序设置自动执行这个.bat文件,以达到按设定的计划来执行同步备份,不需要每次手动去执行,步骤如下 :
打开任务计划程序: 按下 Win + S,搜索 任务计划程序,然后打开任务计划程序,在右侧点击 创建基本任务。
输入任务名称(例如 “Rsync Backup”)
设置触发器:
选择任务触发器(例如每天运行),然后设置具体的运行时间
设置操作:选择 启动程序,点击 下一步
在 程序或脚本 中选择刚刚创建的批处理文件 D:\rsync\rsync.bat
完成任务
点击 完成,任务创建成功。
测试任务计划
在任务计划程序中找到刚创建的任务。
右键点击任务,选择 运行。
检查同步任务是否按预期运行。
需要注意的是,如果连接rsync服务端出现类似权限错误的提示,需检查目录权限、用户和认证文件等。
笔者的Rocky linux 9.4 就遇到SELinux限制 Rsync 的访问导致客户端同步不了,可以执行 sestatus 看看SELinux,如果是开启状态,可以执行 setenforce 0 临时关闭SELinux试试,或者通过调整 SELinux 布尔值来放宽对 rsync 的限制,执行:
setsebool -P rsync_full_access 1
这样应该就能解决SELinux限制rsync权限的问题了
如果要还原数据,先在windows中新建一个文件夹,比如在D盘下建新一个restore文件夹,然后在windows的CMD命令程序中执行如下命令:
rsync -avz [email protected]::backup /cygdrive/d/restore