linux下rsync的配置以实现文件夹的同步及常见error总结

本文详细介绍了rsync服务端的配置步骤,包括安装软件包、配置xinetd服务、设置rsync自动启动等,并提供了客户端配置示例,涵盖密码文件设定、执行指令测试及计划任务设置。
服务器端配置:
[root@Hammer home]# rpm -qa |grep rsync                                #检查系统是否安装了rsync软件包
rsync-2.6.9
如果没有,就去yum 或者apt-get install或者去官网服务器上下一个

vi /etc/xinetd.d/rsync
将disable=yes改为no

service rsync
{
              disable = no
              socket_type        = stream
              wait                      = no
              user                      = root
              server                  = /usr/bin/rsync
              server_args        = --daemon
              log_on_failure  += USERID
}

2 配置rsync自动启动
[root@test etc]# chkconfig rsync on
[root@test etc]# chkconfig rsync --list
rsync                    on

自动启动的方法还有  在 /etc/rc.d/rc.local 后面添加  /usr/bin/rsync  --daemon
vim /etc/rc.d/rc.local

3 配置rsyncd.conf
[root@test etc]# vim rsyncd.conf

uid = root
  # 或者写成nobody
gid = root  #
或者写成nobody
use chroot = no
max connections = 4 
#最大连接数
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log     
#上述3个文件如果不是在root帐户下用最好配置成可以修改的文件。或者给这3个文件修改所有者为其他帐户。我采用的第一种方法,如果用hadoop用户,我将这几个文件放在了/home/hadoop/rsync下

[hadoop]              #模块名,这里相当于一个区分符,如果要同步多个文件夹就在这里区分,英文名叫做module
path = /usr/local/hadoop-0.20.2/conf   #要同步的文件的路径
comment = HADOOP
auth users = hadoop
uid = root
gid = root
secrets file = /etc/rsyncd.secrets    #存放rsync密码的文件
read only = no
list = no
hosts allow = 192.168.0.3 192.168.0.4   #设置允许访问的客户端多个客户端用空格隔开
hosts deny = *   #设置不允许访问的黑名单
[zookeeper]        #这里相当于一个区分符,如果要同步多个文件夹就在这里区分
path = /usr/zookeeper-3.3.5/conf
comment = ZOOKEEPER
auth users = hadoop
uid = root
gid = root
secrets file = /etc/rsyncd.secrets   #存放rsync密码的文件
read only = no
list = no 

4 确保etc/services中rsync端口号正确
[root@namenode etc]# vim /etc/services
rsync                    873/tcp                                                # rsync
rsync                    873/udp                                                # rsync

5 配置rsync密码(在上边的配置文件中已经写好路径)/etc/rsyncd.secrets(名字随便写,只要和上边配置文件里的一致即可),格式(一行一个用户)
[root@namenode etc]# vi /etc/rsyncd.secrets
root:hadoop
hadoop:hadoop    #hadoop为用户第二个为密码  中间有冒号隔开
6 配置rsync密码文件权限
[root@namenode ]# chown root.root /etc/rsyncd.secrets
[root@namenode ]# chmod 400 /etc/rsyncd.secrets  #或者600,除root外其他用户不能有任何权限

7 启动配置
[root@test home]# /etc/init.d/xinetd restart
Stopping xinetd:                                                                                    OK  ]
Starting xinetd:                                                                                    OK  ]

8 如果xinetd没有的话,需要安装一下
[root@namenode]# yum -y install xinetd


  启动rsync server
  RSYNC服务端启动的两种方法
9、启动rsync服务端(独立启动)
[root@namenode]# /usr/bin/rsync --daemon
10、检查rsync是否启动
[root@namenode]# lsof -i :873
COMMAND  PID USER    FD    TYPE DEVICE SIZE NODE NAME
xinetd  4396 root      5u  IPv4 633387            TCP *:rsync (LISTEN)

客户端配置
1 配置三个过程就可以了
  1.1 设定密码文件
  1.2 测试rsync执行指令
  1.3 将rsync指令放入工作排程(crontab)
[root@datanode1]# vi /etc/xinetd.d/rsync

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
          allows crc checksumming etc.
