Rsync数据同步服务

ssh复习

image-20241231173810385

为什么学rsync

Rsync是一个非常实用的工具,学习它有以下诸多重要原因:

一、高效的数据备份功能

  1. 节省时间和带宽
    • Rsync采用了一种称为“增量传输”的算法。它只会传输文件中已更改的部分,而不是整个文件。例如,如果你有一个10GB的文件,其中只有1MB的数据发生了变化,rsync就只会传输这1MB的数据,而不是重新传输整个10GB的文件。这在备份大量数据或者通过网络传输文件时,可以极大地节省时间和网络带宽。
    • 假设你每天都要备份一个包含数千个文件的数据库目录,这些文件总大小达到几百GB。如果使用普通的复制工具,每次都要复制整个目录,这会消耗大量的时间和存储空间。而rsync可以快速识别出哪些文件发生了变化,只传输这些变化的部分,大大提高了备份效率。
  2. 保持数据一致性

    • 当进行数据备份时,rsync可以确保备份的数据与源数据在内容和属性上保持高度一致。它不仅可以复制文件的内容,还可以复制文件的权限、所有者、时间戳等属性。
    • 比如,在一个多用户的服务器环境中,文件的权限设置非常重要。Rsync在备份文件时,可以准确地复制文件的权限设置,这样在恢复数据时,文件的权限依然能够符合系统的安全和访问要求。
  3. 灵活的备份策略支持

    • Rsync可以很方便地设置备份的目录、文件列表,并且可以结合脚本实现定时备份等复杂的备份策略。你可以通过简单的命令行参数或者配置文件来指定要备份的源和目标路径,以及备份的模式(如镜像备份、增量备份等)。
    • 例如,你可以编写一个脚本来让rsync在每天凌晨2点自动备份公司的重要文件服务器到一个远程存储设备上,并且每周进行一次完整的镜像备份,每天进行增量备份,这样可以有效地保护数据,同时又不会过度占用系统资源。

二、远程数据同步优势

  1. 跨网络高效同步
    • Rsync在网络环境下的数据同步功能非常强大。它可以通过SSH等安全协议在不同的主机之间传输数据,保证数据传输的安全性。而且它对网络带宽的高效利用,使得即使在带宽有限的情况下,也能顺利完成数据同步任务。
    • 比如,你在本地办公室的服务器上有一些重要的项目文件,需要同步到位于云端的数据中心服务器上。Rsync可以通过网络连接这两台服务器,并且只传输文件的变化部分,快速高效地完成同步操作。
  2. 支持多种网络架构
    • 无论是在局域网(LAN)还是广域网(WAN)环境中,rsync都能很好地工作。在局域网中,它可以利用高速的内部网络实现快速的数据同步,如在企业内部的文件服务器之间同步文件。在广域网环境下,它可以适应较低的带宽和可能不稳定的网络连接,通过其增量传输的特性,确保数据能够尽可能完整地同步。
    • 例如,一家跨国公司需要在其位于不同国家的分支机构服务器之间同步销售数据,rsync可以根据网络状况,有效地将数据从一个服务器传输到另一个服务器,而且在网络出现短暂中断后,还可以继续从上次中断的地方恢复传输。

三、在系统管理和维护中的价值

  1. 软件部署和更新
    • Rsync可以用于将软件包或者更新文件快速、准确地分发到多个服务器上。在大规模的服务器集群环境中,管理员可以使用rsync将最新的软件版本或者配置文件分发到各个服务器,只需要传输更新的部分,减少了传输时间和服务器的更新压力。
    • 例如,在一个拥有上百台Web服务器的数据中心,当需要更新网站的应用程序代码时,rsync可以将新的代码文件快速分发到各个服务器上,而且如果代码文件只是部分修改,它只会传输修改的部分,提高了更新效率。
  2. 服务器镜像和克隆
    • 它可以用于创建服务器的镜像副本或者克隆服务器。通过rsync,可以将一个服务器上的完整系统(包括操作系统、应用程序、配置文件等)复制到另一个服务器上,方便服务器的快速部署和灾难恢复。
    • 比如,在数据中心需要快速扩展服务器数量以应对业务增长时,可以使用rsync将一个已经配置好的模板服务器的内容复制到新的服务器上,快速搭建出功能相同的服务器。

什么是rsync

Rsync是一款功能强大的文件同步和数据传输工具。

一、基本定义

  • 它可以在本地计算机的不同目录之间、本地计算机与远程计算机之间,或者是远程计算机与远程计算机之间进行文件和目录的同步。简单来说,它能够让文件在不同位置保持一致,并且能够高效地传输这些文件。

二、工作原理

  • 核心算法:Rsync的核心是它的增量传输算法。当同步文件时,它会将源文件和目标文件分成若干个小的数据块,并且计算每个数据块的校验和(通常是固定长度的数字签名)。然后通过比较源文件和目标文件的数据块校验和来确定文件之间的差异。只有那些不同的数据块才会被传输,这就避免了传输整个文件,大大节省了时间和带宽。
  • 举例说明:假设你有一个1GB的文件,之前已经同步过一次。现在这个文件只有最后的10MB内容发生了改变。Rsync会将这个文件分割成很多小的数据块,比如每个数据块大小为1MB。它会计算每个数据块的校验和,然后对比源文件和目标文件的数据块校验和。发现只有最后的10个数据块(共10MB)的校验和不同,于是就只传输这10MB的数据来更新目标文件。

