老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

【必看】Linux运维远程传输文件命令详解!

老男孩IT教育

常见问题

2022年10月27日 16:10

在企业里数据是最重要的,因此需要将数据做好保存和备份,以此来避免由于一些特殊原因从而导致的数据丢失等严重问题。

  文本目录:

  •   rsync命令介绍
  •   rsync命令特性
  •   rsync常用参数
  •   rsync基础使用
  •   rsync排除文件
  •   rsync远程同步
  •   rsync增量备份
  •   rsync双向同步

  企业数据存储需求

  在企业里数据是最重要的,因此需要将数据做好保存和备份,以此来避免由于一些特殊原因从而导致的数据丢失等严重问题。

  这时可以考虑做一套 rsync + inotify 组成的文件实时双向自动同步功能

Linux培训

  rsync 介绍

  rsync 是远程(或本地)复制和同步文件最常用的命令。借助 rsync 命令,你可以跨目录,跨磁盘和跨网络远程与本地数据进行复制和同步

  举例来说:在两台Linux主机之间进行数据备份和镜像。本文介绍在Linux主机上进行远程和本地传输文件的常见用法,不需要root账户也可以允许rsync

  rsync特性

  1、高效地复制同步数据到对端,或者对端到本地

  2、支持复制链接、设备、属主、属组、权限

  3、rsync 使用远程更新协议 remote-update protocol ,这允许仅仅传输两组文件之间的差异

  4、Rsync消耗较少的带宽,它使用压缩和解压缩方法,同时发送和接收数据

  rsync同步基本说明

  rsync的目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式),也可以实现本地不同路径下文件的同步,但不能实现远程路径1到远程路径2之间的同步。

  不考虑rsync的实现细节,就文件同步而言,涉及了源文件和目标文件的概念,还涉及了以哪边文件为同步基准。

  例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。

  反之,如果想让本地主机上的文件和目标主机上的文件保持同步,则目标主机上的文件为同步基准,实现方式是将目标主机上的文件作为源文件拉取到本地。

  当然,要保持本地的两个文件相互同步,rsync也一样能实现,这就像Linux中cp命令一样,以本地某文件作为源,另一文件作为目标文件,但请注意,虽然rsync和cp能达到相同的目的,但它们的实现方式是不一样的。

  既然是文件同步,在同步过程中必然会涉及到源和目标两文件之间版本控制的问题,例如是否要删除源主机上没有但目标上多出来的文件,目标文件比源文件更新(newer than source)时是否仍要保持同步,遇到软链接时是拷贝软链接本身还是拷贝软链接所指向的文件,目标文件已存在时是否要先对其做个备份等等。

  rsync同步过程中由两部分模式组成:决定哪些文件需要同步的检查模式以及文件同步时的同步模式。

  1、检查模式是指按照指定规则来检查哪些文件需要被同步,例如哪些文件是明确被排除不传输的。

  默认情况下,rsync使用"quick check"算法快速检查源文件和目标文件的大小、mtime(修改时间)是否一致,如果不一致则需要传输。

  当然,也可以通过在rsync命令行中指定某些选项来改变quick check的检查模式。

  rsync支持非常多的选项,其中检查模式的自定义性是非常有弹性的。

  2、同步模式是指在文件确定要被同步后,在同步过程发生之前要做哪些额外工作。

  例如上文所说的是否要先删除源主机上没有但目标主机上有的文件,是否要先备份已存在的目标文件,是否要追踪链接文件等额外操作。

  rsync也提供非常多的选项使得同步模式变得更具弹性。

  相对来说,为rsync手动指定同步模式的选项更常见一些,只有在有特殊需求时才指定检查模式,因为大多数检查模式选项都可能会影响rsync的性能。

  rsync三种工作方式

  1、本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。

  2、本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。

  3、本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。

  前两者的本质是通过管道通信,即使是远程shell。而方式3则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。

  常用参数

  基础使用

  | -r 参数

  递归拷贝数据,不保留源文件属性

  可以作为 cp 和 mv 命令的替代方法,将源目录同步到目标目录

# 针对单个文件

rsync -r /root/test01.txt /tmp

# 针对多个文件

rsync -r /root/test01.txt /root/test02.txt /tmp

  | -a 参数

  递归拷贝数据,保留源文件属性

  -a参数可以替代 -r ,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)

  由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以 -a 比 -r 更有用


# 针对单个文件

rsync -a /root/test/test01.txt /tmp

# 针对目录下的所有文件

rsync -a /root/test/ /tmp

  | --delete 参数

  默认情况下,rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录

  它不会使两个目录保持相同,并且不会删除文件

  如果要使得目标目录成为源目录的镜像副本,则必须使用 --delete 参数,这将删除只存在于目标目录、不存在于源目录的文件

