与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
我们使用wget进行下载,安装包下载完毕后,我们开始解压并安装
wget https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz
tar -xf rsync-3.1.3.tar.gz
./configure
make &&make install
rsync源码安装会把rsync默认安装到/usr/local/目录下,我们可以通过相关帮助进行查看到。如下:
./configure --help
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
源码方式安装的rsync,要使其开机启动的话。我们可以直接把启动命令放入到rc.local文件中。如下:
echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local
rsync安装完毕后,我们来查看下rsync命令的帮助,如下:
rsync --help
rsync version 3.1.3 protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, no ACLs, xattrs, iconv, symtimes, prealloc
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.
Usage: rsync [OPTION]... SRC [SRC]... DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
or rsync [OPTION]... [USER@]HOST:SRC [DEST]
or rsync [OPTION]... [USER@]HOST::SRC [DEST]
or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.
Options
-v, --verbose increase verbosity
--info=FLAGS fine-grained informational verbosity
--debug=FLAGS fine-grained debug verbosity
--msgs2stderr special output handling for debugging
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see manpage caveat)
-c, --checksum skip based on checksum, not mod-time & size
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-R, --relative use relative path names
--no-implied-dirs don't send implied dirs with --relative
-b, --backup make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX set backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place (SEE MAN PAGE)
--append append data onto shorter files
--append-verify like --append, but with old data in file checksum
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the source tree
--munge-links munge symlinks to make them safer (but unusable)
-k, --copy-dirlinks transform symlink to a dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-p, --perms preserve permissions
-E, --executability preserve the file's executability
--chmod=CHMOD affect file and/or directory permissions
-X, --xattrs preserve extended attributes
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve modification times
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse turn sequences of nulls into sparse blocks
--preallocate allocate dest files before writing them
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (without delta-xfer algorithm)
--checksum-choice=STR choose the checksum algorithms
-x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE force a fixed checksum block-size
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on the remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that already exist on receiver
--remove-source-files sender removes synchronized files (non-dirs)
--del an alias for --delete-during
--delete delete extraneous files from destination dirs
--delete-before receiver deletes before transfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from destination dirs
--ignore-missing-args ignore missing source args without error
--delete-missing-args delete missing source args from destination
--ignore-errors delete even if there are I/O errors
--force force deletion of directories even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at transfer's end
-m, --prune-empty-dirs prune empty directory chains from the file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
--groupmap=STRING custom groupname mapping
--chown=USER:GROUP simple username/groupname mapping
--timeout=SECONDS set I/O timeout in seconds
--contimeout=SECONDS set daemon connection timeout in seconds
-I, --ignore-times don't skip files that match in size and mod-time
-M, --remote-option=OPTION send OPTION to the remote side only
--size-only skip files that match in size
-@, --modify-window=NUM set the accuracy for mod-time comparisons
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with a suffix in LIST
-C, --cvs-exclude auto-ignore files the same way CVS does
-f, --filter=RULE add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *-from/filter files are delimited by 0s
-s, --protect-args no space-splitting; only wildcard special-chars
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
--blocking-io use blocking I/O for the remote shell
--stats give some file-transfer stats
-8, --8-bit-output leave high-bit chars unescaped in output
-h, --human-readable output numbers in a human-readable format
--progress show progress during transfer
-P same as --partial --progress
-i, --itemize-changes output a change-summary for all updates
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read daemon-access password from FILE
--list-only list the files instead of copying them
--bwlimit=RATE limit socket I/O bandwidth
--outbuf=N|L|B set output buffering to None, Line, or Block
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating destination
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (-h is --help only if used alone)
rsync几个重要参数
我们先在此大致介绍下经常使用的几个参数:-v,-a,-z
rsync六种工作模式
除此上述几个参数之外,我们还注意到上图中rsync的七个命令格式:如下:
1)rsync [OPTION]... SRC [SRC]... DEST
2)rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
3)rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
4)rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
5)rsync [OPTION]... [USER@]HOST:SRC [DEST]
6)rsync [OPTION]... [USER@]HOST::SRC [DEST]
7)rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
这七个命令格式就是代表rsync六种不同的工作模式,其中第四种和第七种模式没有多大的区别。在这几种模式中第三种和第六种模式是我们经常使用的,特别是第三种模式。
这六种模式总体上可以用两个词进行区分:推送、拉取。
推送就是在客户端上执行rsync命令,目的是把客户端需要同步的文件推送到服务器上。
拉取也是在客户端上执行rsync命令,目的是把服务器上的文件拉取到本地。
注意:无论是推送和拉取,rsync命令都是在客户端执行,只是命令的格式不同而已。
1) rsync [OPTION]... SRC [SRC]... DEST
同步本地文件,从一个目录同步到另外一个目录。
rsync -avz /data /backup
表示把本地/data目录下的文件同步到本地/backup目录下。
2) rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
使用一个远程shell程序(如rsh、ssh)来实现把本地的文件同步到远程机器上。此种方式属于推送方式。
rsync -avz /data [email protected]:/backup
表示把本地/data目录下的文件同步到服务器192.168.199.247的/backup目录下。
3) rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
把本地的文件同步到远程服务器上,其中DEST表示的是rsync服务器的认证模块名。此种方式属于推送方式。
rsync -avz /data [email protected]::backup --password-file=/etc/rsyncd.password
表示把本地/data目录下的文件同步到服务器192.168.199.247的backup模块下path路径下。
4) rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
列出远程机器的文件列表。这类似于ls命令,不过只要在命令中省略掉本地机信息即可。
rsync -v rsync://[email protected]/backup
表示在本机列出服务器192.168.199.247的/backup目录下的内容,
5) rsync [OPTION]... [USER@]HOST:SRC [DEST]
把远程机器的文件同步到本地,此种方式属于拉取方式。
rsync -avz [email protected]:/backup /data
表示把192.168.199.247的/backup目录下文件同步到本地/data目录下。
6) rsync [OPTION]... [USER@]HOST::SRC [DEST]
把远程机器的文件同步到本地,此种方式属于拉取方式。
rsync -avz [email protected]::backup --password-file=/etc/rsyncd.password /data
表示把192.168.199.247的backup模块path路径下的文件同步到本地/data目录下。
rsync安装完毕后,我们就需要配置rsync。而对于rsync服务器来说,最重要和最复杂的就是它的配置了。
rsync的配置分为服务器端和客户端,下面我们分开一一讲解。
rsync服务器端配置
rsync服务器端需要两个配置文件:rsyncd.conf、rsyncd.password。
其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.password主要用于存储rsync用户名和密码。
但是在rsync安装完毕后后是不会生成以上这两个配置文件的,需要我们手工进行创建。
rsyncd.conf配置文件内容如下:
uid = root
gid = root
user chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
[backup]
path = /backup/
ignore errors
read only = no
list = no
hosts allow = 192.168.199.0/255.255.255.0
auth users = test
secrets file = /etc/rsyncd.password
[www]
path = /www/
ignore errors
read only = no
list = no
hosts allow = 192.168.199.0/255.255.255.0
auth users = apache
secrets file = /etc/rsyncd.password
rsync默认是在nobody用户下运行的,但是我们为了以后同步时不为各种权限的事情烦恼,就让其在root用户下运行。
配置文件创建完毕后,我们来创建密码文件。如下:
echo "test:test">>/etc/rsyncd.password
echo "apache:apache">>/etc/rsyncd.password
cat /etc/rsyncd.password
注意:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户存在。
密码文件创建完毕后,要把其权限要设置为600,否则会在以后同步时提示验证出错。如下:
chmod 600 /etc/rsyncd.password
一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。其中每一个认证模块可以对应不同的客户端。
以上两个文件创建完毕后,我们来创建其对应的目录并授权,如下:
mkdir /{backup,www}
chown root:root –R /backup/
chown root:root –R /www/
以上就是rsync服务器端的配置。
rsync客户端配置
rsync客户端配置与服务器端相比差别还是比较大的。
在客户端安装完毕rsync服务后,是不需要启动rsync服务的。我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。
该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。
当然该密码文件不创建也是可以的,不创建的话。我们在执行rsync操作时,就需要输入rsync的对应用户的密码。如下:
echo "test">>/etc/rsyncd.password
echo "apache">>/etc/rsyncd.password
chmod 600 /etc/rsyncd.password
注意:该密码文件中只能存放一个用户的密码,并且该文件与rsync服务器端的密码文件一样也需要把其权限设置为600。
以上就是rsync客户端的配置。
rsync服务器端与客户端都配置完毕后,我们就可以来启动rsync服务器,并且也可以关闭rsync服务。
启动rsync服务
在前面我们讲过rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件,客户端启动不启动rsync服务。
在此我们只讲解rsync-daemon认证方式的启动。如果是源码方式安装的rsync,我们可以使用rsync –daemon来启动rsync。如下:
echo PATH=$PATH:/usr/local/bin/>>/etc/profile
source /etc/profile
rsync --daemon
ps aux |grep rsync
netstat -tunlp |grep 873
注意:上述命令行中,只有rsync --daemon才是启动rsync的命令。并且该命令启动时,会默认加载/etc/rsyncd.conf文件。
所以如果rsync的配置文件不在/etc目录下或者rsync配置文件名不为rsyncd.conf,那么我们在启动rsync服务时,就要手工加上该配置文件的完整路径。方法如下:
rsync --daemon --config=/etc/rsyncd.conf
关闭rsync服务
要关闭rsync服务,如果是源码方式安装的,我们可以直接通过pkill rsync命令进行关闭。如下:
pkill rsync
rsync服务正常启动后,我们就要切换到客户端来实际同步一个文件。
现在rsync服务器是192.168.199.247,rsync客户端为192.168.199.248。
首先在rsync服务器192.168.199.247的www模块下/www/目录下新建一个文件247.log,内容如下:
vi /www/247.log
this is server 247 www.
然后在rsync客户端192.168.199.248的/root下新建一个www目录,并在此目录下创建一个文件248.log,内容如下:
mkdir www
vi /www/248.log
this is client 248 www.
把248文件推送到247上
要把rsync客户端192.168.199.248文件推送到rsync服务器192.168.199.247上,我们需要使用到rsync帮助命令中的第三种命令,如下:
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
有关这个命令的作用,我们在前面已经介绍过了,就是把本地的文件同步到远程服务器上。
具体使用方法,如下:
rsync -avz /root/www/* [email protected]::www --password-file=/etc/rsyncd.password
把247文件拉取到248上
要把rsync服务器192.168.199.247的文件拉取到rsync客户端192.168.199.248上,我们需要使用到rsync帮助命令中的第六个命令,如下:
rsync [OPTION]... [USER@]HOST::SRC [DEST]
有关这个命令的作用,我们在前面已经介绍过了,就是把远程机器的文件同步到本地。
具体使用方法,如下:
rsync -avz [email protected]::www --password-file=/etc/rsyncd.password /root/www/