三、主要特点

  • 保持文件属性同步:Rsync不仅可以同步文件的内容,还能够同步文件的各种属性。包括文件的权限(如可读、可写、可执行权限)、所有者(文件所属的用户和组)、时间戳(文件的创建时间、修改时间、访问时间)等。例如,在服务器之间同步配置文件时,它可以确保目标文件的权限和所有者等属性与源文件相同,这样可以保证文件在目标系统中能够被正确地访问和使用。
  • 支持多种传输方式
    • 本地传输:可以在本地计算机的不同目录之间传输文件,比如将文件从一个硬盘分区复制到另一个硬盘分区,命令格式如rsync -av /source/directory/ /destination/directory/,其中-av是常用的参数选项,-a表示归档模式(可以保留文件属性等),-v表示详细输出(会显示传输的文件信息)。
    • 远程传输:可以通过SSH(Secure Shell)协议在远程计算机之间传输文件。这使得在不同服务器之间进行安全的数据传输成为可能。例如,从本地服务器传输文件到远程服务器的命令格式可能是rsync -av -e ssh /source/directory/ user@remote_host:/destination/directory/,这里-e ssh表示使用SSH协议进行传输,user@remote_host是远程服务器的用户名和主机名。
  • 灵活的过滤机制:Rsync提供了灵活的文件和目录过滤功能。你可以指定哪些文件或目录需要同步,哪些不需要。例如,你可以通过设置规则,只同步特定扩展名的文件(如只同步.txt.pdf文件),或者排除某些目录(如排除临时文件目录/tmp)。这对于只同步需要的内容,避免传输不必要的数据非常有用。

怎么学rsync

以下是学习rsync的详细步骤:

一、掌握基础知识

  1. 熟悉命令行基础
    • Rsync是一个命令行工具,所以需要对基本的命令行操作有一定的了解。例如,要知道如何在终端中切换目录(使用cd命令)、查看文件列表(使用ls命令)等。这是使用rsync的前提,因为你需要在命令行中输入rsync命令并指定相关参数。
    • 比如,在Linux系统中,打开终端后,你可以输入cd /home/user/Documents来进入“Documents”目录,通过ls -l命令可以详细查看该目录下的文件和目录信息。
  2. 了解文件和目录概念

    • 清楚文件和目录的区别,以及文件路径的表示方法。Rsync操作的对象主要是文件和目录,你需要理解绝对路径(如/usr/local/bin)和相对路径(如../config)的概念。
    • 例如,如果你在/home/user目录下,要指定/home/user/Documents/file.txt这个文件,可以使用绝对路径;如果当前目录是/home/user/Documents,要指定同一个文件可以使用相对路径file.txt或者./file.txt
  3. 学习文件权限和属性知识

    • 由于rsync能够同步文件的权限和属性,所以要掌握文件权限(如读、写、执行权限,用数字表示为4、2、1)、所有者、所属组和时间戳等概念。
    • 例如,文件权限“755”表示所有者有读、写、执行权限(4 + 2+ 1 = 7),所属组和其他用户有读和执行权限(4+1 = 5)。理解这些有助于你在使用rsync时更好地控制文件同步后的状态。

二、学习Rsync命令语法

  1. 基本命令格式
    • 学习rsync的基本命令格式:rsync [options] source destination。其中,options是各种参数选项,用于控制rsync的行为,如-a(归档模式,用于递归同步目录并保留文件属性)、-v(详细输出,显示同步的过程信息)、-r(递归同步目录)等;source是要同步的源文件或目录;destination是目标文件或目录。
    • 例如,rsync -av /home/user/source_dir /home/user/destination_dir会以归档模式并显示详细信息,将source_dir目录下的所有内容同步到destination_dir目录中。
  2. 参数选项学习
    • 深入学习常用参数选项:
      • -a(归档模式):这是一个非常常用的选项,它等效于-rlptgoD。其中-r是递归同步目录;-l是保留符号链接;-p是保留文件权限;-t是保留文件时间戳;-g是保留文件所属组;-o是保留文件所有者;-D是同步设备文件和特殊文件。
      • -z(压缩传输):在传输过程中对数据进行压缩,可以提高传输效率,特别是在网络传输时。例如,rsync -azv /local/data user@remote_host:/remote/data会在将本地/local/data传输到远程主机的/remote/data时进行压缩传输,并显示详细信息。
      • -e(指定远程shell):用于指定远程连接所使用的shell。最常见的是通过SSH进行远程传输,格式为-e ssh。比如,rsync -av -e ssh /local/files user@remote_host:/remote/files
  3. 本地和远程同步的不同语法
    • 本地同步:在本地计算机不同目录之间同步时,源和目标路径都使用本地文件系统路径。例如,rsync -r /home/user/source_folder /home/user/destination_folder
    • 远程同步:对于远程同步,语法稍微复杂一些。如果从本地同步到远程,格式通常是rsync [options] source user@remote_host:destination;如果从远程同步到本地,格式是rsync [options] user@remote_host:source destination。例如,从本地同步文件到远程服务器,rsync -av /local/file user@remote_host:/remote/file;从远程服务器同步文件到本地,rsync -av user@remote_host:/remote/file /local/file