service rsync
{
              disable = yes  #这里service是不启动的
              socket_type        = stream
              wait                      = no
              user                      = root
              server                  = /usr/bin/rsync
              server_args        = --daemon
              log_on_failure  += USERID
}

1.1  配置密码文件  (注:为了安全,设定密码档案的属性为:600, 必须设置为600,除root外其他用户不能有任何权限。rsyncd.secrets的密码一定要和Rsync Server密码设定案里的密码一样)
[root@datanode1]# vi    /etc/ rsyncd.secrets 
hadoop   #这里只需要写密码

[root@ datanode1]# chown root:root /etc/rsyncd.secrets   # 注意必须给权限
[root@ datanode1]# chmod 600  /etc/rsyncd.secrets            # 必须修改权限

1.2 从服务器上下载文件
[root@ datanode1]# rsync -avz --progress   --password-file=/etc/rsyncd.secrets hadoop@namenode::hadoop /usr/local/hadoop-0.20.2
--password-file=/etc/rsyncd.secret,的作用相当于免输入密码,如果没有这一句就会提示输入密码
delete参数是指 --delete 删除那些客户端没有中有而服务器端没有的文件,保持源、目标的一致性,但是不建议使用  ,如果修改了服务器的rsync的端口号,需要在命令中用 --port指定端口号,比如端口改为了8773
[root@ datanode1 ]# rsync -avz --port=8773 --progress  --password-file=/etc/rsyncd.secrets hadoop@namenode::hadoop /usr/local/hadoop-0.20.2
    从本地上传到服务器上去
[root@aj1 rsync-3.0.4]# rsync -avz  --password-file=/etc/rsyncd.secrets   /usr/local/hadoop-0.20.2  hadoop@namenode::hadoop
请确保客户端同步用户hadoop,对模块hadoop所在目录有读、写、执行的权限
如果不是root帐户,而是rsync auth_usrs的帐户使用,要加sudo,因为rsyncd.secrets密码的文件的所有者是root,当然如果参数中不加入password,可以不加sudo。
rsync的参数的说明:

-a 相当于 -rlptgoD 的集合

-u 等同于 –update,在目标文件比源文件新的情况下不更新

-v 显示同步的文件

–progress 显示文件同步时的百分比进度、传输速率


在其他的博客上还看到对于rsync自动同步的配置,比如定时为早上6:30同步

可以建一个启动脚本:方便每次系统启动时,服务自启动。 
#!/bin/sh 
rm -f /var/run/rsyncd.pid 
/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf
 

netstst -ant  可以查看rsync的工作端口873。如没有些端口,检查配置。 
5、配置客户端(datanode1)的备份脚本,可以启用计划任务,定时备份。 
  vi /usr/local/rsync/bakcl.sh(备份脚本可以放在任意地方,加上可执行权限) 
#!/bin/sh 
rsync -vzrtopg  --progress root@namenode::hadoop /usr/local/hadoop-0.20.2/conf
 
/


上例是把namenode其hadoop下的所有内容备份到datanode1下的
/usr/local/hadoop-0.20.2/conf 
/
目录下,如果没有其目录,会自动创建。 
6、上传过程。恢复服务器一定要有写的权限。 
  vi /usr/local/rsync/rebakcl.sh 
#!/bin/sh 
rsync -auvz  --password-file=/etc/rsyncd.secrets  /usr/local/hadoop-0.20.2 hadoop@namenode::hadoop

7、启动计划任务,定时每天早上6:30自动备份: 
  crontab -e (定时执行任务)

30 6 * * * hadoop /bin/sh /usr/local/rsync/bakcl.sh


或者设置为每半小时启动一次

crontab -e

*/30 * * * * hadoop /bin/sh /usr/local/rsync/bakcl.sh > /dev/null 2>&1


error总结:

@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
原因及解决办法:

这一般是在服务器端没有建立目录

或者是如果有开启SELinux只要执行一下命令
     SELinux;
     setsebool -P rsync_disable_trans on


切记: rsyncd.secrets的权限必须为600

