使用 rsync
可以非常高效地将文件或目录从一个服务器传输到另一个服务器。
能力:
- 支持 64 位文件、64 位 inode、64 位时间戳、64 位长整型
- 支持套接字对、符号链接、符号链接时间、硬链接、硬链接特殊文件、硬链接符号链接
- 支持 IPv6、访问时间(atimes)、批处理文件、就地更新、附加操作、ACLs、扩展属性、可选的隔离参数、字符集转换(iconv)、预分配
- 支持停止操作、无创建时间(crtimes)
优化:
- SIMD 优化、无汇编优化、OpenSSL 加密、无 MD5 汇编优化
校验和算法:
- xxh128、xxh3、xxh64 (xxhash)、MD5、MD4、SHA1、无校验
压缩算法:
- zstd、lz4、zlibx、zlib、无压缩
守护进程认证:
- sha512、sha256、sha1、md5、md4
rsync
完全不提供任何保证。这是自由软件,您可以在某些条件下重新分发它。详情请参见 GNU 通用公共许可证。
rsync
是一个文件传输程序,能够通过快速的差异化算法高效地进行远程更新。
01 安装
apt-get install rsync
02 使用
使用方法:
rsync [选项]... 源 [源]... 目标
或者 rsync [选项]... 源 [源]... [用户@]主机:目标
或者 rsync [选项]... 源 [源]... [用户@]主机::目标
或者 rsync [选项]... 源 [源]... rsync://[用户@]主机[:端口]/目标
或者 rsync [选项]... [用户@]主机:源 [目标]
或者 rsync [选项]... [用户@]主机::源 [目标]
或者 rsync [选项]... rsync://[用户@]主机[:端口]/源 [目标]### 选项:
- **`--verbose` 或 `-v`**:增加详细输出
- **`--info=FLAGS`**:细化信息输出的详细程度
- **`--debug=FLAGS`**:细化调试输出的详细程度
- **`--stderr=e|a|c`**:更改标准错误输出模式(默认:错误)
- **`--quiet` 或 `-q`**:抑制非错误消息
- **`--no-motd`**:抑制守护进程模式的 MOTD(消息)
- **`--checksum` 或 `-c`**:基于校验和跳过文件,而不是根据修改时间和大小
- **`--archive` 或 `-a`**:归档模式(即 `-rlptgoD`,不包括 `-A,-X,-U,-N,-H`)
- **`--no-OPTION`**:关闭隐式选项(例如,`--no-D`)
- **`--recursive` 或 `-r`**:递归进入目录
- **`--relative` 或 `-R`**:使用相对路径名称
- **`--no-implied-dirs`**:不与 `--relative` 一起发送隐式目录
- **`--backup` 或 `-b`**:制作备份(参见 `--suffix` 和 `--backup-dir`)
- **`--backup-dir=DIR`**:将备份制作到 `DIR` 指定的目录结构中
- **`--suffix=SUFFIX`**:备份的后缀(默认是 `~`,不使用 `--backup-dir`)
- **`--update` 或 `-u`**:跳过接收端已经更新的文件
- **`--inplace`**:就地更新目标文件
- **`--append`**:将数据附加到较短的文件
- **`--append-verify`**:附加并验证旧数据的文件校验和
- **`--dirs` 或 `-d`**:传输目录时不递归
- **`--old-dirs` 或 `--old-d`**:在与旧版 `rsync` 通信时,`--dirs` 的表现
- **`--mkpath`**:创建目标路径中缺少的组件
- **`--links` 或 `-l`**:保持符号链接为符号链接
- **`--copy-links` 或 `-L`**:将符号链接转换为它们指向的文件/目录
- **`--copy-unsafe-links`**:只转换“危险”的符号链接
- **`--safe-links`**:忽略指向树外的符号链接
- **`--munge-links`**:修改符号链接使其安全且不可用
- **`--copy-dirlinks` 或 `-k`**:将符号链接的目录转换为引用的目录
- **`--keep-dirlinks` 或 `-K`**:将接收端的符号链接目录视为目录
- **`--hard-links` 或 `-H`**:保持硬链接
- **`--perms` 或 `-p`**:保持权限
- **`--executability` 或 `-E`**:保持可执行权限
- **`--chmod=CHMOD`**:修改文件和/或目录的权限
- **`--acls` 或 `-A`**:保持 ACL(这会自动启用 `--perms`)
- **`--xattrs` 或 `-X`**:保持扩展属性
- **`--owner` 或 `-o`**:保持文件所有者(仅限超级用户)
- **`--group` 或 `-g`**:保持文件组
- **`--devices`**:保持设备文件(仅限超级用户)
- **`--copy-devices`**:将设备内容作为普通文件复制
- **`--write-devices`**:将数据写入设备作为文件(启用 `--inplace`)
- **`--specials`**:保持特殊文件
- **`-D`**:与 `--devices --specials` 相同
- **`--times` 或 `-t`**:保持修改时间
- **`--atimes` 或 `-U`**:保持访问时间
- **`--open-noatime`**:避免更改打开文件的访问时间
- **`--crtimes` 或 `-N`**:保持创建时间
- **`--omit-dir-times` 或 `-O`**:在 `--times` 时省略目录
- **`--omit-link-times` 或 `-J`**:在 `--times` 时省略符号链接
- **`--super`**:接收端尝试执行超级用户活动
- **`--fake-super`**:使用扩展属性存储/恢复特权属性
- **`--sparse` 或 `-S`**:将零序列转换为稀疏块
- **`--preallocate`**:在写入文件前预分配目标文件
- **`--dry-run` 或 `-n`**:进行试运行,不做任何更改
- **`--whole-file` 或 `-W`**:以整体文件方式复制文件(不使用差异传输算法)
- **`--checksum-choice=STR`**:选择校验和算法
- **`--one-file-system` 或 `-x`**:不要跨越文件系统边界
- **`--block-size=SIZE` 或 `-B`**:强制使用固定的校验块大小
- **`--rsh=COMMAND` 或 `-e`**:指定要使用的远程 shell
- **`--rsync-path=PROGRAM`**:指定远程机器上运行的 `rsync` 程序
使用 :
时通过远程 shell 连接,使用 ::
和 rsync://
连接时通过 rsync
守护进程,且要求源或目标以模块名称开头。
常用选项:
--verbose
或-v
:增加详细输出--quiet
或-q
:抑制非错误信息--checksum
或-c
:基于校验和而非修改时间和文件大小来跳过文件--archive
或-a
:归档模式,包括-rlptgoD
(不包括-A,-X,-U,-N,-H
)--recursive
或-r
:递归进入目录--links
或-l
:保持符号链接为符号链接--copy-links
或-L
:将符号链接转换为引用文件/目录--delete
:从目标目录删除多余的文件--dry-run
或-n
:执行试运行,不做任何更改--progress
:在传输过程中显示进度--compress
或-z
:在传输过程中压缩文件数据--exclude
:排除匹配特定模式的文件--include
:不要排除匹配特定模式的文件--bwlimit
:限制套接字 I/O 带宽--version
或-V
:打印版本信息并退出--help
或-h
:显示帮助信息
常用的守护进程相关选项:
--daemon
:启动rsync
守护进程--password-file
:从文件中读取守护进程的密码
错误代码和调试:
如果遇到问题或错误,rsync
会提供错误代码和详细的调试信息,可以通过 --debug
参数获取更详细的调试信息。
如果要查看完整的文档,可以使用 rsync(1)
和 rsyncd.conf(5)
手册,或访问 rsync 官方网站。
03 常用案例
基本命令格式:
rsync -avz /path/to/local/file_or_directory username@remote_host:/path/to/remote/directory
命令选项解释:
-a
:归档模式,等同于-rlptgoD
,表示递归复制并保留文件属性(如权限、时间戳等)。-v
:启用详细输出,显示传输过程。-z
:启用压缩传输,适合大文件,减少传输的数据量。username
:远程主机的用户名。remote_host
:远程主机的IP地址或域名。/path/to/remote/directory
:远程服务器上的目标目录。
例子 1:将本地文件传输到远程服务器
rsync -avz /home/user/file.txt username@remote_server:/home/username/target_directory
例子 2:将本地目录传输到远程服务器
rsync -avz /home/user/myfolder/ username@remote_server:/home/username/target_directory/
注意: /
在目录路径末尾的差异。末尾带 /
会将目录内容传输到目标目录中,不带 /
会传输整个目录。
例子 3:从远程服务器同步到本地服务器
rsync -avz username@remote_server:/home/username/remote_folder /local/destination_folder
常用
rsync -avzP -e "ssh -p 17226" /mnt/data/home/XXXX h4tk3rwu5w84thvx.XXX:/mnt/data/home/#/决定是整个目录,还是目录内部-a(归档模式):归档模式用于保留文件的符号链接、权限、时间戳、组和所有者等属性,相当于启用 -rlptgoD 选项。
-r:递归进入目录。
-l:保留符号链接。
-p:保留文件权限。
-t:保留修改时间。
-g:保留文件所属组。
-o:保留文件所有者。
-D:保留设备文件。
-v(详细模式):增加命令执行时的输出,显示哪些文件正在传输。
-z(压缩):在传输过程中压缩数据,以减少带宽使用。
-P:这个选项等同于 --partial --progress:
--partial:保持已传输的部分文件,即使传输中断,也不会丢失已传输的部分。
--progress:显示文件传输的进度。
-e "ssh -p 17226":使用 ssh 连接远程主机,并指定端口 17226。这是用来加密数据传输的协议,-p 选项指定 SSH 连接的端口。
/mnt/data/home/XXXX:本地源目录:rsync 将从这个路径开始同步文件。请注意,路径末尾有一个斜杠 /,这表示将同步目录内的所有内容。
h4tk3rwu5w84thvx.XXX:/mnt/data/home/:远程目标目录:数据将被传输到远程主机 h4tk3rwu5w84thvx.XXX 上的 /mnt/data/home/ 目录。
h4tk3rwu5w84thvx.XXX 是远程主机的地址,:/mnt/data/home/ 是目标路径。
常用额外选项:
-e ssh
:指定使用 SSH 作为传输协议(默认就是 SSH,但可以明确指定)。--progress
:显示传输进度。--delete
:删除目标目录中不再源目录中的文件。
例子 4:显示进度
rsync -avz --progress /home/user/myfolder/ username@remote_server:/home/username/target_directory/
例子 5:删除目标文件夹中源目录已删除的文件
rsync -avz --delete /home/user/myfolder/ username@remote_server:/home/username/target_directory/
注意:
- 使用
rsync
进行数据传输时,最好通过 SSH 进行连接。 - 通过添加选项如
-v
、-z
、--progress
等可以让你更好地控制和监控传输过程。 - 根据具体需要选择是否使用
--delete
来同步删除不再存在的文件。