三、实践操作

  1. 简单的本地文件同步练习
    • 在本地计算机上创建两个目录,如source_dirdestination_dir。在source_dir中放入一些文件和子目录,然后使用rsync命令将source_dir的内容同步到destination_dir。尝试使用不同的参数选项,如-a-r-v等,观察同步后的结果和输出信息。
    • 例如,先创建目录mkdir source_dir destination_dir,在source_dir中添加文件touch source_dir/file1.txt,然后执行rsync -av source_dir destination_dir,查看destination_dir中的内容是否与source_dir一致,并且观察终端输出的同步信息。
  2. 远程同步实验(需要有远程服务器访问权限)
    • 如果有条件,找两台可以互相访问的计算机(可以是本地局域网内的两台计算机,或者是有公网IP的服务器和本地计算机)。在两台计算机上分别安装rsync(如果需要的话),并配置好SSH连接(用于远程传输安全)。然后尝试从本地计算机向远程计算机同步文件,以及从远程计算机向本地计算机同步文件。
    • 例如,在本地计算机上有一个目录/local_data,远程计算机的用户名是remote_user,IP地址是remote_ip,要将本地数据同步到远程计算机的/remote_data目录下,可使用命令rsync -av -e ssh /local_data remote_user@remote_ip:/remote_data
  3. 复杂场景实践(如备份和过滤)
    • 模拟一个备份场景,例如,你有一个包含各种文件类型的目录,需要定期备份其中的重要文件(如文档文件和配置文件)到另一个目录。学习如何使用rsync的过滤功能,只备份特定类型的文件。
    • 假设要备份/data目录下的.txt.conf文件到/backup目录。可以使用命令rsync -av --include='*.txt' --include='*.conf' --exclude='*' /data /backup。这个命令通过--include--exclude参数来指定要包含和排除的文件类型。

四、深入学习和故障排除

  1. 阅读官方文档
  2. 学习案例和教程
    • 在网上搜索一些rsync的实际应用案例和教程。例如,很多技术博客会分享如何使用rsync进行服务器集群的数据同步、如何在复杂的网络环境下高效使用rsync等内容。这些案例和教程可以帮助你拓宽视野,了解rsync在不同场景下的用法。
  3. 故障排除技巧
    • 当遇到问题时,如同步失败、文件权限错误等,要学会如何进行故障排除。首先,检查rsync命令的参数是否正确,特别是远程同步时,检查SSH连接是否正常。其次,查看rsync的输出信息,它通常会提供一些错误提示,如“权限不足”“无法连接到远程主机”等。根据这些提示来查找问题的原因并解决。
    • 例如,如果遇到“权限不足”的错误,可能需要检查源文件和目标文件的权限设置,或者检查远程连接时使用的用户是否有足够的权限来执行同步操作。

备份是太常见、且太重要的一个日常工作了。

备份源码、文档、数据库、等等。

类似cp命令拷贝,但是支持服务器之间的网络拷贝,且保证安全性。

image-20220211192614410

学习背景

超哥游戏公司要每天都要对代码备份。

image-20220211192323222

任务需求

1.备份机每天夜里2点要同步开发服务器下的/dev_data/python_code数据,存放到/backup/dev_data/python_code

2.要求记录同步日志,便于记录、处理故障问题。

任务拆解

1.选择合适的备份工具,比如scp(为什么不是cp?)

2.学习rsync工具

3.编写定时任务

关乎知识点

1.rsync学习(新知识点)

2.crontab(复习知识)

课程目标

1.能够使用rsync实现本地文件同步(cp效果)

2.能够使用rsync实现远程网络文件同步(scp效果)

3.将rsync放入后台运行,实现数据定时同步。

理论储备

关于同步的种类

  • rsync 远程同步:remote synchronous

  • sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。

  • async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。

一、rsync是什么

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。

Rsync软件适用于unix/linux/windows等多种操作系统平台。

Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。

它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。

Rsync被广泛用于数据备份和镜像,并且作为一种改进后的复制命令用于日常运维。

Rsync具备使本地和远程两台主机之间的数据快速复制远程备份的功能,Rsync命令本身即可实现异地主机复制数据,功能类似scp又优于scp,scp每次都是全量备份,rsync可以实现增量拷贝(和scp一样都是基于ssh服务传输),Rsync软件还支持配置守护进程,实现异机数据复制。

增量复制是Rsync一特点,优于scp,cp命令。

Rsync实现如下功能

  • 本地数据同步复制,效果如cp
  • 远程数据同步复制,如scp
  • 本地数据删除,如rm
  • 远程数据查看,如ls

Rsync软件特性

  • 支持拷贝普通文件,特殊文件(link文件,设备文件)
  • 支持排除指定文件、目录的同步功能(同步数据时,指定文件不同步)
  • 能够保持原有文件所有属性均不变(stat查看的状态)
  • 实现增量复制(只复制变化的数据,数据传输效率极高)
  • 可以配合ssh、rcp、rsh等方式进行隧道加密文件传输(rsync本身不加密数据)
  • 可以通过socket(进行通信文件)传输文件和数据(c/s架构)
  • 支持匿名用户模式传输+

图解rsync增量备份

image-20220211194205966

二、rsync语法

rsync命令超详细解释。

Rsync命令参数详解

在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。Rsync的命令格式可以为以下六种:

  rsync [OPTION]... SRC DEST
  rsync [OPTION]... SRC [USER@]HOST:DEST
  rsync [OPTION]... [USER@]HOST:SRC DEST
  rsync [OPTION]... [USER@]HOST::SRC DEST
  rsync [OPTION]... SRC [USER@]HOST::DEST
  rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
  对应于以上六种命令格式,rsync有六种不同的工作模式:
  1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
  2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
  3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
  4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
  5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
    6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www

rsync参数的具体解释如下:

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结     -p, --perms 保持文件权限
-o, --owner 保持文件属主信息     -g, --group 保持文件属组信息
-D, --devices 保持设备文件信息    -t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second      
-h, --help 显示帮助信息

精简语法

NAME
       rsync — a fast, versatile, remote (and local) file-copying tool
       //一种快速、通用、远程(和本地)的文件复制工具

SYNOPSIS
       Local:  rsync [OPTION...] SRC... [DEST]

       Access via remote shell:
       //通过远程shell访问(命令)
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

       Access via rsync daemon:
       //通过后台程序访问(作为服务)
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST


参数解释
    -v        详细模式输出
    -a        归档模式,递归的方式传输文件,并保持文件的属性,等同于 -rlptgoD
    -r        递归拷贝目录
    -l        保留软链接
    -p        保留原有权限
    -t         保留原有时间(修改)
    -g        保留属组权限
    -o         保留属主权限
    -D        等于--devices  --specials    表示支持b,c,s,p类型的文件
    -R        保留相对路径
    -H        保留硬链接
    -A        保留ACL策略
    -e         指定要执行的远程shell命令
    -E         保留可执行权限
    -X         保留扩展属性信息  a属性


 比较常用的组合参数
 rsync -avzP
-a    保持文件原有属性
-v    显示传输细节情况
-z    对传输数据压缩传输
-P    显示文件传输的进度信息

三、rsync命令使用

1. 本机同步



注意:
1. 本地数据同步的时候,源目录后面的“/”会影响同步的结果
     # rsync -av /dir1/ /dir3        //只同步目录下面的文件到指定的路径
     # rsync -av /dir1 /dir2        //将当前目录dir1和目录下的所有文件一起同步

2. -R:不管加不加"/",都会将源数据的绝对路径一起同步
    # rsync -avR /dir1/ /dir2/

3. --delete:删除目标目录里多余的文件
    # rsync -avR --delete /dir1/ /dir2/

实践

不包括源数据目录本身.

image-20220215181832398

同步,携带源目录本身

root@yc-ubuntu-24 ~# rsync -avzP /test_rsync_data /opt/
sending incremental file list
test_rsync_data/
test_rsync_data/yuchao/
test_rsync_data/yuchao/linux/

sent 138 bytes  received 28 bytes  332.00 bytes/sec
total size is 0  speedup is 0.00

同步后,删除目标目录,下其他文件(慎用)

强制,目的地B,和源数据,完全一致,如B有其自己的文件,全部删掉 --delete

image-20220215181749145

2.远程同步

其实语法也scp差不多

  • 拉取
    • rsync -av 想要的数据在哪 放到本地哪
  • 推送
    • rsync -av 本地的数据 放入远程的机器路径
拉取
pull: rsync -av user@host:/path local/path
# rsync -av root@10.1.1.1:/etc/hosts /dir1/
# rsync -av root@10.1.1.1:/backup /dir1


推送
push: rsync -av local/path user@host:/path
# rsync -av /dir1/aa1 code@10.1.1.1:/home/code

拉取实践

image-20220215181733748

同样要注意,是否在文件夹结尾,添加斜线,结果是不一样的。

rsync -av root@192.168.0.123:/test_rsync /bak_rsync/

rsync -av root@192.168.0.123:/test_rsync/ /bak_rsync/

这种语法,是以ssh协议通信,需要输入ssh认证信息。

推送实践

image-20220215181716824

思考

rsync远程同步数据时,默认情况下为什么需要密码?如果不想要密码同步怎么实现?

rsync基于ssh协议传输,因此需要认证方式、要么密码、要么密钥对儿。

两台Linux服务器在连接时,默认使用的还是SSH协议。

由于没有做免密登录,所以还是需要输入对方服务器的密码。

如果不想输入密码,可以使用免密登录来实现。

四、rsync守护进程模式

  1. Rsync简介
    • Rsync是一个用于文件同步和数据备份的工具。它可以在本地计算机与远程计算机之间,或者在两个本地目录之间高效地传输和同步文件。Rsync使用一种叫做“rsync算法”的增量传输算法,该算法只传输文件中已更改的部分,而不是整个文件,这使得它在备份和同步大量数据时非常高效。
  2. “Daemon”的含义
    • 在计算机领域,“daemon”(守护进程)是一种在后台运行的计算机程序。守护进程没有控制终端,并且通常在系统启动时就开始运行,一直持续到系统关闭。它们在后台默默地执行各种系统任务,如网络服务、系统日志记录等。
  3. Rsync Daemon的解释
    • Rsync Daemon是指Rsync以守护进程的模式运行。这意味着它会在服务器(可以是本地服务器,也可以是远程服务器)上持续运行,监听特定的端口(默认是873端口),等待客户端的连接请求。
    • 例如,在一个数据中心的环境中,有一台专门用于数据备份的服务器。通过在这台服务器上启动Rsync Daemon,其他客户端机器(如各种应用服务器、数据库服务器等)就可以连接到这个Rsync Daemon,将它们的数据备份到这台备份服务器上。客户端可以通过指定服务器的IP地址和端口号来连接到Rsync Daemon,然后使用Rsync的命令语法来指定要同步的文件和目录等操作。
    • 配置Rsync Daemon通常需要设置配置文件(一般是/etc/rsyncd.conf),在这个文件中可以定义共享的模块(每个模块对应一个共享的目录路径)、访问权限(如允许哪些IP地址或用户访问、是只读还是读写权限等)等信息。这样就可以安全、高效地实现文件的远程同步和备份服务。

默认情况下,rsync只是作为一个命令来进行使用的(ps在查询进程时,找不到对应的服务),但是rsync提供了一种作为系统服务的实现方式。

守护进程传输模式是在客户端和服务端之间进行的数据复制。

服务端需要配置守护进程,在客户端执行命令,实现数据拉取推送

rsync守护进程模式

1.通过配置文件设置rsync功能

2.rsync命令变了,通过模块名同步指定的文件夹。

如下语法,rsync就是以守护进程模式通信了,读取模块名。

rsync -av root@192.168.0.123::devdata /backup/dev_data/python_code/

