分类: LINUX
2013-08-22 11:39:52
2012年3月22日更新:
终于找到问题的根源了,其实算是rsync的一个bug,就是如果收到过多的报告权限不足无法同步的错误后,rsync就会报IO错误跳过删除文件的操作。
要解决这个问题,要么保证不会出现权限不足无法同步的情况,要么,就还是按照我下面的方法来解决。
今天,我在服务器上发现通过rsync同步的文件有问题,在镜像服务器这边的文件没有同步删除,于是在终端手工运行了一下命令,发现有以下报错:
---
IO error encountered -- skipping file deletion
---
看样子是提示IO错误,因此跳过了文件删除选项。于是赶忙到服务器上检查是否真的存在IO错误,结果答案是,根本就没有IO问题,主服务器和镜像服务器的对应文件夹下创建和删除文件,都没问题。
于是仔细查看了一下rsync的参数,发现有一个选项是:
---
--ignore-errors 即使出现 I/O 错误也进行删除
---
于是加上了这个参数,再次执行同步,问题解决了。
但是至于为什么rsync会误报这个错误,目前我还没有找到原因,如果有哪一位知道的话,欢迎解惑。
下面,顺便附上rsync的常用参数选项,方便大家参考:
选项 | 说明 |
-a, --archive | 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (不包括 -H) |
-r, --recursive | 对子目录以递归模式处理 |
-l, --links | 保持符号链接文件 |
-H, --hard-links | 保持硬链接文件 |
-p, --perms | 保持文件权限 |
-t, --times | 保持文件时间信息 |
-g, --group | 保持文件属组信息 |
-o, --owner | 保持文件属主信息 (super-user only) |
-D | 保持设备文件和特殊文件 (super-user only) |
-z, --compress | 在传输文件时进行压缩处理 |
--exclude=PATTERN | 指定排除一个不需要传输的文件匹配模式 |
--exclude-from=FILE | 从 FILE 中读取排除规则 |
--include=PATTERN | 指定需要传输的文件匹配模式 |
--include-from=FILE | 从 FILE 中读取包含规则 |
--copy-unsafe-links | 拷贝指向SRC路径目录树以外的链接文件 |
--safe-links | 忽略指向SRC路径目录树以外的链接文件(默认) |
--existing | 仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件 |
--ignore-existing | 忽略那些已经存在于接收端的文件,仅备份那些新创建的文件 |
-b, --backup | 当有变化时,对目标目录中的旧版文件进行备份 |
--backup-dir=DIR | 与 -b 结合使用,将备份的文件存到 DIR 目录中 |
--link-dest=DIR | 当文件未改变时基于 DIR 创建硬链接文件 |
--delete | 删除那些接收端还有而发送端已经不存在的文件 |
--delete-before | 接收者在传输之前进行删除操作 (默认) |
--delete-during | 接收者在传输过程中进行删除操作 |
--delete-after | 接收者在传输之后进行删除操作 |
--delete-excluded | 在接收方同时删除被排除的文件 |
-e, --rsh=COMMAND | 指定替代 rsh 的 shell 程序 |
--ignore-errors | 即使出现 I/O 错误也进行删除 |
--partial | 保留那些因故没有完全传输的文件,以是加快随后的再次传输 |
--progress | 在传输时显示传输过程 |
-P | 等价于 --partial --progress |
--delay-updates | 将正在更新的文件先保存到一个临时目录(默认为 “.~tmp~”),待传输完毕再更新目标文件 |
-v, --verbose | 详细输出模式 |
-q, --quiet | 精简输出模式 |
-h, --human-readable | 输出文件大小使用易读的单位(如,K,M等) |
-n, --dry-run | 显示哪些文件将被传输 |
--list-only | 仅仅列出文件而不进行复制 |
--rsyncpath=PROGRAM | 指定远程服务器上的 rsync 命令所在路径 |
--password-file=FILE | 从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用 |
-4, --ipv4 | 使用 IPv4 |
-6, --ipv6 | 使用 IPv6 |
--version | 打印版本信息 |
--help | 显示帮助信息 |
注意:
若使用普通用户身份运行 rsync 命令,同步后的文件的属主将改变为这个普通用户身份。
若使用超级用户身份运行 rsync 命令,同步后的文件的属主将保持原来的用户身份。