莫度编程网

技术文章干货、编程学习教程与开发工具分享

Linux目录同步(rsync使用方法)

在linux系统中,对文件或者目录的拷贝、备份等是很重要的基础工作。Rsync 是一个非常强大的工具,可以帮助我们高效地完成同步文件和目录任务,其支持断点续传,可以本地拷贝也可以远程拷贝,特别适合在网络不稳定或者传输大文件的场景。本文主要介绍rsync对目录及文件本地同步、异地同步、删除文件的案例。

rsync基本语法

语法: rsync 选项 [源目录] [目标目录]

-a 表示归档模式,即递归复制、保持符号链接、权限、时间戳、组、所有者和设备

-v 表示详细模式,会显示更多的信息

-z 表示在传输时压缩数据

--partial 保留部分传输的文件,断点续传时会继续

--progress 显示传输进度

--dry-run (-n) 只测试,预演,不实际同步

--checksum 比较文件的校验

--bwlimit 限速 (单位KB/s)

前置条件

大部分linux发行版都预安装的有rsync这个工具,你可以使用此命令“rpm -qa | grep rsync”查看是否安装。

如果未查询到安装包,需要进行安装,方法如下:

Debian/Ubuntuapt install rsync

CentOS/RHELyum install rsync

也可以使用rpm包或者源代码安装。

本地目录同步

本地同步就是在本机上不同目录进行同步(目录可以在任意磁盘或者分区上),因为rsync是基于文件系统的目录和文件拷贝,所以跟目录所在分区的文件系统类型无关。

我这里的系统在根目录下分别使用t2目录作为源同步目录,d2目录作为目标同步目录。

(示例一)/t2目录下有5个txt文件,/d2目录下是空的。

命令:rsync -avzv --partial /t2/ /d2/ (注意t2目录名称后面有“/”)

请注意!上面这条命令的源目录t2后面有“/”表示同步t2目录下的子目录或者文件。

(示例二)同步整个t2目录到d2目录下

如果是“rsync -avzv --partial /t2 /d2/ ”(注意t2目录名称后面没有“/”),是把整个t2目录都同步到d2目录下(包含t2目录名本身),如下:

请注意!请注意!同步命令里面包含“--partial”参数,表示支持断点续传,如果你要断点续传一定要加这个参数,rsync默认是不启用断点续传的。

(示例三)排除某个文件或者目录

这里演示排除文件“3.txt”不同步,命令:rsync -avzv --partial --exclude="3.txt" /t2/ /d2/(注意t2目录名称后面有“/”)

(示例四) 删除目标目录中多余的文件

这里演示目标d2目录中原来已经存在“test.txt”文件,在执行同步命令中添加“--delete”参数会把目标目录原有文件删除掉,只保留源目录t2同步过来的文件。

命令:rsync -avz --partial --delete /t2/ /d2/ (注意t2目录名称后面有“/”)

(示例五)在实际同步前测试命令效果(不实际同步)

命令:rsync -avz --dry-run --partial /t2/ /d2/ (注意t2目录名称后面有“/”)

也可以是用 “-n”参数,等同于“--dry-run”

异地同步目录(采用ssh方式)

在两个不同的linux系统间同步目录,采用ssh方式。

使用一台Almalinux作为同步源,根目录下的/t2目录,t2目录中有5个txt文件。

使用一台Rockylinux作为目标, 根目录下的/test目录,目录为空。

请注意,异地目录同步和本地同步的参数一样,只是多了“-e”参数用于指定ssh执行,我这里只演示其中基本的目录同步,其余的示例请参考以上其他示例内容即可。

(示例六)将Almalinux的/t2目录下的内容同步到Rockylinux的/test目录下

命令:rsync -avz --partial -e "ssh -p 50022" /t2/ root@172.18.5.248:/test/

“-e”参数用于指定“ssh”,请结合实际指定ssh的端口号

到Rockylinux的/test目录下有同步过来的文件

rsync作为服务端守护进程模式

以上的示例,是在本地或者异地(两台主机)间的目录同步,都是一对一的目录同步。如果你的网络中有多台主机需要向同一台主机请求目录同步,可以将其配置为服务端。