rsync --daemon

  1. 实现持续监听与服务提供
    • 当使用rsync --daemon命令时,rsync会以守护进程的方式运行。这就如同一个一直处于等待状态的服务端程序,在后台持续监听特定端口(默认是873端口)。
    • 例如,在一个企业的文件备份系统中,备份服务器需要随时准备接收来自各个客户端的数据备份请求。通过rsync --daemon,备份服务器上的rsync就能够持续等待,不管是白天还是夜晚,只要客户端发起同步请求,它就可以进行处理。
  2. 支持远程文件同步
    • 它允许远程客户端通过网络连接到运行rsync --daemon的服务器,然后进行文件同步操作。
    • 假设公司有多个办公室,每个办公室都有自己的文件服务器。为了保证数据的一致性,需要将各个办公室的文件服务器中的重要文件同步到一个中央存储服务器上。在中央存储服务器上运行rsync --daemon,其他办公室的文件服务器(作为客户端)就可以使用rsync命令通过网络将文件同步到中央服务器,方便实现数据的集中备份和管理。
  3. 高效的数据传输
    • 利用rsync本身的算法优势,rsync --daemon在同步文件时可以只传输文件的差异部分。
    • 比如,有一个大型的数据库备份文件,每天可能只有一小部分数据被修改。当客户端通过rsync --daemon连接到服务器进行同步时,rsync不会像简单的文件复制那样传输整个文件,而是仅仅传输那些修改过的部分,这大大节省了网络带宽和传输时间,提高了同步效率。
  4. 灵活的配置选项
    • 可以通过配置文件(通常是/etc/rsyncd.conf)来定制rsync --daemon的行为。在配置文件中,可以设置共享的目录(称为模块)、访问权限(如允许哪些IP地址的客户端访问、用户认证方式等)、日志记录等内容。
    • 例如,对于一个需要对不同部门的数据进行分类备份的公司,可以在配置文件中为每个部门创建一个单独的模块,设置不同的访问权限。比如,财务部门的模块只允许财务部门的特定IP地址的客户端访问,并且只有读取权限,用于将财务数据备份到安全的存储服务器上;而研发部门的模块可以允许研发部门的多个客户端有读写权限,方便他们共享和同步代码等文件。

启动rsync守护进程

#安装配置
apt update
apt install rsync
systemctl start rsync
systemctl enable rsync

1.确保配置文件存在
[root@yuchao-linux01 ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:
uid = nobody
gid = nogroup
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[yubackup]
  path = /test_rsync_backup/
  comment = this is my test rsync backup data,,by yuchao
  read only = no
  list = yes
  auth users = chaoge
  secrets file = /etc/rsyncd.secrets


2.启动程序
[root@yuchao-linux01 ~]# rsync --daemon

3.检查程序
[root@yuchao-linux01 ~]# ps -ef|grep rsync
root       3793      1  0 10:23 ?        00:00:00 rsync --daemon
root       3808   3714  0 10:23 pts/1    00:00:00 grep --color=auto rsync
[root@yuchao-linux01 ~]#
[root@yuchao-linux01 ~]#
[root@yuchao-linux01 ~]# netstat -tnlp|grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3793/rsync
tcp6       0      0 :::873                  :::*                    LISTEN      3793/rsync
[root@yuchao-linux01 ~]#

4.备注
rsync必须读取配置文件
rsync默认端口873、tcp协议。
  • uidgid:指定运行 rsync 守护进程的用户和组,这里使用nobodynogroup来限制权限。
  • use chroot:设置为no表示不使用 chroot 监牢,这在某些情况下可以提高灵活性,但可能会有安全风险,需要根据实际情况调整。
  • max connections:定义最大同时连接数。
  • pid filelock filelog file:分别指定进程 ID 文件、锁文件和日志文件的位置。
  • [backup]:这是一个模块定义。模块名是backup,可以根据需要自定义。
  • path:指定共享的目录路径,这里是/home/user/backup
  • comment:对模块的简单描述。
  • read only:设置为no表示允许对共享目录进行读写操作。如果设置为yes,则只允许读取。
  • list:设置为yes表示允许用户列出模块中的文件和目录列表。
  • auth users:指定可以访问的用户,这里是user
  • secrets file:指定存储用户认证密码的文件路径。

rsync配置文件解读

配置参数 参数说明
uid = rsync 指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者
gid = rsync 指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者
use chroot = no 进行数据同步存储时,安全相关参数,默认内网进行数据同步,可以关闭
max connections = 200 定义向备份服务器进行数据存储的并发连接数
timeout = 300 定义与备份服务器建立的网络连接,在多长时间没有数据传输时,就释放连接
pid file = /var/run/rsyncd.pid 服务程序运行时,会将进程的pid信息存储到一个指定的pid文件中
lock file = /var/run/rsync.lock 定义锁文件,主要用于配合max connections 参数,当达到最大连接就禁止继续访问
配置参数 参数说明
log file = /var/log/rsyncd.log 定义服务的日志文件保存路径信息
[backup] 指定备份目录的模块名称信息
path = /backup 指定数据进行备份的目录信息
ignore errors 在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误
read only = false 设置对备份的目录的具有读写权限,即将只读模式进行关闭
list = false 确认是否可以将服务配置的模块信息,在客户端可以查看显示
hosts allow = 172.16.1.0/24 设置备份目录允许进行网络数据备份的主机地址或网段信息,即设置白名单
配置参数 参数说明
hosts deny = 0.0.0.0/32 设置备份目录禁止进行网络数据备份的主机地址或网段信息,即设置黑名单
auth users = rsync_backup 指定访问备份数据目录的认证用户信息,为虚拟定义的用户,不需要进行创建
secrets file = /etc/rsync.password 设置访问备份数据目录进行认证用户的密码文件信息,会在文件中设置认证用户密码信息
配置参数 参数说明
[backup] 指定模块名称,便于日后维护
path=/backup 在当前模块中,Daemon使用的文件系统或目录,注意目录权限和配置文件权限一直,防止读写出问题
#exclude= 排除文件或目录,相对路径
[chaoge] 还可以添加其他模块

任务解决

任务分析

备份的本质就是文件拷贝
1. 命令选择
cp 、scp、rsync

2.选择rsync
1.功能丰富,强大
2.增量拷贝

3.命令使用流程
写配置文件/etc/rsyncd.conf 
↓
执行rsync --daemon命令
↓
检查默认873端口

实验环境

该实验,务必注意,关闭防火墙,iptables -F、selinux、firewalld。

开发机器上执行

1.准备2台linux机器
192.168.0.110 yuchao-backup01

192.168.0.123 yuchao-dev01

2.在dev01机器上创建数据目录
[root@yuchao-dev01 ~]# mkdir -p  /dev_data/python_code
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]# touch /dev_data/python_code/app{1..5}.py
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]# ll /dev_data/python_code/
总用量 0
-rw--w--w- 1 root root 0 2月  15 11:20 app1.py
-rw--w--w- 1 root root 0 2月  15 11:20 app2.py
-rw--w--w- 1 root root 0 2月  15 11:20 app3.py
-rw--w--w- 1 root root 0 2月  15 11:20 app4.py
-rw--w--w- 1 root root 0 2月  15 11:20 app5.py
[root@yuchao-dev01 ~]#


