2013-02-14 102 views
3

我想设置文件属性如下:setxattr失败,不支持的操作

  1. 创建文件foo.txt的有0644权限
  2. 当我试图为这个setxattr作为

    if (setxattr("foo.txt", "user.test", "test", 4, XATTR_CREATE) == -1) 
        perror(""); 
    

我收到错误的操作,不支持

有什么要启用的吗? 如何解决这个问题?

+2

你的文件系统是否支持它?使用'user_xattr'挂载选项重新挂载可能会有所帮助。 – 2013-02-14 10:19:01

+0

你在使用哪个文件系统? – 2013-02-14 10:19:30

+1

我正在使用nfs文件系统 – 2013-02-14 10:38:24

回答

5

setxattr

返回值

On success, zero is returned. On failure, -1 is returned and errno is set 
    appropriately. 
    ... 
    If extended attributes are not supported by the file system, or are disabled, 
    errno is set to ENOTSUP. 

所以,无论是你的文件系统不支持扩展属性(分机[234],CIFS,BTRFS做,例如),或者它们在内核构建或安装时被禁用。

对于NFS,没有单独的开关在内核配置中启用扩展属性。来源fs/nfs/dir.c,它似乎启用,当您启用CONFIG_NFS_V3CONFIG_NFS_V4的支持。但是NFS仍然依赖于底层的文件系统。所以你必须在服务器端启用扩展属性。

man mount

安装选项的ext2
...
user_xattr | nouser_xattr
支持 “用户”。扩展属性(或不)。

+0

如何在Linux内核中启用nfs文件系统的扩展属性? – 2013-02-14 10:42:50

+1

@AntonKovalenko在'fs/nfs */*。c'中搜索'xattr'。 – 2013-02-14 10:51:30

+0

@Venkat请参阅更新的答案。 – 2013-02-14 11:04:19