(示例七)我这里使用一台Almalinux作为同步源(服务端),根目录下有t2目录;一台Rockylinux作为目标(客户端),根目录下有test目录:


在需要配置为rsync服务端的Almalinux系统上启用rsync服务:

首先配置rsync服务的配置文件/etc/rsyncd.conf,我这里的配置如下:

[root@almalinux t2]# cat /etc/rsyncd.conf | grep -v ^$ | grep -v ^#

uid = nobody #启动服务的用户

gid = nobody # 启动服务的用户组

use chroot = yes #限定在指定目录里

max connections = 4 # 最大的连接数

pid file = /var/run/rsyncd.pid # 服务运行的pid文件

exclude = lost+found/ #排除某个目录

transfer logging = yes #传输日志

timeout = 900 #超时时间

lock file = /var/run/rsync.lock #锁文件,确保并发数据一致性

log file = /var/log/rsyncd.log #日志文件

hosts allow = 172.18.5.0/24 #允许访问的客户端IP

[rs] #模块名称,可以随意命名,很重要,非常重要!

path = /t2 #服务端共享的目录,被客户端同步的目录,很重要!

comment = rsync test #描述

auth users = rs #允许访问的客户端用户名称,要在服务端创建这个用户

secrets file = /etc/rsyncd.secrets #用户的密码文件

其次创建用户rs: useradd rs -M

最后创建/etc/rsyncd.secrets密码文件(这个文件存放rsync用户的名称和密码)

touch /etc/rsync.secrets

将用户rs和密码(密码自定义,我这里配置123456)写入/etc/rsyncd.secrets文件

echo "rs:123456" >> /etc/rsyncd.secrets

对/etc/rsyncd.secrets 权限进行修改(很重要,必须修改,否责后续客户端无法访问)

chmod 600 /etc/rsyncd.secrets

启动命令: rsync --daemon (也可以使用systemctl管理)


在客户端Rockylinux上配置目录同步请求(请求将服务端的t2目录下的内容同步过来)

rsync -avz --partial rs@172.18.5.245::rs /test

请注意:

在ip地址后面有两个冒号“::”

rs@172.18.5.245::rs (左边的rs是在服务端创建的用户,右边的rs是/etc/rsyncd.conf里的模块名称)

关于采用服务端守护进程模式进行rsync异地同步目录添加各种参数,可以在以上的示例自行添加,这里就不再复述。


使用rsync删除大量文件


你是否会遇到过linux系统某些服务日志异常,导致产生大量文件,比如一个目录里面有百万个文件,这种情况很容易导致文件系统inode数量占用率高、容量占用率高等问题,如果使用传统的rm -rf 就会删除失败并报错,类似这样“-bash: /bin/rm: Argument list too long” 。

(示例八) 下面我们模拟一下环境,比如在根目录下的rr目录,我们创建100万个txt文件,如下:

seq 1 1000000 | xargs -I {} touch "{}.txt",随后使用rm -rf *这种方式删除文件会报错。

使用rsync对/rr目录下的100万个txt文件进行删除,方法如下:

首先创建一个空目录(这个目录随意创建),我这里在根目录下创建一个null目录

命令:

rsync --delete-before -d /null/ /rr/ (请注意,目录名称后面要有“/”)

使用这种方法的前提是要先建立一个空目录多这么这一步。


总结

以上内容列举了使用rsync本地同步目录、异地同步目录、删除大量文件的示例,我们再把核心要点总结一下:

1. rsync默认是根据目录下文件的大小、时间戳对源目录和目标目录进行比对后执行同步操作,如果要更精确到文件内容的变更同步,需要加上“--checksum”参数(但加上checksum参数后,相对来说同步效率要慢点)。

2. rsync默认不会启用断点续传功能,需要加上“ --partial”这个参数。

3. rsync的使用场景有很多,比如数据备份、服务器之间的数据同步、大文件数据迁移、系统灾备和镜像等,并且支持断点续传、增量传输,通过灵活的参数配置,甚至对较差的网络环境提高数据传输有很大的作用。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43