3.运行rsync守护进程
安装
[root@yuchao-dev01 ~]#  yum install rsync -y

写配置文件,部分信息如下
[root@yuchao-dev01 ~]# tail -3  /etc/rsyncd.conf
[devdata]
    path=/dev_data/python_code/
    log file = /var/log/rsync.log

运行rsync守护进程
[root@yuchao-dev01 ~]# rsync --daemon

检查rsync
[root@yuchao-dev01 ~]# ps -ef|grep rsync
root       3793      1  0 10:23 ?        00:00:00 rsync --daemon
root       5090   4757  0 11:30 pts/1    00:00:00 grep --color=auto rsync


4.设置文件夹权限755
[root@yuchao-dev01 ~]# chmod -R  755 /dev_data/

备份机器上执行

1.准备好数据备份的目录
[root@yuchao-backup01 ~]# mkdir -p /backup/dev_data/python_code

2.查看rsync服务端的模块名字

[root@yuchao-backup01 ~]# rsync -a root@192.168.0.123::
devdata

3.编写数据备份脚本,待会结合定时任务
[root@yuchao-backup01 rsync_sh]# cat rsync_python.sh
#!/bin/bash
rsync -av root@192.168.0.123::devdata /backup/dev_data/python_code/ &>/dev/null

赋予执行权限
[root@yuchao-backup01 rsync_sh]# chmod +x rsync_python.sh

4.交给定时任务
[root@yuchao-backup01 rsync_sh]# crontab  -e
crontab: installing new crontab[root@yuchao-backup01 rsync_sh]#
[root@yuchao-backup01 backup]# crontab -l
00 02 * * * /root/rsync_sh/rsync_python.sh

5.可以手动执行rsync命令,立即查看数据同步结果(看到文件传输过来了,表示正确了)
[root@yuchao-backup01 backup]# /root/rsync_sh/rsync_python.sh
[root@yuchao-backup01 backup]#
[root@yuchao-backup01 backup]# ls /backup/dev_data/python_code/
app1.py  app2.py  app3.py  app4.py  app5.py

6.也可以设置时间,让定时任务来执行(但是由于时间不同步,会有延迟执行。)
date -s '01:59:50'

小结

1.rsync是用于实现文件同步,包括本地同步、远程同步;

2.rsync可以以守护进程形式运行,默认端口是873/tcp协议,默认没有密码即可;

3.rsync还可以通过修改配置文件,支持很多复杂功能;

4.rsync可以和定时任务结合使用;

rsync扩展(密码功能)

已知,使用rsync守护进程模式,默认不需要密码了。

如何添加密码认证,增加安全性,rsyncd.conf提供了该功能

实验环境

配置文件准备

1.两台linux机器

192.168.0.110  yuchao-back01   /bak_rsync/ 

192.168.0.123 yuchao-dev01    /devdata/python_data/ 

2.修改rsync守护进程机器上配置文件,dev01开发机器上
[root@yuchao-dev01 ~]# ps -ef|grep rsync
root       8039      1  0 14:41 ?        00:00:00 rsync --daemon

3.修改配置文件,部分信息如下
[root@yuchao-dev01 ~]# tail -10 /etc/rsyncd.conf


motd file=/etc/rsyncd.welcome
[dev-app1]
comment=这是超哥讲解 rsync加密的模块
path=/devdata/python_data/
auth users=rsync_backup
secrets file=/etc/rsyncd.secrets


4.创建密码文件
[root@yuchao-dev01 ~]# cat /etc/rsyncd.secrets
rsync_backup:yuchao666

5.创建欢迎文件
[root@yuchao-dev01 ~]# cat  /etc/rsyncd.welcome
超哥带你学rsync,欢迎你

6.修改文件权限,增加安全,注意这里一定要改,最大降低该密码文件权限为只读即可。
[root@yuchao-dev01 ~]# chmod 600 /etc/rsyncd.secrets


7.准备用于备份的测试数据
[root@yuchao-dev01 ~]# mkdir -p /devdata/python_data/
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]# touch /devdata/python_data/yuchao{1..5}.log
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]# ls /devdata/python_data/
yuchao1.log  yuchao2.log  yuchao3.log  yuchao4.log  yuchao5.log

设置文件权限
[root@yuchao-dev01 ~]# chmod -R  755 /devdata/python_data/

