> 使用rsync从服务器同步数据,这里只说如何单向同步 首先安装rsync # 服务器端配置 服务器使用 `xinetd` 来充当`rsync`的守护程序,没有的话就安装 > xinetd专门监听某个设定的端口,然后fork出配置好的端口对应的服务程序,再继续监听 ## 1. 配置rsync的xinetd配置文件: # nano /etc/xinetd.d/rsync service rsync { disable = no flags = IPv4 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } ## 2.配置rsync自动启动 # chkconfig rsync on ## 3.配置rsync # nano /etc/rsyncd.conf uid=root #运行RSYNC守护进程的用户 gid=root #运行RSYNC守护进程的组 use chroot=no #不使用chroot max connections=0 #最大连接数,0不限制 strict modes=yes #是否对密码文件进行权限检查,yes的话,其他用户都不能访问密码文件 prot=873 #监听端口 pid file=/var/run/rsyncd.pid lock file=/var/run/rsync.lock log file=/var/log/rsyncd.log #备份模块 [backup] path=/opt/backup comment=backup files auth users=backupuser #允许访问的用户,必须是密码文件中的 uid=root gid=root secrets file=/etc/rsyncd.secret # 密码文件 read only=no list=no ## 4.确认一下`/etc/services`中的rsync端口号是否和它配置文件中的一样 # less /etc/services ... rsync 873/tcp # rsync rsync 873/udp # rsync .... ## 5.配置密码文件 # nano /etc/rsyncd.secret # 格式为用户名:密码 backupuser:passwd 改变密码文件权限 # chmod 400 /etc/rsyncd.secret ## 6.启用`xinetd` # /etc/init.d/xinetd restart 然后检查一下看是否正常启动: # lsof -i :873 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME xinetd 4396 root 5u IPv4 633387 TCP *:rsync (LISTEN) # 客户端配置 客户端只需要安装有`rsync`即可 ## 1.配置密码文件 # nano /etc/rsyncd.secret # 只需要密码 passwd 设置好权限 # chmod 600 /etc/rsyncd.secret ## 2.从服务器同步 # rsync -avz --password-file=/etc/rsyncd.secret
[email protected]::backupuser /opt/backup/ # 小结 可以在客户端把同步脚本放到corntab里来定时同步数据 ## 常用的全局选项 **motd file**:设定欢迎消息 **pid file**:该选项告诉daemon把它的进程ID写入指定文件。如果文件已经存在,daemon会中止运行,而不是覆盖原文件。 **port**:设定daemon运行监听的端口。如果daemon是由inetd运行,该选项将被忽略;如果命令行中已经指定--port,该选项将被取代。 **address**:设定rsync daemon运行时监听的地址。同上,如果daemon由inetd运行或命令行中已经指定了--port,该选项将被忽略或取代。 ## 模块参数 **path**:设定该模块的目录位置 **use chroot**:指定是否使用chroot,值为yes或no,我推荐no **max connections**:该参数设定了daemon允许每个client发起的最大连接数。超过最大连接数,client会收到警告信息,值为0表示不限制,值为负数表示禁用该模块 **lock file**:该参数用来支持max connection,它指定一个文件来记录client的请求,以确保client的请求不会突破最大连接数 **log file**:设定该模块的log文件的位置,如果此参数未设定,或rsync daemon读取指定文件失败,rsync会使用syslog记录日志;如果此参数只在每个模块中设定,而未在全局中设定,则全局日志将只记录授权失败或配置文件错误的消息 **read only**:设定是否允许客户端上传文件,默认为yes,不允许上传文件 **write only**:设定是否允许客户端下载文件,默认为no,允许下载文件(有点拗口) **list**:设定该模块是否允许被列出,有点类似于samba的browseable,默认为yes,我们可以把它设定为no,来创建一个隐藏模块 **uid**:当rsync daemon以root用户运行时,此参数指定了,向该模块传输文件,或从该模块传输文件时的用户身份(用户名或用户ID),默认为-2,即nobody用户 **gid**:意义类似于uid,默认为-2,即nobody组 **incoming chmod**:这个参数允许你指定多个以逗号分隔的权限字符,这些权限会影响所有daemon收到的文件。这些权限会在其它所有权限之后生效,这意味着,如果客户端没有指定--perms,它们会覆盖掉目标默认和(以及或)已经存在的权限。 **auth users**:这个参数指定了允许访问该模块的用户列表,列表中的用户名以逗号和空格分隔。指定用户可以不必真实存在于本地系统,用户名中也可以包含shell通配符。纯文本的用户名和密码存储在由”secrets file”参数指定的文件中。 **secrets file**:该参数指定一个密码文件,用于该模块的授权验证。只有当指定了”auth users”参数时,这个文件才会被考虑。密码可以包含任何字符,最好不要超过8个字符。该参数没有默认值,你必须手动创建一个密码文件,而且该文件不应该被其它用户访问。 **strict modes**:该参数决定了是否对密码文件进行权限检查。如果值为yes,除了运行rsync daemon的用户外,其它用户均不能访问该文件。默认值为yes。 **fake super**:如果该模块设置成fake super = yes,跟在命令行中指定了--fake-super效果一样。它不需要daemon以root运行,就可以存储文件的完整属性。 **hosts allow**:简单的说,该参数指定了允许访问该模块的客户端名称或IP。可以指定一个具体的IP,或配合掩码指定一个IP段。当hosts allow和hosts deny同时指定的时候,先检查hosts allow,匹配的客户端将被允许访问该模块;然后检查hosts deny,匹配的客户端将被拒绝;既不匹配hosts allow又不匹配hosts deny的客户端将被允许访问。 **hosts deny**:该参数指定的客户端均不允许访问该模块。 **ignore errors**:如果该参数被指定,在进行传输中的删除操作时,rsync将忽略掉daemon的I/O错误。通常情况下,如果发生任何I/O错误,rsync将忽略掉--delete操作,以防止由于临时资源短缺或其它I/O错误而导致的灾难性(文件)丢失。 **timeout**:rsync的超时设置,防止客户端的死连接,单位为秒。默认值为0,意味着没有超时定义。 **dont compress**:此选项允许指定一些基于通配符模式的文件名,当从daemon拉文件时,这些文件将不会被压缩。选项接受一个以空格分隔的,大小写敏感的通配符模式列表。类似于命令行中的--skip-compress=LIST,并且会覆盖命令中的参数。 **filter**:该参数接受一个由空格分开的daemon过滤规则列表,每个模块只接受一个filter参数,所以要把所有规则写入一个filter参数中。可以使用正常语法把一个或多个merge-file指定成一条规则。 **exclude**:该参数接收一个以空格分隔的daemon排除规则的列表,像客户端的--exclude选项一样,它使用”-“或”+”来指明排除或包含。一个模块中只能有一个exclude参数。 **include**:该参数可以覆盖掉exclude的效果。一个模块中只能有一个include参数。 **exclude from**:该参数指定了一个daemon上的文件,用来包含daemon的排除规则,每行一条(规则)。每个模块中只能有一个exclude from参数,如果有多个exclude-from文件,可以在filter参数中把它们看成成一个merge file。 **include from**:类似于exclude from。 ## rsync 命令参数 **-v**, --verbose 详细模式输出 **-q**, --quiet 精简输出模式 **-c**, --checksum 打开校验开关,强制对文件传输进行校验 **-a**, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD **-r**, --recursive 对子目录以递归模式处理 **-R**, --relative 使用相对路径信息 **-b**, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 **--backup-dir** 将备份文件(如~filename)存放在在目录下。 **-suffix=SUFFIX** 定义备份文件前缀 **-u**, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) **-l**, --links 保留软链结 **-L**, --copy-links 想对待常规文件一样处理软链结 **--copy-unsafe-links** 仅仅拷贝指向SRC路径目录树以外的链结 **--safe-links** 忽略指向SRC路径目录树以外的链结 **-H**, --hard-links 保留硬链结 **-p**, --perms 保持文件权限 **-o**, --owner 保持文件属主信息 **-g**, --group 保持文件属组信息 **-D**, --devices 保持设备文件信息 **-t**, --times 保持文件时间信息 **-S**, --sparse 对稀疏文件进行特殊处理以节省DST的空间 **-n**, --dry-run现实哪些文件将被传输 **-W**, --whole-file 拷贝文件,不进行增量检测 **-x**, --one-file-system 不要跨越文件系统边界 **-B**, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节 **-e**, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步 **--rsync-path=PATH** 指定远程服务器上的rsync命令所在路径信息 **-C**, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 **--existing** 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 **--delete** 删除那些DST中SRC没有的文件 **--delete-excluded** 同样删除接收端那些被该选项指定排除的文件 **--delete-after** 传输结束以后再删除 **--ignore-errors** 及时出现IO错误也进行删除 **--max-delete=NUM** 最多删除NUM个文件 **--partial** 保留那些因故没有完全传输的文件,以是加快随后的再次传输 **--force** 强制删除目录,即使不为空 **--numeric-ids** 不将数字的用户和组ID匹配为用户名和组名 **--timeout=TIME** IP超时时间,单位为秒 **-I**, --ignore-times 不跳过那些有同样的时间和长度的文件 **--size-only** 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 **--modify-window=NUM** 决定文件是否时间相同时使用的时间戳窗口,默认为0 **-T** --temp-dir=DIR 在DIR中创建临时文件 **--compare-dest=DIR** 同样比较DIR中的文件来决定是否需要备份 **-P** 等同于 --partial **--progress** 显示备份过程 **-z**, --compress 对备份的文件在传输时进行压缩处理 **--exclude=PATTERN** 指定排除不需要传输的文件模式 **--include=PATTERN** 指定不排除而需要传输的文件模式 **--exclude-from=FILE** 排除FILE中指定模式的文件 **--include-from=FILE** 不排除FILE指定模式匹配的文件 **--version** 打印版本信息 **--address** 绑定到特定的地址 **--config=FILE** 指定其他的配置文件,不使用默认的rsyncd.conf文件 **--port=PORT** 指定其他的rsync服务端口 **--blocking-io** 对远程shell使用阻塞IO **-stats** 给出某些文件的传输状态 **--progress** 在传输时现实传输过程 **--log-format=formAT** 指定日志文件格式 **--password-file=FILE** 从FILE中得到密码 **--bwlimit=KBPS** 限制I/O带宽,KBytes per second **-h**, --help 显示帮助信息