rsync -av --delete /root/test/ /tmp

  排除文件

  | --exclude 参数

  有时,我们希望同步时排除某些文件或目录,这时可以用 --exclude 参数指定排除模式

  注意,rsync 会同步以 " . " 开头的隐藏文件,如果要排除隐藏文件,可以这样写 --exclude=".*"

rsync -av --exclude=".*"  /root/ /tmp

  多个排除模式

  --exclude="/root/test/*" 为排除该目录下的所有文件,但不包括目录本身

# 利用多个 --exclude 参数

rsync -av --exclude=".*" --exclude="/root/test/*" /root/ /tmp

# 利用 Bash 的大扩号的扩展功能

rsync -av --exclude={".*","/root/test/*"} /root/ /tmp

  | --include 参数

  用来指定必须同步的文件模式,往往与 --exclude 结合使用

# 指定同步时,排除所有文件,但是不包括以 .txt 结尾的文件

rsync -av --include="*.txt" --exclude='*' /root/ /tmp

  远程同步

  | SSH 协议

  rsync 除了支持本地两个目录之间的同步,也支持远程同步

  它可以将本地内容,同步到远程服务器

rsync -avz /root/test/ root@10.0.0.51:/test/

  也可以将远程内容同步到本地

rsync -avz root@10.0.0.51:/test/ /root/test/

  | rsync 协议

  除了使用 SSH,如果另一台服务器安装并运行了 rsync 守护程序,则也可以用 rsync://协议(默认端口873)进行传输

  具体写法是服务器与目标目录之间使用双冒号分隔::

rsync -av /root/test/ 10.0.0.51::module/test/

  注意,上面地址中的 module 并不是实际路径名,而是 rsync 守护程序指定的一个资源名,由管理员分配

  如果想知道 rsync 守护程序分配的所有 module 列表,可以执行下面命令

rsync rsync://10.0.0.51

  rsync 协议除了使用双冒号,也可以直接用 rsync:// 协议指定地址

rsync -av /root/test/ rsync://10.0.0.51::module/test/

  增量备份

  rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件

  除了源目录与目标目录直接比较,rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录

  具体做法是:

  1、第一次同步是全量备份,所有文件在基准目录里面同步一份

  2、以后每次同步都是增量备份,只同步源目录与基准目录之间有变动的部分

  这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接

  --link-dest 参数用来指定同步时的基准目录

rsync -a --delete --link-dest test02/path test01/path test03/path

  上面命令中,--link-dest 参数指定基准目录 test02/path,然后源目录 test01/path 跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录 test03/path

  那些没变动的文件则会生成硬链接

  这个命令的第一次备份时是全量备份,后面就都是增量备份了

  rsync + inotify

  | Server端

  添加用户

useradd rsync -s /sbin/nologin

  创建备份目录

mkdir -p /backup/

chown -R rsync: /backup/

  创建身份验证文件

注意:

1、rsync服务是由那个用户启动的,该文件所属用户及用户组必须同启动用户

2、权限必须是600

echo "rsync_backup:123456" >> /etc/rsyncd.passwd

chmod 600 /etc/rsyncd.passwd

  rsync配置文件(/etc/rsyncd.conf有直接vi没有直接创建)

# vi /etc/rsyncd.conf

######### 全局配置参数 ##########

port=888

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout =300

motd file = /var/rsyncd/rsync.motd

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

 

###########下面指定模块,并设定模块配置参数,可以创建多个模块###########

[backup]

path = /backup/ # 目录必须提前创建

ignore errors

read only = false

write only = false

#list = false

hosts allow = 10.0.0.0/24

auth users = rsync_backup

secrets file = /etc/rsyncd.passwd

  启动服务

rsync --daemon

  | Client端

  免密登录文件

echo "123456" >> /etc/rsyncd.passwd # 只放密码即可

# 通过--password-file=/etc/rsyncd.passwd 指定文件

  安装inotify

# 检查是否有安装inotify 如果没有就安装

rpm -qa inotify-tools

yum install inotify-tools –y



# 源码安装

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar -xf inotify-tools-3.14.tar.gz -C /application/

cd /application/inotify-tools-3.14

./configure

make&&make install

ln -s /application/inontify-tools-3.14 /application/inontify 

  测试监听路径

inotifywait -mrq --format '%T %w%f' -e creat /backup

# T 是指时间 w 是指路径 f 是指文件  详情看下方参数

  老男孩教育Linux运维云计算课程汇集了虚拟化、云计算、安全攻防、Python开发、SRE等技术,课堂效率高、内容丰富全面,由浅入深,循序渐进,帮助学员稳扎稳打,夯实基础,在有限的时间内帮助学员高效提升,成为符合企业需求的技术型人才。

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。