我正在尝试将文件从一台服务器同步到另一台服务器,但出现此错误
rsync:无法在“/dept/intranet/dept/atest/.”上设置时间:操作不允许(1)
有人能帮助我为什么这样吗?
我猜这是一些权限问题。
这是我的命令:
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
REMOTE_HOST=test.desktop
${RSYNC} -crlt -e ${SSH} ${LOCAL_DIR} ${REMOTE_HOST}:${REMOTE_DIR}
LOCAL_DIR = workplace1/f1/
permissions drwxr-xr-x 11 root root 4096 Mar 19 2009 f1
REMOTE_DIR=/dept/intranet/dept/atest/f1/
permissions :drwxr-xr-x 14 dbld a1 4096 Mar 19 2009 f1
答案1
为了让我们的意见一致:
-r recursive
-l preserve links
-c sync based on file checksum
-t preserve modification times
接下来是两件事:
这只是一个文件系统
如果目标文件夹是 NFS 挂载,或者某些不能很好处理 mod-times 的文件系统,那么它就会中断。
尝试将-O
(for --omit-dir-times
) 参数添加到您的命令中。
修改时间将被保留,但目录将被省略:
${RSYNC} -crlOt -e ${SSH} ${LOCAL_DIR} ${REMOTE_HOST}:${REMOTE_DIR}
这是我最好的猜测,因为文件同步似乎有效,而你的错误发生在 mod 时间同步上。无论如何,你真的需要保留修改时间吗? 该-c
选项根据校验和跳过文件(因此修改时间无关紧要)。
或者实际上是权限问题
- 运行脚本的用户是否有足够的权限来编辑/写入目标文件夹?(尝试
ssh -vv test.desktop "touch /dept/intranet/dept/atest/f1/test"
) - 运行脚本的用户是否是“正确用户™”(尝试)
ssh -vv [email protected] "touch /dept/intranet/dept/atest/f1/test"
以上都不是
使用该选项运行命令-v
,以获得详细效果。
答案2
添加-O(–omit-dir-times) 到您的命令行,以避免它尝试设置目录的修改时间。
答案3
就我而言,我通过授予发生同步的父目录的权限解决了这个问题。
实际上,父目录的所有者并不是执行同步的用户。