cxl
Published on 2025-03-11 / 1,631 Visits
83
0

同步工具:rsync

什么是rsync?

rsync(remote sync)是一个用于在本地或远程系统之间同步文件和目录的工具。它通过只传输文件中发生变化的部分来减少数据传输量,从而大大提高同步效率。rsync还支持压缩、加密、权限保持等功能,是一个非常灵活和强大的工具。

rsync的工作原理

rsync通过比较源文件和目标文件的差异,只传输发生变化的部分。它使用一种称为“delta encoding”的算法,能够高效地计算出文件之间的差异,并仅传输这些差异部分。这使得rsync在同步大文件或大量文件时非常高效。

安装

在Linux上安装rsync

大多数Linux发行版都预装了rsync。可输入 rsync -V 确认是否安装,如果没有安装,可以使用包管理器进行安装。

Debian/Ubuntu:

	sudo apt-get update
	sudo apt-get install rsync

CentOS/RHEL:

	sudo yum install rsync

Fedora:

	sudo dnf install rsync

在macOS上安装rsync

macOS系统通常预装了rsync。如果没有,可以使用Homebrew进行安装:

	brew install rsync

使用

基本语法

rsync的基本语法如下:

	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 显示帮助信息 

本地同步

/source目录同步到/destination目录:

	rsync -av /source/ /destination/

远程同步

将本地目录同步到远程服务器:

	rsync -avz -e ssh /source/ user@remote:/destination/

从远程服务器同步到本地:

	rsync -avz -e ssh user@remote:/source/ /destination/

同步并删除多余文件

同步并删除目标目录中源目录不存在的文件:

	rsync -av --delete /source/ /destination/

断点续传

使用-P选项支持断点续传:

	rsync -avzP -e ssh /source/ user@remote:/destination/

案例

案例1:备份网站数据

假设你有一个网站,数据存放在/var/www/html目录下,你需要将这些数据备份到远程服务器的/backup目录中:

	rsync -avz -e ssh /var/www/html/ user@remote:/backup/

案例2:同步开发环境

在开发过程中,你可能需要将本地的代码同步到开发服务器上进行测试:

	rsync -avz -e ssh /projects/myapp/ user@dev-server:/var/www/myapp/

案例3:定期备份

你可以使用cron定时任务来定期备份重要数据。编辑crontab文件:

	crontab -e

添加以下内容,每天凌晨2点同步数据:

	0 2 * * * rsync -avz -e ssh /important-data/ user@remote:/backup/

注意事项

  1. 路径末尾的斜杠:在rsync中,源路径末尾的斜杠表示同步目录内容,而不是目录本身。例如:

    • rsync -av /source/ /destination/:同步/source/目录下的内容到/destination/

    • rsync -av /source /destination/:同步/source目录本身到/destination/

  2. 权限问题:在使用rsync同步文件时,确保你有足够的权限读取源文件和写入目标文件。

  3. 网络带宽:在同步大量数据时,rsync可能会占用大量网络带宽。可以使用--bwlimit选项限制带宽使用。

  4. 断点续传:在同步大文件时,使用-P选项支持断点续传,避免因网络中断而重新传输。

  5. 删除文件:使用--delete选项时要小心,确保不会误删重要文件。


Comment