Rsync是一个功能强大的增量备份,复制工具,rsync能够复制删除,增量同步本地和远程的文件或者目录,在本地复制方面能够替代cp 远程复制能够替代scp但是优于scp,本地和远程清空目录或者文件内容等又能够代替rm 而且效率比rm 更高。还能通过将其配置为守护进程,使其远程客户端推送或者拉取数据不需要二次写入密码。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-l, --links 保留软链结
-p, --perms 保持文件权限
-t, --times 保持文件时间信息
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息
-D, --devices 保持设备文件信息
--delete 删除那些DST中SRC没有的文件
--password-file=FILE
这个参数可以让我们指定一个密码文件,通过密码文件直接远程连接拉取或者推送要备份的数据,这个密码文件只需要写入一个密码,而且rsync只会读取第一行的内容。这种方法避免了交互模式下需要手动输入密码的操作,能够实现定时任务备份。
Rsync基本操作格式为 rsync 参数 /复制对象目录(复制谁) /目标目录(复制到哪里)
期中如果复制对象或者目录是远程的文件 下需要使用 ip:文件 格式默认省略了 root@ip:文件
例如:rsync -a /app/hello/ 172.16.1.41:/oldboy_dir/
参数 复制的对象 复制到哪里
复制文件 使用-a 保持源文件的属性信息以及递归复制文件夹
rsync -a /etc/sysconfig/ /app
注意:使用这个命令需要注意的地方是目录后面的/的使用,如下使用/代表,只复制目录下的所有文件,不包括当前文件夹。
[root@nfs01 app]# ls
[root@nfs01 app]# rsync -a /etc/sysconfig/ /app
[root@nfs01 app]# ls
acpid ip6tables network sandbox
atd ip6tables-config networking saslauthd
auditd ip6tables.old network-scripts selinux
authconfig iptables ntpd smartmontools
cbq iptables-config ntpdate sshd
clock iptables.old prelink sysstat
console irqbalance quota_nld sysstat.ioconf
cpuspeed kdump raid-check system-config-firewall
crond kernel readahead system-config-firewall.old
grub keyboard readonly-root udev
i18n modules rngd
init netconsole rsyslog
不加/重新复制,进行测试,首先删除掉app文件夹下所有内容
[root@nfs01 app]# rsync -a /etc/sysconfig /app
[root@nfs01 app]# ls
sysconfig
可以看到,已经复制此目录以及目录下的所有文件。
环境:
nfs01 服务器和:172.16.1.31
backup服务器两台:172.16.1.41
目标:在nfs01服务器操作 将本地/etc/passwd 复制到backup服务器的/tmp中
nfs01端:
[root@nfs01 app]# rsync -a /etc/passwd 172.16.1.41:/tmp
The authenticity of host '172.16.1.41 (172.16.1.41)' can't be established.
RSA key fingerprint is b1:20:60:4f:cc:f2:b4:bf:66:4a:c1:12:54:78:93:74.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.41' (RSA) to the list of known hosts.
root@172.16.1.41's password:
[root@nfs01 app]#
Backup端:
[root@backup tmp]# ls
passwd
[root@backup tmp]#
远程操作和本地操作,一样可行,这里演示远程操作清空文件内容和目录
首先测试一下文件的内容情况,清空文件或目录首先要创建一个空的文件或者目录来进行数据覆盖。这里操作删除需要使用--delete参数配合
清空一个文件:
创建一个空的文件null.txt
Back服务器:清空前
[root@backup oldboy_dir]# ls
a b c d e hh tmp
[root@backup oldboy_dir]# cat a
hello
Nfs01服务器:清空
[root@nfs01 app]# touch null.txt
[root@nfs01 app]# ls
null.txt
[root@nfs01app]#rsync -a (--delete) /app/null.txt 172.16.1.41:/oldboy_dir/a
root@172.16.1.41's password:
[root@nfs01 app]#
Back服务器:清空后
[root@backup oldboy_dir]# ls
a b c d e hh tmp
[root@backup oldboy_dir]# cat a
[root@backup oldboy_dir]#
可以看到已经清空 而且测试的结果不使用--delete也是可以清空文件内容的,但清空目录必须使用--delete
清空一个目录:
创建一个空的目录null
[root@nfs01 app]# mkdir null
[root@nfs01 app]#
Back服务器:清空前
[root@backup oldboy_dir]# ls
a b c d e hh tmp
Nfs01服务器:清空
[root@nfs01 app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/
root@172.16.1.41's password:
[root@nfs01 app]#
Back服务器:清空后
[root@backup oldboy_dir]# ls
[root@backup oldboy_dir]#
已经清空
默认linux中是没有rsync的配置文件的。需要我们自自己创建,默认识别的配置文件是/etc/rsyncd.conf
创建它并写入配置:如下
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
详解配置文件:
uid = rsync #指定rsync进程启动的虚拟用户名
gid = rsync #指定rsync进程用户组
use chroot = no #是否修改根路径 安全配置,没多大用
max connections = 200 #rsyn最大连接数 rsyn最多可以同时链接过来的数量
timeout = 300 #超时时间,达到这个时间没有响应之后自动踢出用户,解除占用
pid file = /var/run/rsyncd.pid #指定pid存放的路径
lock file = /var/run/rsync.lock #指定socket信息存放的路径
log file = /var/log/rsyncd.log #指定日志文件存放的路径
ignore errors #忽略错误警告
read only = false #是否只读模式
list = false #是否列出目录
hosts allow = 172.16.1.0/24 #白名单
hosts deny = 0.0.0.0/32 #黑名单
auth users = rsync_backup #指定可以连接的用户名
secrets file = /etc/rsync.password #指定用户账号密码的配置文件
[backup] #模块的名字,相当于一个变量或者容器
comment = "backup dir by oldboy" #注释
path = /backup #备份或者拉取数据的路径
创建配置文件中指定的用户信息:touch /etc/rsync.password
echo 'rsync_backup:oldboy123'>/etc/rsync.password
注意:这里需要指定600权限,否则会出现错误。
chmod 600 /etc/rsync.password
创建rsync的用户和用户组
Useradd -M -s /sbin/nologin rsync
创建备份目录
mkdir /backup
给/backup rsync权限
chown rsync.rsync /backup
启动rsync服务端进程
rsync --daemon
查看进程是否产生:
[root@backup oldboy_dir]# ps -ef |grep rsync
root 3482 1 0 12:40 ? 00:00:00 rsync --daemon
root 3891 3606 0 16:41 pts/0 00:00:00 grep rsync
到这里已经配置好服务器端。
rsync客户端链接服务器端使用格式
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
[OPTION...] ---命令相关参数
[USER@] ---远程连接认证用户身份信息,认证用户为一个虚拟用户,不需要进行创建
HOST:: ---远程主机地址信息,或者可以写为远程主机名称信息
SRC... ---要进行远程传输备份的远程模块信息
[DEST] ---把远程数据备份到本地什么位置
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
[OPTION...] ---命令相关参数
[USER@] ---远程连接认证用户身份信息,认证用户为一个虚拟用户,不需要进行创建
HOST:: ---远程主机地址信息,或者可以写为远程主机名称信息
SRC... ---本地要进行远程传输复制的文件或目录信息
DEST ---要进行远程传输备份的远程模块信息
Backup服务器:推送数据前
[root@backup backup]# ls
[root@backup backup]#
Nfs01服务器:推送数据
[root@nfs01 app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/
root@172.16.1.41's password:
[root@nfs01 app]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 201 bytes received 27 bytes 41.45 bytes/sec
total size is 371 speedup is 1.63
Backup服务器:推送数据后
[root@backup backup]# ls
hosts
[root@backup backup]#
已经接收到推送过来的数据。
在这里我们输入的密码是oldboy123 不再是root的密码了。也指定了固定的用户,虽然数据内容安全方面得到了加密,但是每次输入密码也是非常麻烦的,在rsync工具中,可以使用非交互式来进行文件的备份功能。
在客户端nfs01服务器创建一个文件,里面存放oldboy123这个密码:
[root@nfs01 /]# cat rsync.passwd
oldboy123
设置权限为600 不设置会出问题。
[root@nfs01 /]# ll rsync.passwd
-rw------- 1 root root 10 Nov 28 14:25 rsync.passwd
免输入密码进行备份测试:
Backup服务器:备份前
[root@backup backup]# ls
[root@backup backup]#
Nfs01客户端:备份
[root@nfs01 /]# rsync -avz /tmp rsync_backup@172.16.1.41::backup --password-file=/rsync.passwd
sending incremental file list
tmp/
tmp/a.out
tmp/passwd
sent 139 bytes received 50 bytes 378.00 bytes/sec
total size is 0 speedup is 0.00
Backup服务器:备份前
[root@backup backup]# tree
.
└── tmp
├── a.out
└── passwd
1 directory, 2 files
至此,rsync的基本用法已经介绍完。
原文地址:http://blog.51cto.com/songxiao/2045386