rsync: mkstemp ... failed: Operation not permitted

今天在整理文件时遇到了下面的错误:

rsync: mkstemp "/abc/def.txt.dm1u5x" failed: Operation not permitted (1)

说说我的情况,我的 /abc 目录是一个独立的 mount point,只有200M大小,空的;而需要备份的源文件共190M左右。在同步文件时,我使用的命令是:
rsync -av --progress /src/ /abc/

结果就出现了文章开头的错误提示,现象是所有目录都建立成功了,但文件没有同步。

最初我也十分不解为什么会出现这样的错误,非常奇怪,一时也没有头绪,甚至放弃了rsync直接使用了cp -Rv解决问题,但想来想去就是不爽啊!!!

上网搜索了一下这个错误提示,结果一篇ubuntu论坛的帖子的回复给我带来决定性的启发!


[url]http://ubuntuforums.org/showthread.php?t=87038[/url]

+-------------------
-------------------------------------
Re: backup using rsync to usb disk (vfat) problem
First of all, what is 'mkstemp' - do you mean 'mktemp'?
Are you sure that you have r/w permissions for your vfat partition?
__________________
When someone says 'I cannot do this in Linux, the limitation is not in the software, but simply in their knowledge.'
Linux User - 380191 

+-------------------
-------------------------------------


是啊,mkstemp 是什么呢?从字面理解是创建临时文件,oh my god!

马上查看了 rsync 的命令帮助,果然发现了指定临时目录的参数,于是重新使用 rsync 同步文件:

rsync -av --progress --temp-dir=/tmp /src/ /abc/

文件同步成功啦!

回过头来分析一下错误,应该是 rsync 默认以同步的目标目录作为缓存区创建临时文件以实现同步操作过程中的各种判断、比较、分析等后台操作。

但是,我要同步的目标目录只有200M,却要复制190M的文件进去,很可能 rsync 是要将所有文件先复制为 tmp 形式,再转换成正式文件,因此,目标区域应该至少是源文件体积的2倍才合适。

因此,我采用的解决方法是将 tmp 转移到其它存储位置,这样就解决了目标文件夹空间不足的问题。

(*注:以上分析没有实验或深入研究证实)

你可能感兴趣的:(PHP,linux,ubuntu)