rsync实现文件服务器间文件同步

2023-11-15

rsync介绍

rsync命令工具可以实现服务器间的文件同步(全量或者增量,比如使用–size-only来检查源端文件和目标端文件大小是否一致决定是否需要同步),由此同步的功能扩展,可以实现本机不同目录文件拷贝、快速删除海量文件等功能。但要注意,rsync不能实现远程服务器1和远程服务器2之间的文件同步,但是scp可以实现此功能。

rsync有几种工作模式

不管哪种模式,源文件都是在前面,目标文件在后面。
1)本地模式
语法:rsync [OPTION]… SRC [SRC]… DEST
如:rsync -av /tmp/test /data/test_bak/
2)远程shell模式(使用一个单冒号 :)
原理:启动一个shell程序(如rsh,ssh)
语法:
push模式(将本地文件push到远端):rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
pull模式(从远端pull文件到本地):rsync [OPTION]… [USER@]HOST:SRC [DEST]
如:
rsync -av -e ‘ssh -p 18822’ /tmp/test1 10.144.54.186:/tmp/ #指定使用18822端口,因为有生产服务器使用的不是默认是22端口
3)rsync daemon模式(使用两个单冒号 ::)
原理:本地主机通过网络套接字连接远程主机上的rsync daemon
push模式:rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
rsync [OPTION]… SRC rsync://[USER@]HOST[:PORT]/[DEST]
如:
pull模式:rsync [OPTION]… [USER@]HOST::SRC [DEST]
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
如:

rsync -av --delete --progress --password-file=/etc/rsync_passwd rsync_man@10.145.79.232::share_data/test1_dir /home/service/app

连接RSYNC DAEMON

rsync也可以不使用远程shell作为传输方式。这情况看下,将直接连接远程RSYNC守护进程,一般使
用的是TCP的873端口。(显然,这要求远程的RSYNC守护进程必须是已运行的,见下文"启动RSYNC服务以接受连接请求")
这种方式的rsync使用方式和远程shell方式一样,除了:
o 需要使用双冒号"::“分隔主机名和路径,或者使用rsync://的URL格式。
o “path"部分的第一个词语是一个模块名(译者注:如hostname::modname/file)。
o 远程RSYNC守护进程可能会输出你连接它的日期时间。
o 如果没有指定远程rsync服务的路径名,将列出rsync服务主机上可访问的路径。
o 如果没有指定本地目标地址,将列出远程rsync服务主机上指定的文件。
o 必须不能指定”–rsh”("-e")选项。
以下是拷贝远程模块名为"src"中的所有文件示例:
rsync -av host::src /dest
远程daemon上的某些模块可能需要身份验证。如果是这样,在连接时将会被询问输入密码。如果想要
避免被询问,可以通过设置环境变量RSYNC_PASSWORD的值为你要使用的密码,或者使用选项
“–password-file”。这非常适用于脚本中。
警告:在某些系统上,环境变量是对所有用户可见的,此时建议使用"–password-file"选项。
你可以通过web代理(web proxy)的方式与rsync daemon建立连接,只需设置环境变量RSYNC_PROXY的
值为hostname:port指向你的web代理。但要注意,web代理的配置必须得支持与873端口的代理连接。
你还可以使用代理程序与rsync daemon建立连接,只需设置环境变量RSYNC_CONNECT_PROG的值为你想
要运行的命令来代替建立套接字连接。环境变量的值中可能会包含"%H",它代表rsync命令中所指定
的主机名(因此如果想在值中包含一个"%“字符,需要使用”%%")。例如:
export RSYNC_CONNECT_PROG=‘ssh proxyhost nc %H 873’
rsync -av targethost1::module/src/ /dest/
rsync -av rsync:: //targethost2/module/src/ /dest/ (双冒号后面没有空格)
上面的命令中使用ssh在proxyhost上运行了nc命令,它将会转发所有数据到目标主机(%H)的873端口。

启动RSYNC服务以接受连接请求

要连接到一个rsync daemon,远程系统上的rsync daemon必须已经运行(或者像inetd一样,已经配置
了当特殊端口上有连接时会派生出rsync daemon)。关于如何启动一个能处理从套接字进来的连接的
daemon的完整信息,请看rsyncd.conf(5),这是rsync daemon的配置文件,它包含如何运行daemon的
非常详细的信息(包括独立模式(stand-alone)和inetd格式的配置)
如果你使用的是某种远程shell传输方式,则没有手动启动rsync daemon的必要。

使用rsync daemon模式的实例

本实例采取从服务端pull的方式拉取文件到客户端(服务端:10.90.122.231,客户端:10.90.19.243)
1.服务端配置

1.创建配置文件
mkdir -p /etc/rsync
cd /etc/rsync
touch rsyncd.conf     #必须
touch rsyncd.motd      #可选
touch rsyncd.secrets  #必须
chmod 600 rsyncd.secrets
chown root:root rsyncd.secrets  #用户必须和启动服务的用户保持一致