(注意:这个安全设置很重要,如果不这样做客户机连接服务器时会提示:

password file must not be other-accessible

rsync error: some files could not be transferred (code 23) at main.c(1298) [generator=2.6.8]

@ERROR: auth failed on module
rsync: connection unexpectedly closed (102 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(165)
服务器端日志将出现错误提示:
2005/08/23 06:32:01 [8388] secrets file must not be other-accessible (see strict modes option)
2005/08/23 06:32:01 [8388] continuing without secrets file
2005/08/23 06:32:01 [8388] auth failed on module   from documentserver

服务器端rsyncd.secrets (用户:密码)<用户必须是系统用户,密码尽量不要为系统用户密码>
客户端 rsyncd.secrets (密码)<服务器端密码>

服务器和客户端的帐户密码都不可以有空格,否则会出现

@ERROR: auth failed on module

注意:

如果改变了端口号,一定要在/etc/services中把对应的端口改变才能正常运行

 

如rsync          873/tcp改成

   rsync          3334/tcp即可

error3:

rsyncd.secrets的密码一定要和Rsync Server密码设定档案里的密码一样。如果不同(跟不是linux合法用户错误一样),将会出现如下的错误:
 #rsync -azv /home rsync://root@192.168.1.107/hadoop --password-file=/home/rsyncd.secrets
 @ERROR: auth failed on module hadoop
 rsync error: error starting client-server protocol (code 5) at main.c(1296) [sender=2.6.8]

error4:

在client上遇到问题:
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/
rsync: could not open password file "/etc/rsync.pas": No such file or directory (2)
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
遇到这个问题:client端没有设置/etc/rsync.pas这个文件,而在使用rsync命令的时候,加了这个参数--
password-file=/etc/rsync.pas


error5:
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
遇到这个问题,是因为服务器端的/home/backup  其中backup这个目录并没有设置,所以提示:chdir failed

error6:
rsync: write failed on "/home/backup2010/wensong": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(302) [receiver=3.0.7]
rsync: connection unexpectedly closed (2721 bytes received so far) [generator]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7]
磁盘空间不够,所以无法操作。
可以通过df /home/backup2010 来查看可用空间和已用空间

error7:

1、权限问题
类似如下的提示:rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)注意查看同步的目录权限是否为755
2、time out
rsync: failed to connect to 203.100.192.66: Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
检查服务器的端口netstat –tunlp,远程telnet测试。
3、服务未启动
rsync: failed to connect to 10.10.10.170: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
启动服务:rsync --daemon --config=/etc/rsyncd.conf
4、磁盘空间满
rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device (28)
*** Skipping any contents from this failed directory ***
5、Ctrl+C或者大量文件
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [receiver=3.0.5]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [generator=3.0.5]
6、xnetid启动(linux)
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5]