需要重启开发服务器上的rsync守护进程,加载新的配置文件

[root@yuchao-dev01 ~]# ps -ef|grep rsync
root       8039      1  0 14:41 ?        00:00:00 rsync --daemon
root       9199   8915  0 15:55 pts/1    00:00:00 grep --color=auto rsync
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]# kill 8039


[root@yuchao-dev01 ~]# rsync --daemon
[root@yuchao-dev01 ~]#
[root@yuchao-dev01 ~]# ps -ef|grep rsync
root       9209      1  0 15:56 ?        00:00:00 rsync --daemon
root       9211   8915  0 15:56 pts/1    00:00:00 grep --color=auto rsync
[root@yuchao-dev01 ~]#

去备份服务器上,执行rsync命令,拉取需要同步的数据。

注意你要设置正确的rsync账号、密码;

[root@yuchao-backup01 ~]# rsync -av rsync_backup@192.168.0.123::dev-app1 /bak_rsync
超哥带你学rsync,欢迎你

Password:
receiving incremental file list
./
yuchao1.log
yuchao2.log
yuchao3.log
yuchao4.log
yuchao5.log

sent 122 bytes  received 336 bytes  130.86 bytes/sec
total size is 0  speedup is 0.00


[root@yuchao-backup01 ~]# ls /bak_rsync/
yuchao1.log  yuchao2.log  yuchao3.log  yuchao4.log  yuchao5.log
[root@yuchao-backup01 ~]#

更懒的用法

如果你想要密码,又懒得输入密码,当然是便于后期的脚本开发,你可以用如下方式,给rsync传入密码。

1.确认rsync命令存在
yum install rsync -y

2.创建密码文件,和服务端相同,就可以省略你手动输入rsync密码了。
[root@yuchao-backup01 bak_rsync]# echo 'yuchao666' > /etc/rsyncd.password
[root@yuchao-backup01 bak_rsync]# chmod 600 /etc/rsyncd.password
[root@yuchao-backup01 bak_rsync]# cat /etc/rsyncd.password
yuchao666
[root@yuchao-backup01 bak_rsync]#

3.执行同步命令,使用参数,传入密码文件
[root@yuchao-backup01 bak_rsync]# rsync -avzP rsync_backup@192.168.0.123::dev-app1 /bak_rsync --password-file=/etc/rsyncd.password
超哥带你学rsync,欢迎你

receiving incremental file list
./
yuchao1.log
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
yuchao2.log
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=3/6)
yuchao3.log
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=2/6)
yuchao4.log
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=1/6)
yuchao5.log
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 122 bytes  received 321 bytes  886.00 bytes/sec
total size is 0  speedup is 0.00
[root@yuchao-backup01 bak_rsync]# pwd
/bak_rsync
[root@yuchao-backup01 bak_rsync]# ls
yuchao1.log  yuchao2.log  yuchao3.log  yuchao4.log  yuchao5.log
[root@yuchao-backup01 bak_rsync]#

4.还有一种是变量密码的形式,更为简单,但是要懂得变量理念,可以替代密码文件的用法。
[root@yuchao-backup01 bak_rsync]# export RSYNC_PASSWORD=yuchao666

image-20220215181638547

ubuntu rsync 守护进程文档

以下是关于在 Ubuntu 上部署 rsync 守护进程的详细文档。


部署 rsync 守护进程的步骤

1. 安装 rsync

确保系统中已经安装了 rsync。

sudo apt update
sudo apt install rsync -y

2. 创建 rsync 配置文件

rsync 的默认配置文件路径为 /etc/rsyncd.conf。创建或编辑该文件:

sudo vim /etc/rsyncd.conf

示例配置文件内容:

uid = nobody
gid = nogroup
use chroot = yes
read only = no
max connections = 4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

[yubackup]
    path = /test_rsync_backup/
    comment = this is my test rsync backup data,,by yuchao
    auth users = chaoge
    secrets file = /etc/rsyncd.secrets

3. 创建数据目录

根据配置文件,创建对应的目录:

sudo mkdir -p /data/backup
sudo chown -R  nobody:nogroup /data/backup

4. 配置认证文件

如果配置了 auth users,需要创建认证文件 /etc/rsyncd.secrets

sudo vim /etc/rsyncd.secrets

示例内容:

chaoge:yuchao123

设置权限,必须是600,rsync进程要求的!

sudo chmod 600 /etc/rsyncd.secrets

5. 配置 rsync 服务

编辑 rsync 服务文件 /etc/default/rsync,启用守护进程模式:

[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd.conf
After=network.target
Documentation=man:rsync(1) man:rsyncd.conf(5)

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
RestartSec=1
Restart=on-failure

# Citing README.md:
#
#   [...] Using ssh is recommended for its security features.
#
#   Alternatively, rsync can run in `daemon' mode, listening on a socket.
#   This is generally used for public file distribution, [...]
#
# So let's assume some extra security is more than welcome here. We do full
# system protection (which makes /usr, /boot, & /etc read-only) and hide
# devices. To override these defaults, it's best to do so in the drop-in
# directory, often done via `systemctl edit rsync.service`. The file needs
# just the bare minimum of the right [heading] and override values.
# See systemd.unit(5) and search for "drop-in" for full details.

ProtectSystem=full
#ProtectHome=on|off|read-only
PrivateDevices=on
NoNewPrivileges=on

[Install]
WantedBy=multi-user.target

6. 启动 rsync 服务

启动并启用 rsync 服务:

sudo systemctl enable rsync
sudo systemctl start rsync

检查服务状态:

root@yc-ubuntu-24 /test_rsync_backup# systemctl status rsync
● rsync.service - fast remote file copy program daemon
     Loaded: loaded (/lib/systemd/system/rsync.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-01-01 16:08:53 CST; 6s ago
       Docs: man:rsync(1)
             man:rsyncd.conf(5)
   Main PID: 7401 (rsync)
      Tasks: 1 (limit: 9382)
     Memory: 852.0K
        CPU: 15ms
     CGroup: /system.slice/rsync.service
             └─7401 /usr/bin/rsync --daemon --no-detach

1月 01 16:08:53 yc-ubuntu-24 systemd[1]: Started fast remote file copy program daemon.



root@yc-ubuntu-24 /test_rsync_backup# ps -ef |grep rsync
root        7401       1  0 16:08 ?        00:00:00 /usr/bin/rsync --daemon --no-detach

7. 测试 rsync 守护进程

从客户端测试 rsync 连接:

rsync chaoge@192.168.110.24::yubackup

测试上传文件:

rsync -avz /path/to/local/file user1@<server_ip>::backup


# 上传
root@ubuntu-96:~# rsync -avzP ./t.log chaoge@192.168.110.24::yubackup

# 下载单个的文件
rsync -avzP chaoge@192.168.110.24::yubackup/java:8u111.tar ./

# 同步所有tar文件  
rsync -avzP chaoge@192.168.110.24::yubackup/*.tar  ./

8. 查看日志

检查日志文件以排查问题

sudo tail -f /var/log/rsyncd.log

注意事项

  1. 如果使用了防火墙,请确保端口 873 已打开:
    sudo ufw allow 873
    
  2. 如果需要安全传输,建议通过 rsync + SSH 方式进行文件同步。
  3. 对于大规模传输任务,可以调整 max connections 和带宽限制。

完成后,您的 rsync 守护进程应该能够正常工作,支持远程客户端连接和文件同步。

Rsync客户端,传入密码的2个方式

# 密码变量
export RSYNC_PASSWORD=yuchao123
root@ubuntu-96:/tmp# export  |grep -i rsync
declare -x RSYNC_PASSWORD="yuchao123"

root@ubuntu-96:/tmp# rm -f nginx\:alpine.tar
root@ubuntu-96:/tmp#
root@ubuntu-96:/tmp#
root@ubuntu-96:/tmp# rsync -avzP chaoge@192.168.110.24::yubackup/*.tar  ./
receiving incremental file list
nginx:alpine.tar
     53,972,992 100%  152.74MB/s    0:00:00 (xfr#1, to-chk=1/8)

sent 43 bytes  received 20,479,702 bytes  40,959,490.00 bytes/sec
total size is 3,964,177,408  speedup is 193.57
root@ubuntu-96:/tmp#

# 去掉变量
root@ubuntu-96:/tmp# unset RSYNC_PASSWORD
root@ubuntu-96:/tmp#
root@ubuntu-96:/tmp#
root@ubuntu-96:/tmp# echo $RSYNC_PASSWORD

root@ubuntu-96:/tmp#


# 密码文件,也要600权
# 这里,只写密码就行了!!
root@ubuntu-96:/tmp# cat /etc/rsyncd.password
yuchao123
root@ubuntu-96:/tmp#

root@ubuntu-96:/tmp# chmod 600 /etc/rsyncd.password
root@ubuntu-96:/tmp#
root@ubuntu-96:/tmp# rsync --password-file=/etc/rsyncd.password   -avzP chaoge@192.168.110.24::yubackup/*.tar  ./
receiving incremental file list

sent 20 bytes  received 344 bytes  728.00 bytes/sec
total size is 3,964,177,408  speedup is 10,890,597.27

解释rsync的use chroot

参数 use chroot 的解释

use chroot 是 rsync 守护进程配置文件中的一个选项,用于决定在数据同步时是否启用 chroot 环境。


含义

  • chroot 是 Linux/Unix 系统中的一种操作,作用是将进程的根目录,限制到指定的路径。换句话说,进程只能访问该路径及其子目录,而无法访问其他系统目录。
  • 在 rsync 中,use chroot = yes 表示在同步开始时,rsync 守护进程会将自己 "锁定" 到指定的路径(path 参数指定的目录),以增加安全性。

可选值

  1. use chroot = yes 默认值,启用 chroot 功能。好处是:
    • 安全性更高:限制了 rsync 进程的操作范围,防止意外访问或修改系统的其他部分。
    • 可靠性增强:同步路径中的文件路径更明确,降低出错的可能性。
  2. use chroot = no 禁用 chroot 功能。适合以下场景:
    • 需要同步的目录中有符号链接(symlink)。启用 chroot 后,符号链接可能无法正确解析。
    • 系统中没有启用 chroot 或文件系统复杂,可能会导致性能开销。

优缺点

优点(use chroot = yes

  • 提高安全性,防止未授权的目录访问。
  • 限制了 rsync 的操作范围,即使守护进程被入侵,攻击者也无法访问超出指定目录范围的文件。

缺点

  • 同步路径中的符号链接可能无法正确解析。
  • 启用 chroot 时,rsync 需要对指定目录有额外的访问权限,否则可能导致启动失败。

使用建议

  • 建议启用(yes:在安全性要求较高的环境中(如公共服务或多用户系统)。
  • 可以禁用(no:在需要保留符号链接或确保最小系统配置的场景中。

示例配置

use chroot = yes   # 默认值,启用 chroot
path = /data/backup

如果禁用:

use chroot = no
path = /data/backup

根据实际需求选择启用或禁用,以平衡安全性和功能性。

Copyright © www.yuchaoit.cn 2025 all right reserved,powered by Gitbook作者:于超 2025-01-01 16:21:56

results matching ""

    No results matching ""