1,rsync简介
Rsync是一个快速和异常灵活的文件复制工具,它能够通过remote shell (rsh,ssh)或remote rsync daemon 来实现本地到或从远程主机的复制。它提供了大量选项来控制行为的方方面面,能够弹性定义复制文件的属性,通过delta-transfer 算法,只发送源和目标不同的文件来降低网络数据传输量。rsync作为增强的copy命令广泛的用于镜像和备份。
rsync的额外特性:
1、支持复制文件保存文件的软硬链接,属主,属组,权限等。
2、类似于GNU tar的exclude ,exclude from选项。
3、 CVS排除模式,忽略CVS要求的相同文件。
4、能够便用任何远程shell,如rcp、ssh等方式来传输文。
5、不要求超级用户特 权。
6、流水式文件传输最小化传输延时。
7、支持匿名或验证的rsync。
在没有建立rsync服务器的情况下,我们可以利用 rsync命令直接进行快速的差异备份:
2,命令格式:
#rsync [option] 源路径 目标路径
其中:
[option]:
a:使用 archive模式,等于-rlptgoD,即保持原有的文件权限
z:表示传输时压缩数据
v:显示到屏幕中
e:使用远程 shell程序(可以使用rsh或ssh)
--delete:精确保存副本,源主机删除的文件,目标主机也会同步删除
--include=PATTERN: 不排除符合PATTERN的文件或目录
--exclude=PATTERN:排除所有符合PATTERN的文件或目录
--password- file:指定用于rsync服务器的用户验证密码
源路径和目标路径可以使用如下格式:
rsync://[USER@]Host[:Port]/Path <--rsync服务器路径
[USER@]Host::Path <--rsync服务器的另一种表示形式
[USER@]Host:Path <--远程路径
LocalPath <--本地路径
※ 需要注意的是,来源或目的路径最少要有一个是本地路径,如果忽略本地路径,则只会列出远端的文件列表。
例子:
#rsync -ave ssh test:/home/ftp/pub/ /home/ftp/pub/
把源路径中远端test机器上的/home/ftp/pub/目录中的内容,通过rsync同步到本地的/home/ftp/pub/目录下。
◎ 小心源路径结尾时候的/号,后缀/通知rsync复制该目录的内容,但不复制目录本身。
例如:
#rsync -ave ssh test:/home/ftp/pub /home/ftp/
则会把pub目录整个同步到本地/home/ftp/路径中
#rsync -azv --delete rsync://linuxing@192.168.1.100/blog /var/www/html/
通过linuxing登陆到192.168.1.100中,同步rsync服务器的blog项到本地的/var/www/html/,并删除本地上 源路径中不存在的文件或目录。
※千万要注意--delete参数,在使用此参数的时候,建议用绝对路径指定本地目录,防止清空当前目录。
3,服务器端设置:
修改配置文件
vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no # 不使用chroot
max connections = 4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[test] #rsync区段
path = /var/www/html/test #需要同步的目录
comment = test folder #注释
ignore errors #忽略错误
read only = yes #只读
list = no #不能列表
auth users = webrsync #连接rsync服务的用户名
secrets file = /etc/rsyncd.secrets #指定存放帐号密码的位置
创建帐号密码文件:
vi /etc/rsync.pass
webrsync:myrsynpass
保 存后,需要保证用户是root,权限是600,否则会出现验证错误。
chown root.root /etc/rsync.pass
chmod 600 /etc/rsync.pass
启动服务:
rsync --daemon
设成开机启动的两种方式:
a,修改inetd.conf下的rsync
编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873
修改/etc /xinetd.conf下的rsync
sed -i -e "/disable/{ s/yes/no/ }" /etc/xinetd.d/rsync
service xinetd.d restart
b,将命令写到启动文件中
echo "rsync --daemon" >> /etc/rc.local
4,客设端设置:
rsync -vzrtopg --progress --delete webrsync@192.168.21.1::test /tmp/
password:
receiving file list ... done
下面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如 属主、时间的参数。--progress是指显示出详细的进度情况,--delete是指如
果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。后面的webrsync@ip中,webrsync是指定密码文件中的用 户名,之后的::test这一inburst是模块名
,也就是在/etc/rsyncd.conf中自定义的名称。最后的/tmp是备份到本地的目录名。
在客户端通过指过--password-file,可以不用输入密码,这样在脚本只不有输入密码,这求在客户端也创建密码文件:
vi /etc/rsync.pass,只输入要验证用户的密码,chmod 600 /etc/rsync.pass
然后重新运行命令
rsync -vzrtopg --progress --delete webrsync@192.168.21.1::test /tmp/ --password-file=/etc/rsync.pass
5,设成定时运行
crontab -e
0 2 * * *
rsync -vzrtopg --progress --delete webrsync@192.168.21.1::test /tmp/ --password-file=/etc/rsync.pass
或者编写脚本:
rsync.sh
#!/bin/sh
DATE=`date +%w`
rsync -vzrtopg --progress --delete webrsync@192.168.21.1::test /tmp/ --password-file=/etc/rsync.pass > /var/log/rsync.$DATE
chmod +x rsync.sh
添加到cron里运行。
6,其它使用方法:
比如我的客户端想要复制服务器端的两个或更多个文件或目录,可通过下面的方式:
rsync -av host:file1 :file2 host:file{3,4} /dest/
rsync -av host::modname/file{1,2} host::modname/file3 /dest/
rsync -av host::modname/file1 ::modname/file{3,4}
这里如我的客户端要从服务器端同步两个文件夹,test和 web
在服务器端的rsyncd.conf
[test]
path = /var/www/html/test #注意这里是test不是test/,它将在目标目录下新建文件夹test而不是复制test下的所有文件
comment = test folder
ignore errors
read only = yes
list = no
auth users = webrsync
secrets file = /etc/rsyncd.secrets
[web]
path = /var/www/html/web #同上
comment = web folder
ignore errors
read only = yes
list = no
auth users = webrsync
secrets file = /etc/rsyncd.secrets
在客户端运行:
rsync -vzrtopg --progress --delete webrsync@192.168.21.1::test webrsync@192.168.21.1:web /tmp --password-file=/etc/rsync.pass
会在客户端的 tmp目录下新建两个文件夹test和web,将两个文件夹下的内容同步过来。
7,参考脚本:
1、每隔七天将数据往中心服务器做增量备份
#!/bin/sh
# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called "current"
# tridge@linuxcare.com
# directory to backup
BDIR=/home/$USER
# excludes file - this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes
# the name of the backup machine
BSERVER=owl
# your password on the backup server
export RSYNC_PASSWORD=XXXXXX
########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current
2、备份至一个空闲的硬盘
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
3、对vger.rutgers.edu的cvs树进行镜像
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0
4、利用find的一种巧妙方式
rsync -avR remote:'`find /home -name "*.[ch]"`' /tmp/
可以用这种方法列出需要备份的文件列表——这种方法似乎比较少人用到。
相关推荐
本文将详细介绍如何在Linux系统中配置rsync进行文件夹同步,包括准备工作、安装过程、服务端与客户端的配置步骤,以及如何通过脚本实现定时同步。 #### rsync简介 rsync是一种用于文件传输的开源软件,其核心功能...
通过这篇图解 rsync 数据同步部署文档,我们可以了解 rsync 的基本概念、同步算法、Windows 和 Linux 平台下的安装和配置方法,以及详细的文件同步方法说明。学会使用 rsync 工具,可以帮助我们快速、可靠地实现文件...
Windows 平台下使用 rsync 实现文件同步是通过在服务器端和客户端安装 cwRsync 软件来实现的。cwRsync 是一个基于 rsync 的同步工具,能够实现文件的双向同步。 在服务器端,需要安装 cwRsyncServer,并配置 rsyncd...
**Rsync实现文件备份同步详解** 在IT领域中,数据备份和同步是非常关键的操作,确保了数据的安全性和可用性。Rsync(Remote Sync)是一种高效、功能强大的文件同步工具,常用于实现本地或远程文件的备份与同步。...
shell脚本实现通过Rsync批量同步Windows共享的文件夹 用到了循环和数组,通过mount.cifs挂载windows共享(老服务器SMB1.0也适用) 参考我自己写的文章: ...
Rsync 实现 Linux 系统间的远程同步和增量备份方案及搭建流程 1. Rsync 简介 Rsync 是一个开源的文件同步工具,由 Andrew Tridgell 和 Paul Mackerras 开发。它可以实现跨系统的文件同步和备份,具有高效、可靠、...
《使用CentOS7配置rsync实现文件同步》 rsync是一款强大的文件同步工具,它能够高效地在不同服务器之间同步目录和文件,尤其在Linux环境中广泛使用。rsync的特性在于其采用的“rsync算法”,该算法仅传输文件的差异...
3. 使用rsync实现文件同步 4. 使用inotify监控文件系统的变化 5. 创建rsync复制脚本 6. 配置文件的编写和解释 注意:在实现rsync+inotify方案时,需要注意密码文件的安全问题,密码文件需要给600权限,以避免安全...
2. **文件过滤**:用户可以通过指定规则排除或包含某些文件和目录,实现特定的同步需求。 3. **同步模式**:Rsync支持单向同步(只发送不接收,或者只接收不发送)和双向同步,根据实际场景灵活选择。 配置Rsync的...
rsync数据同步手册 rsync是一种快速、可靠的文件同步工具,广泛应用于数据备份、同步和复制。下面是关于rsync数据同步...rsync数据同步手册提供了rsync的使用指南,可以帮助我们更好地使用rsync实现数据同步和备份。
通过以上步骤,我们成功配置了Ubuntu Server上的Rsync服务端,并实现了与Windows cwRsync客户端的数据同步。这样不仅可以提高数据备份的效率,还能确保数据的安全性和完整性。在实际应用中,可以根据需求调整同步...
Rsync通过只同步源和目标之间发生变化的部分来节省带宽和时间,支持多种同步模式,包括全备份、差异备份和增量备份。此外,Rsync能够保持文件的权限、时间戳、软硬链接等属性不变,并且可以通过SSH、SCP或直接socket...
使用 Rsync + inotify 实现实时远程同步 Rsync 是一个功能强大且广泛使用的文件同步工具,它可以快速、安全、可靠地同步文件。在服务器之间同步文件时,Rsync 是一个不二之选。Inotify 是一个 Linux 内核提供的文件...
lsyncd与rsync实现实时自动同步的配置 lsyncd与rsync是两种常用的数据同步工具,分别具有不同的特性和功能。在本文中,我们将探讨如何使用lsyncd与rsync实现实时自动同步的配置。 1. rsync的特性 rsync是一款类...
rsync使用–include参数与–exclude参数来实现同步指定目录,并且–exclude目录放在后面。 例如: linux上文件目录 代码如下: ls /usr/local/apache/htdocs/site aa bb cc dd ee .. zz 只想同步aa,bb,ee这三个目录...
通过以上步骤,您已经成功地在两台计算机节点间部署了rsync并实现了数据文件的同步。记住,在实际应用中,根据您的具体需求调整rsync的配置和参数,以保证数据的安全性和同步效率。rsync的灵活性和强大功能使其成为...
2. 在客户端使用 rsync 命令通过 ssh tunnel 将文件同步到服务器端。 rsync 命令选项 * -v:显示详细信息 * -z:压缩数据 * -r:递归目录 * -t:保持文件时间戳 * -o:保持文件权限 * -p:保持文件权限和时间戳 * ...
Linux 下 rsync 文件同步详解 rsync 简介 RSYNC 是一个快速、可靠、功能强大且免費的 Unix 和 Linux 文件同步工具。...通过了解 rsync 的原理、服务方式和基本使用,可以更好地利用 rsync 实现文件同步和备份。