<think>好的,用户想了解如何在Linux下复制文件到另一个文件夹。这个问题看起来基础,但需要详细解答。首先,用户可能刚接触Linux,或者对命令行操作不太熟悉。我需要从最基本的命令开始介绍,比如cp命令,同时要覆盖不同情况和选项,比如递归复制目录、保留文件属性等。另外,用户可能不知道如何正确使用参数,所以需要解释每个参数的作用。 接下来,我需要考虑用户可能的实际使用场景。例如,用户可能需要复制单个文件、多个文件或者整个目录。是否需要覆盖已有文件?是否需要保留权限和时间戳?这些都是用户可能遇到的问题,但可能没有明确提出来。因此,在回答中应该涵盖这些常见的情况,并提供相应的命令示例。 另外,用户可能对路径处理不太熟悉,特别是相对路径和绝对路径的区别。需要举例说明如何正确指定源路径和目标路径,避免常见的错误,比如忘记加斜杠或者目录不存在的情况。同时,可能还需要提到如何处理文件名中有空格或特殊字符的情况,使用引号或转义符。 还有,用户可能有权限问题,比如目标文件夹不可写,或者需要sudo权限。需要提醒用户注意权限问题,并说明如何解决。此外,可能需要提到cp命令的一些常用选项,比如-v显示详细信息,-i交互式确认覆盖等,这些都是帮助用户更好地控制复制过程的重要选项。 最后,用户可能对mv和cp的区别不太清楚,是否需要说明一下?虽然用户问的是复制,但可能也有移动文件的需求,可以简单提一下mv命令,但重点还是放在cp上。同时,是否需要推荐其他工具,比如rsync,用于更复杂的复制需求?比如增量备份或者网络传输,但可能对新手来说太复杂,暂时先介绍cp命令的基础用法。 总结一下,回答结构应该先介绍cp命令的基本用法,然后分情况讨论不同需求下的命令格式,解释常用选项,提醒注意事项,并给出示例。同时语言要简洁明了,避免技术术语过多,方便用户理解。</think>在 Linux 系统中,使用 `cp` 命令进行文件/目录复制是核心操作,以下是详细操作指南: --- ### **一、基础复制操作** #### 1. 复制单个文件 ```bash cp 源文件路径 目标文件夹路径/ # 示例:将 file.txt 复制到 Documents 目录 cp /home/user/file.txt ~/Documents/ ``` #### 2. 复制多个文件 ```bash cp 文件1 文件2 文件3 目标目录/ # 示例:复制三个日志文件到 backup 目录 cp error.log access.log debug.log /var/log/backup/ ``` --- ### **二、进阶操作参数** #### 1. 递归复制目录(含子目录) ```bash cp -r 源目录 目标路径/ # 示例:复制整个网站目录 cp -r /var/www/old_site /backup/websites/ ``` #### 2. 保留文件属性 ```bash cp -a # 相当于 -dpr(保留权限、时间戳、符号链接) cp -p # 仅保留权限和时间戳 # 示例:备份用户配置文件 cp -a ~/.ssh/ ~/backup_config/ ``` #### 3. 交互式确认覆盖 ```bash cp -i # 覆盖前提示确认 # 示例:安全覆盖敏感文件 cp -i important.db /backup/databases/ ``` --- ### **三、特殊场景处理** #### 1. 通配符批量复制 ```bash # 复制所有 .jpg 图片到 photos 目录 cp *.jpg ~/Pictures/photos/ # 复制 2023 开头的日志文件 cp 2023*.log /archive/logs/ ``` #### 2. 保留符号链接特性 ```bash cp -P # 保持符号链接为链接(不复制指向的文件) cp -L # 解析符号链接复制实际内容 ``` #### 3. 显示复制进度 ```bash cp -v # 显示操作细节 # 结合 rsync 更直观(需安装): rsync -ah --progress 源文件 目标目录 ``` --- ### **四、路径处理技巧** | 路径类型 | 示例 | 说明 | |---------|------|------| | 相对路径 | `cp ../file.txt backups/` | 基于当前工作目录 | | 绝对路径 | `cp /home/user/file.txt /mnt/disk1/` | 完整路径定位 | | 特殊符号 | `cp "file name.txt" ~/Documents/` | 处理含空格文件名 | --- ### **五、常见错误解决方案** 1. **权限不足**: ```bash sudo cp 需要root权限的文件 /系统目录/ ``` 2. **目标目录不存在**: ```bash mkdir -p /目标/路径/ && cp 文件 /目标/路径/ ``` 3. **磁盘空间不足**: ```bash df -h # 先检查磁盘使用情况 ``` 4. **文件名冲突**: ```bash cp -n # 禁止覆盖已存在文件(安全保护) ``` --- ### **六、与移动命令对比** | 命令 | 作用 | 特点 | |------|------|------| | `cp` | 创建副本 | 原始文件保留,额外占用存储空间 | | `mv` | 移动/重命名 | 文件物理位置转移,不新增存储占用 | --- ### **最佳实践建议** 1. **重要操作先备份**: ```bash cp -a 源目录 源目录_备份 # 创建带时间戳的备份更安全 ``` 2. **使用 rsync 增强功能**: ```bash rsync -avzh 源目录 目标目录/ # 支持断点续传、差异同步 ``` 3. **脚本自动化**: ```bash # 每日备份脚本示例 cp -a /var/log/nginx/ /backup/nginx_logs/$(date +%Y%m%d) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值