简介
rsync 是 linux 上开源的文件备份工具。本地环境下可以替代 cp,远程环境下可以替代 scp (前提是两台服务都要安装 rsync)。
安装
在 ubuntu 上,一般都已经安装了 rsync, 如果没有,则可以手动安装
apt install rsync -y
基础命令
命令格式:rsync [options] [src] [dest]
示例:
rsync -r doc/ backup/
rsync 的命令很多,但是常用的就那么几个
-r 表示递归
-a 可以替代-r,除了可以递归外,还可以同步元信息(比如修改时间、权限等)
--delete 删除目标文件夹中存在,但是源目录中不存在的文件
--exclude 排除文件
--include 必须同步的文件
增量备份
本地模式
#!/bin/bash
SOURCE_DIR=/home/pushsoft/doc # 源目录
BACKUP_DIR=/home/pushosft/bak # 备份根目录
DATETIME=$(date '+%Y%m%d_%H%M%S') # 时间
BACKUP_PATH=$BACKUP_DIR"/"$DATETIME # 备份的完整路径
LATEST_LINK=$BACKUP_DIR"/latest" # 最新的备份的软连接
mkdir -p $BACKUP_DIR # 创建备份根目录
rsync -avcP --delete \
--link-dest $LATEST_LINK \ # 以 LATEST_LINK 作为比较基准,相同的文件则创建硬链接
$SOURCE_DIR"/" \ # 源目录
$BACKUP_PATH # 备份的完整路径
rm -rf $LATEST_LINK # 移除旧的软连接
ln -s $BACKUP_PATH $LATEST_LINK # 创建软链接
远端模式
如果要以进行远端备份,则需要将目标的服务器以daemon模式运行
配置daemon模式运行
创建 /etc/rsyncd.conf
文件,并添加以下内容:
# 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证用户对文件有读取的权限;如果是从客户端=>服务端,要保证用户对文件有写权限。
uid = root
gid = root
# 允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下,chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
use chroot = yes
# read only =no #只读为假(可写)
read only = no
# 只写
write only = no
# 设定白名单,可以指定IP段(172.xx.xx.1/255.255.255.0),各个Ip段用空格分开
hosts allow = 192.xx.xx.111
# 设置黑名单
hosts deny = *
# 允许的客户端最大连接数,根据最多一次性同步的agent数量设置
max connections = 10
# rsync监听端口
port = 873
# IP地址,启动rsync报错failed: Cannot assign requested address (address-family 2) unable to bind any inbound sockets on port 873,把rsyncd.conf中的address改为127.0.0.1
address = 127.0.0.1
# 欢迎(同步过程中展示的提示)文件的路径,非必须
motd file = /etc/rsync/rsyncd.motd
# 进程对应的进程号pid文件路径
pid file = /var/run/rsyncd.pid
# 锁文件路径
lock file = /data/rsync/rsyncd.lock
# 记录传输文件日志
transfer logging = yes
# 日志文件格式
log format = %t %a %m %f %b
# 指定日志文件
log file = /var/log/rsync.log
# 剔除某些文件或目录,不同步
exclude = lost+found/
# 设置超时时间
timeout = 900
ignore nonreadable = yes
# 设置不需要压缩的文件
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 忽略错误
ignore errors
# 添加注释
comment = ftp export area
# 模块验证的用户名称,可使用空格或者逗号隔开多个用户名
auth users = rsync
# 模块验证密码文件 可放在全局配置里
secrets file = /etc/rsync/rsync.passwd
# 剔除某些文件或目录,不同步
exclude = lost+found/ conf/ man/
# 模块名称,同步时可以根据配置的模块名称找到要同步模块的目录,可以配置多个,使用如: sate@192.xx.xx.xxx::source
[cv]
# cv模块的根目录,同步目录,要注意权限
path = ~/cv
# 是否允许列出模块内容
list = yes
[nav]
# 导航模块的根目录,同步目录,要注意权限
path = ~/nav
# 是否允许列出模块内容
list = yes
[net]
# 网络监测模块的根目录,同步目录,要注意权限
path = /var/log/net
# 是否允许列出模块内容
list = yes
创建密钥文件,/etc/rsync.passwd
, 写入用户名和密码,并且设置权限为600
echo "rsync:123456">>/etc/rsync.passwd
chmod -R 600 /etc/rsync.passwd
启动rsync,
rsync --daemon
如果需要,重启则可以
pkill rsync # 停止
rsync --daemon # 启动
增量同步
交互模式
rsync -avcP --delete [源目录] [用户名]@[服务器IP]::[模块]
非交互模式
首先需要像服务器一样创建 /etc/rsync.passwd
文件,只不过只要写入密码即可
echo "123456">>/etc/rsync.passwd
chmod -R 600 /etc/rsync.passwd
备份
rsync -avcP --delete --password-file=/etc/rsync.passwd --delete [源目录] [用户名]@[服务器IP]::[模块]
其他参数说明
-a、--archive 参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。
--append 参数指定文件接着上次中断的地方,继续传输。
--append-verify 参数跟--append参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。
-b、--backup 参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由--suffix参数指定的文件后缀名,默认是~。
--backup-dir 参数指定文件备份时存放的目录,比如--backup-dir=/path/to/backups。
--bwlimit 参数指定带宽限制,默认单位是 KB/s,比如--bwlimit=100。
-c、--checksum 参数改变rsync的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。
--delete 参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。
-e 参数指定使用 SSH 协议传输数据。
--exclude 参数指定排除不进行同步的文件,比如--exclude="*.iso"。
--exclude-from 参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。
--existing、--ignore-non-existing 参数表示不同步目标目录中不存在的文件和目录。
-h 参数表示以人类可读的格式输出。
-h、--help 参数返回帮助信息。
-i 参数表示输出源目录与目标目录之间文件差异的详细情况。
--ignore-existing 参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。
--include 参数指定同步时要包括的文件,一般与--exclude结合使用。
--link-dest 参数指定增量备份的基准目录。
-m 参数指定不同步空目录。
--max-size 参数设置传输的最大文件的大小限制,比如不超过200KB(--max-size='200k')。
--min-size 参数设置传输的最小文件的大小限制,比如不小于10KB(--min-size=10k)。
-n 参数或--dry-run参数模拟将要执行的操作,而并不真的执行。配合-v参数使用,可以看到哪些内容会被同步过去。
-P 参数是--progress和--partial这两个参数的结合。
--partial 参数允许恢复中断的传输。不使用该参数时,rsync会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append或--append-verify配合使用。
--partial-dir 参数指定将传输到一半的文件保存到一个临时目录,比如--partial-dir=.rsync-partial。一般需要与--append或--append-verify配合使用。
--progress 参数表示显示进展。
-r 参数表示递归,即包含子目录。
--remove-source-files 参数表示传输成功后,删除发送方的文件。
--size-only 参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。
--suffix 参数指定文件名备份时,对文件名添加的后缀,默认是~。
-u、--update 参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。
-v 参数表示输出细节。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。
--version 参数返回 rsync 的版本。
-z 参数指定同步时压缩数据。