Rsync(Remote Sync)是一种同步工具,用于在系统中或系统之间复制文件和目录。 rsync 最大的优点是它只复制更改的文件,从而减少 CPU 消耗并节省复制文件时的带宽和时间。
rsync 优于 scp 的优势
我已经向您展示了一些 scp 命令的实际示例。 scp 是安全复制的缩写,也用于通过 ssh 在两个远程系统之间复制文件。
但是 rsync 与 scp 相比具有某些优势,这使其成为更好的选择。
- rsync 仅复制更改的文件,而 scp 复制每个文件并在需要时覆盖它们。 因此,rsync 可以保证更好的速度。
- rsync 也可以在没有加密的情况下工作。 这可以减少开销。 但在不加密传输不存在安全风险的情况下,应考虑这一点。
- 可以在 scp 不允许的情况下恢复 rsync 中的不完整传输。
如果你没有 rsync 已安装,您可以使用包管理器安装它。
在 Ubuntu 和 Debian 中,您可以使用以下命令安装 rsync。
sudo apt install rsync
Linux中rsync命令的实用例子
这 rsync 命令具有以下结构
rsync [OPTIONS] Source Destination
在哪里 来源 和 目的地 可以是格式中的本地路径或远程路径 [email protected]:路径/到/文件
让我们通过一些有用的示例来看看如何使用 rsync 命令。
?️如果您有目录 A,请使用“A”而不是“A/”来提及它。 使用 A/ 将引用目录 A 中的所有文件,而不是目录 A 本身。 所以复制 A 将在目标中创建一个新目录,然后复制 A 中的文件。但是复制 A/ 只会将 A 中的文件复制到目标中。
1.同步本地文件 [One-way Sync]
从目录复制本地文件 一种 进入 备份目录,
rsync A/ Backup-A-dir/
此命令将目录 A 的文件(如果发现更改)复制到 Backup-A-dir。 这不会将 Backup-A-dir 中的任何额外文件复制到最初不在 A 中的 A 中。 这就是为什么它被称为单向同步。
2.同步远程文件 [One-way Sync]
要在远程系统和本地系统之间同步文件,命令类似。 请注意,源位置和目标位置可以是本地文件系统路径或远程系统 (ssh) 路径。
rsync dev/build [email protected]:~/Backup
3.双向同步
上面的命令将文件从源复制到目标。 但是如果系统有一些额外的文件不在源上,这些文件不会被单向同步删除。 如果需要,则必须使用双向同步。
要将两个端点(目录或文件)保持在相同状态且具有相同文件且两边没有额外内容,只需附加 -删除 原始命令的选项。
rsync A/ Backup-A-dir/ --delete
4.复制后删除源文件
如果您需要在传输完成后删除源中的文件, –删除源文件 选项应该派上用场。
rsync A/ Backup-A-dir/ --remove-source-files
你应该小心上面的命令。 只有在制作了足够的副本并且源中不再需要数据时,您才应该删除源。
5. 包含和排除文件
如果您需要(或不需要)传输名称与模式匹配的文件,
-包括 和 -排除 可以使用选项。 每个选项都应该在“=”符号后给出一个模式。
rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py
上面的命令复制所有带有扩展名的文件 .py 除了那些有扩展名的 .tmp.py。
您可以使用正则表达式作为模式。 了解更多 这里.
提示:如果任一选项的模式列表很大,您可以将其存储在一个文件中,您可以将它们的名称传递给 –include-from 和 –排除-从 选项。
6. 通过 SSH 进行 rsync
如果要通过 SSH 传输文件,则需要指定 ssh -e 选项。
rsync -e ssh A/ [email protected]:~/Backup-A-dir/
这是将文件传输到远程系统的最首选方式,因为它是加密的。 应该注意的是,由于加密会涉及开销。 因此,它可能需要比正常传输更多的时间。
为了使其工作,您应该启用在服务器端配置的 ssh 登录。 公钥和私钥也必须在各自的路径上。
要了解有关 ssh 及其设置的更多信息,请阅读有关客户端 SSH 配置和服务器端 SSH 配置的这些 LinuxHandBook 文章。
7.详细模式
Linux 中的大多数命令都有一个详细选项来在终端中记录命令的操作。 rsync 也不例外。
通过任一 -v 选项或-冗长的 选项来详细说明命令。 它将列出正在执行的操作及其进度。 这将在调试时非常有用。
rsync A/ Backup-A-dir/ -v -r
输出将类似于下面的输出
$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00
8. 试运行——运行但不要复制
如果您想知道将要复制的文件而不实际进行传输,您可以使用 –空运行( 或者 -n) 选项。
它像正常一样执行所有操作 rsync 命令除了复制部分之外。 它将列出将被复制或删除的文件(如果需要),然后在复制之前停止。
rsync -v A/ Backup-A-dir/ --dry-run
这将导致
$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
请注意,您需要使用 -v 选项以查看空运行命令的上述输出。 否则,将进行试运行,但不会显示结果。
9. 显示转账进度
如果要显示传输进度,请使用 -进步 选项。
rsync A/ Backup-A-dir/ --progress
上面的命令将显示一个类似于下面的进度条:
$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)
10. 压缩和传输数据
如果要节省网络带宽和时间,可以使用压缩要传输的数据 -z 选项。 它将在目的地自动解压缩。
当要传输的数据很大时,这个技巧可以节省大量的网络时间和成本。 小文件应该避免,因为开销处理超过了总时间。
rsync -z A/ Backup-A-dir/
请注意,应避免使用 -z 进行本地传输和小文件时的选项。 它会不必要地减慢速度。
11.递归复制文件和目录
以上所有命令只复制文件,而不是子目录(每个 Linux 命令的情况相同)。 因此,不会复制这些子目录中的文件。 这可以通过递归复制来消除。
要递归复制文件和目录, -r 可以使用选项。
rsync -r A/ Backup-A-dir/
12. 存档和保存元数据
如果您想保留文件的符号链接、时间戳、文件权限、用户和组所有权, -一种 可以使用选项。
rsync -a A/ Backup-A-dir/
此选项还包括以下功能 -r 选项。 因此它递归地复制文件并保留复制文件的元数据。
13.设置文件大小限制
为避免传输大文件,您可以设置文件大小限制 –最大尺寸 选项。 这有助于您检查将被复制的文件大小。
rsync --max-size="100K" A/ Backup-A-dir/
14.设置带宽限制
如果您对网络速度有任何限制,您可以在 –bwlimit 选项。 体重限制 应表示为 kbps.
rsync --bwlimit=100 A/ Backup-A-dir/
15. 使用 rsync 恢复下载
如果下载/传输不完整,您可以使用 rsync 命令保留不完整的下载,以便下次发出相同命令时可以继续传输。
要恢复传输, -附加 可以使用选项。
rsync --append A /Backup-A-dir/
这个 StackExchange 线程 是了解有关此主题的更多信息的好资源。
以上所有命令都是基本命令,并且在单个流或进程中复制文件。 如果有 5 TB 的数据,1 TB 传输需要 2 小时,则整个传输将持续 10 小时。 但是还有另一种方法可以加快传输速度
额外提示:加速 Rsync / 并行传输
平行线 是一个用于并行执行作业的 GNU 实用程序。 Rsync 可以很容易地与 rsync.
在 Ubuntu/Debian 系统中安装 GNU 并行使用
sudo apt install parallel
在我们进一步讨论之前,让我们了解并行是如何工作的。 让我们考虑一个类比。
假设有 1000 个鸡蛋和 100 个篮子,每个都有无人机。 任务是将其交付给客户。 经理为每个篮子分配 10 个鸡蛋,并命令无人机送货。 每架无人机执行一个操作(在我们的例子中 rsync 处理 10 个文件)。 经理监督所有的无人机。 请注意,无人机永远不会知道还有其他并行工作。 只有经理会。
同样,rsync 像无人机一样执行文件传输。 并行充当管理器。
平行线 拆分要发送的文件并生成指定数量的 rsync 进程,每个进程都有不同的文件列表。 并行只管理所有过程。 rsync 不知道并行的其他进程,也没有并行传输的功能。 Parallel 通过捆绑任务提供并行传输。
因此,并行命令由管道传输的两部分组成。 一个是参数(鸡蛋/文件),另一个是并行命令(管理器)。
ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/
在上面的命令中,输出中的每个文件/目录都是“|”之前的第一个命令的结果符号充当参数。 {} 表示并行命令中从左侧算起的参数。
-jn – 用于设置 n 个工作或工人。 在我们的例子中,n 是 20。
下一部分是每个参数的常用 rsync 命令。
命令生成后会被捆绑成20个进程并行执行。
请注意,您可以将任何选项添加到上述 rsync 命令,就像没有并行一样。 只需在上述命令中的单词 rsync 之后添加 rsync 选项(如 -z、-a、-e ssh)。
如果您想了解有关并行的更多信息,请参阅 这一页.
rsync 的常见错误
使用 rsync 时可能会遇到错误。 以下是一些常见问题及其故障排除技巧。
1. rsync 权限被拒绝
当您使用您没有适当权限的路径时,可能会发生此错误。 例如:
rsync B/ /home/
上面的命令会导致权限被拒绝错误,如果你没有写权限 /家/(普通用户通常不会这样做)
2. rsync 未能在 上设置时间
当文件系统无法处理文件和目录的修改时间时,就会发生这种情况。 你可以了解更多关于这个 这一页。
我希望您在本文中学到了一些很好的同步命令示例。 如果您有任何建议或意见,请随时在下方留言。