2.rsyncd.conf的配置:
## rsyncd.conf 文件的配置
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证www用户对文件有读取的权限;如果是从客户端=>服务端,要保证www对文件有写权限。
uid = service
gid = service
# 允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下,chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
use chroot = yes
# 只读
read only = no
# 只写
write only = no
# 设定白名单,可以指定IP段(172.18.50.1/255.255.255.0),各个Ip段用空格分开
hosts allow = *
hosts deny = *
# 允许的客户端最大连接数
max connections = 4
# 欢迎文件的路径,非必须
motd file = /etc/rsync/rsyncd.motd
# pid文件路径
pid file = /etc/rsync/rsyncd.pid
# 记录传输文件日志
transfer logging = yes
# 日志文件格式
log format = %t %a %m %f %b
# 指定日志文件
log file = /var/log/rsync.log
# 剔除某些文件或目录,不同步
exclude = lost+found/
# 设置超时时间
timeout = 900
ignore nonreadable = yes
# 设置不需要压缩的文件
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# 模块,可以配置多个,使用如: rsync_man@server_address::share_data
[share_data]
# 模块的根目录,同步目录,要注意权限
path = /tmp/zp/
# 是否允许列出模块内容
list = no
# 忽略错误
ignore errors
# 添加注释
comment = 
# 模块验证的用户名称,可使用空格或者逗号隔开多个用户名
auth users = rsync_man
# 模块验证密码文件 可放在全局配置里
secrets file = /etc/rsync/rsyncd.secrets
# 剔除某些文件或目录,不同步
exclude = lost+found/

3.rsyncd.motd 配置(欢迎提示语)非必须
++++++++++++++++++
sate zp : rsync start
++++++++++++++++++


4.rsyncd.secrets的配置
rsync_man:oppo123   #rsync_man 是虚拟的同步用户,oppo123  要与客户端保持一致


5.启动rsync服务
rsync --daemon --config=/etc/rsync/rsyncd.conf

2.客户端配置

配置免密(非必须,如果不配置,会提示输入密码)
 echo "oppo123" > /etc/rsync_passwd   #路径随意,保证启动同步的用户有权限读取即可
 chmod 600 /etc/rsync_passwd

3.客户端正式pull 来同步

rsync -av --delete --progress --password-file=/etc/rsync_passwd rsync_man@10.90.122.231::share_data /tmp/zp/

遇到的报错

1.file has vanished: "/crx-quickstart/repository/repository/datastore/tmp/upload2358902225285307139.tmp" (in server_data)
A: 这个报错表示,rsync同步开始时标记这个文件需要同步,真正去同步的时候,发现这个文件不存在了,可能是这个过程中,该文件被源端删除了。遇到这个错误,不影响rsync的备份结果,只不过rsync的执行码不会是0 ,而是23或者24。

参考文档

rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html
rsync配置选项介绍(中文):https://www.cnblogs.com/f-ck-need-u/p/7221713.html
rsync介绍:https://blog.csdn.net/qq_32706349/article/details/91451053
rsync常见错误:http://blog.sina.com.cn/s/blog_4da051a60101h8am.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rsync实现文件服务器间文件同步 的相关文章

  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 将密钥对添加到现有 EC2 实例

    我被给予AWS控制台访问正在运行 2 个实例的帐户 但我无法关闭 在生产中 但是 我想获得对这些实例的 SSH 访问权限 是否可以创建一个新的密钥对并将其应用到实例 以便我可以通过 SSH 访问 获取现有的pem当前无法选择创建实例所用的密
  • proc_open() 失败并显示“权限被拒绝”

    我正在尝试使用proc open 执行程序并打印结果 但是 我不断收到 许可被拒绝 的消息 已将脚本和可执行文件的 chmod 设置为 0777 但无济于事 ini get safe mode 是假的 可能出什么问题了 我正在使用 Cent
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf

随机推荐

  • C++项目实战-makefile

    makefile简介 一个工程中的源文件不计其数 一个项目有有很多的文件 现在的项目基本都是按模块进行划分的 而这些模块存放在若干目录中 makefile中定义了一系列的规则 这些规则定义了一系列如何编译程序的操作 比如哪些文件需要编译 哪
  • 如何使用git send-email

    How to Use git send email 建议使用git send email发送补丁 更多关于发送补丁的信息请参考Community 本文介绍如何使用git send email 安装 send email 你的git可能已经安
  • PLSQL Developer设置

    PLSQL Developer设置 解决用PLSQL Developer查询时数据大小超过100M的提示问题 Tools gt Preferences gt SQL Window Maximum Result Set size 0 is u
  • error 1962

    今天电脑出了一点小毛病 报错 error 1962 No operation system found 由于很多的资料还有项目在里边存着 而且只有一个c盘 这可怎么解决 对于一个英文不好的中国人来说 这可是个麻烦事 静下心 仔细琢磨还是能够
  • C++11新特性

    1 列表初始化 2 变量类型推导 3 范围for循环 4 final与override 5 智能指针 6 新增加容器 静态数组array forward list以及unordered系列 7 默认成员函数控制 8 右值引用 9 lambd
  • gcc -lpthread

    转自 http www cnblogs com suntp p 6473751 html 如果用gcc编译使用了POSIX thread的程序时 通常需要加额外的选项 以便使用thread safe的库及头文件 一些老的书里说直接增加链接选
  • 《机器学习的随机矩阵方法》

    机器学习的随机矩阵方法 作者 Romain Couillet 和Zhenyu Liao 出版商 剑桥大学出版社 第 1 版 2022 年 10 月 31 日 语言 英语 精装版 408 页 ISBN 10 1009123238 ISBN 1
  • chrome浏览器https证书不安全页面打开设置

    访问https协议的页面浏览器都会加载此页面所需要的证书 在证书不被信任 即证书不是有正规CA机构颁发的话 通常是由自己通过证书生成工具或命令生成的 chrome浏览器会提示页面不安全而不会直接访问该页面 此时有两种选择 选择安全方式 不再
  • 面试题创作0005,请说明Linux 和 AI的关系(联系和区别)

    请说明Linux 和 AI的关系 联系和区别 可以在AI的业务应用 平台服务提供 平台设备商 集成电路开发等各个跟AI相关的行业来寻找联系和区别
  • MATLAB——矩阵与阵列

    变量及操作 变量命名规则 赋值语句 运算符和表达式 矩阵产生与表示 直接输入法创建矩阵 向量法创建矩阵 函数法创建矩阵 特殊矩阵 矩阵元素的引用 矩阵单个元素与行列提取 向量标识方式 矩阵基本操作 矩阵提取子块 合并短阵 转置与展开 提取子
  • Lion闭源大语言模型的对抗蒸馏框架实践

    Lion闭源大语言模型的对抗蒸馏框架实践 概述 对抗蒸馏框架概述 我们基于高级闭源LLM的基础上提炼一个学生LLM 该LLM具有三个角色 教师 裁判和生成器 有三个迭代阶段 模仿阶段 对于一组指令 将学生的响应与老师的响应对齐 区分阶段 识
  • ESP8266-NodeMCU(一)

    ESP8266 NodeMCU开发板的驱动有CH340和CP210等等 本文使用ESP8266 NodeMCU CH340驱动版本 一 开发板详解 NodeMCU是一个开源的IoT物联网硬件开发板 由于它支持WIFI功能且使用方法十分类似A
  • RAM处理器的8种寻址方式

    什么是寻址 寻址是指找到存储数据或指令的地址 然后读取其中的内容 寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址的方式 是确定本条指令的数据地址以及下一条要执行的指令地址的方法 ARM处理器采用的RISC架构 CPU本身是不能直接
  • MyBatis resultMap collection标签 返回基本类型集合 如:List<Long> List<String> List<Integer>等

    class xxDTO private Long id private Set
  • vc 判断某个盘符是否为移动硬盘盘符

    在使用GetDriveType获取磁盘类型时 一般小容量的U盘直接返回DRIVE REMOVABLE 倒是不用再进行下一步的判断 而大容量U盘和移动硬盘的盘符返回值和本地硬盘盘符返回值都是DRIVE FIXED 需要再进行判断 如果是IDE
  • 【paddlepaddle】一键人物抠图

    效果 环境准备 win11 python3 8 pip install paddlepaddle i https pypi tuna tsinghua edu cn simple pip install paddlehub i https
  • animation 动画的定义和使用

    keyframes 定义动画 keyframes myname 0 50 100 调用动画 div animation name myfirst animation duration 5s animation timing function
  • Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

    Unity 开发人员的城堡游戏引擎概述 一 简介 2 Unity相当于什么GameObject 3 如何设计一个由多种资产 生物等组成的关卡 4 在哪里放置特定角色的代码 例如生物 物品 Unity 中 向 GameObject 添加 Mo
  • U盘启动盘制作(步骤详细)

    U盘启动盘制作 在制作启动盘之前我们需要先准备一个8G以上的U盘 和一台能上网的电脑 一 下载系统镜像 根据自己需要的系统版本去下载官方的镜像文件 记得要下载纯净的镜像 否则在后续安装好系统后会出现捆绑的现象 可以直接去下面这个网站下载 下
  • rsync实现文件服务器间文件同步

    rsync介绍 rsync命令工具可以实现服务器间的文件同步 全量或者增量 比如使用 size only来检查源端文件和目标端文件大小是否一致决定是否需要同步 由此同步的功能扩展 可以实现本机不同目录文件拷贝 快速删除海量文件等功能 但要注