8

Invalid argument将文件从本地磁盘移动到 NFS 挂载磁盘时出现警告。尽管出现错误消息,但文件已成功移动:

Warning: rename(/tmp/image.jpg,/mnt/remote.server-disk1/image.jpg): Invalid argument

挂载的磁盘:

$ df
remote.server:/disk1 917G  269M  871G   1% /mnt/remote.server-disk1

远程服务器上导出的磁盘:

$ cat /etc/exports
/disk1 remote.server(rw,sync,root_squash,secure,crossmnt,anonuid=504,anongid=504)

rename()之前本地磁盘上的文件:

$ stat /tmp/image.jpg
File: `image.jpg'
Size: 2105          Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 33556339    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (  501/  apache)   Gid: (  501/  apache)
...

rename() 后远程磁盘上的文件:

$ stat /disk1/image.jpg
File: `image.jpg'
Size: 2105          Blocks: 8          IO Block: 4096   regular file
Device: 821h/2081d  Inode: 34603214    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (  501/  apache)   Gid: (  501/  apache)
...

有任何想法吗?谢谢

4

4 回答 4

9

文件系统之间Unix不能重命名移动,而是必须将文件从一个源位置复制目标位置,然后删除源。这将解释您收到的错误消息。但是,似乎不清楚为什么它仍然采取行动。这可能与权限有关,或者 NFS 安装的磁盘在本地缓存。

于 2013-12-27T20:12:17.373 回答
2

也许有点晚了,但我认为答案可能是因为与目标文件系统相关的权限。

我们遇到了同样的问题,并且 strace 给了我们正确的诊断:

strace php -r "rename('SOURCE_FILE', 'DST_FILE');";
...
chown("SOURCE_FILE", 0, 0) = -1 EINVAL (Invalid argument)                                                                                                                                                       
write(2, "PHP Warning:  rename(SOURCE_FILE"..., 192PHP Warning:  rename(SOURCE_FILE): Invalid argument in Command line code on line 1
) = 192
write(1, "bool(false)\n", 12bool(false)

在我们的例子中,目标文件系统是一个版本为 4 的 NFS,并且启用了 idmap。

哪怕是一个简单的

chown $(whoami) $DST_FILE

没有工作。

使用 nfs-common utils 启用 idmap 是默认行为(至少在 debian 下)。因此,即使您通过使用复制 + 取消链接(顺便说一句,这是最好的方法)来修复它,它仍然可能隐藏底层文件系统中的问题。

(禁用 idmap:https ://forums.aws.amazon.com/thread.jspa?threadID=235501 )

于 2021-06-07T14:10:53.363 回答
0

也许是因为你这样做没有引号

rename(/tmp/image.jpg,/mnt/remote.server-disk1/image.jpg);

尝试添加引号

rename('/tmp/image.jpg', '/mnt/remote.server-disk1/image.jpg');

于 2013-11-10T20:21:05.863 回答
0

我无法解决这个问题,但是 copy() 然后 unlink() 工作没有错误。

于 2013-11-12T18:31:21.800 回答