ceph存储 linux下扩展属性EA

EA的详细介绍,参考LinuxQuestion网站的介绍:

http://wiki.linuxquestions.org/wiki/Extended_attributes

大体的意思就是,EA是目前流行的POSIX系统中文件系统具有的一项特殊功能,可以给文件、文件夹添加额外的key/value的键对值,键和值都是字符串并且有一定长度的限制。

常用到的命令如下:setfattr、getfattr、attr。
setfattr可以设置EA,getfattr可以获取EA,attr是一个综合命令,可以设置、获取、删除、列举所有等操作。

注意,这个扩展属性不是我们常说的lsattr、chattr中对文件操作的属性,这里的EA是完全的自定义属性。

在使用EA中,我们自定义的属性名称最好使用上命名空间,如user、root、system等,比如Linux中ACL中使用的键值为:system.posix_acl_access

注意,在大多系统中,使用setfattr设置EA的时候,我们必须使用user作为命名空间前缀,否则会返回如下错误 setfattr xxx Operation not supported 的错误!

举例如下:
设置EA属性

setfattr -n user.foo -v bar test-file

获取EA属性

getfattr -n user.foo test-file

删除EA属性

setfattr -x user.foo test-file

列举所有EA属性

attr -lq test-file

注意,在列举出的属性中,没有显示默认的命名空间,所以你必须知道该属性命名空间,参加下面的方法获取全名属性。

列举所有EA属性

getfattr -d -m ".*"  test-file

至此,我们谈一下关于GlusterFS中经常遇到的一个问题,在添加或者替换某个brick的时候,经常会遇到如下错误提示:
a prefix of it is already part of a volume
常常让我们无法使用一个已有的目录作为brick,我们可以新建一个brick,还有一种做法就是删除掉这个目录的Extended Attribute(EA),这些EA是由Gluster添加的,命名空间是trusted。

for i in `attr -lq .`; do setfattr -x trusted.$i .; done

显示所有属性getfattr -m .* -d 1

其他内容: 最近研究文件系统的扩展属性,在特殊情况下可以实现令人想象不到的效果,现在还没有搞太明白,先记录 几条命令,有时间再深入研究。 attr -s status -V "In Progress" test.txt Attribute "status" set to a 11 byte value for test.txt: status getfattr test.txt # file: test.txt user.status getfattr -n user.status test.txt # file: test.txt user.status="In Progress" 如果出现“Operation not supported”错误,要注意两个事情: 1) 文件系统的挂载选项是否包括user_xattr选项,可以用mount命令来查看,比如 /dev/cciss/c0d0p2 on / type ext3 (rw) /dev/cciss/c0d0p1 on /boot type ext3 (rw) /dev/sda3 on /data01 type ext3 (rw) /dev/sdb on /data02 type ext3 (rw,user_xattr) 比较诡异的事情是,/, /data01虽然没有user_xattr选项,但是可以使用setfattr,而/data02去掉 user_xattr选项的话就报“Operation not supported”。因此必须要增加该选项,在/etc/fstab表中格式如下: LABEL=/ / ext3 defaults 1 1 LABEL=/data01 /data01 ext3 defaults 1 2 LABEL=/boot /boot ext3 defaults 1 2 /dev/sdb /data02 ext3 defaults,user_xattr 1 2 这里区别是/, data01,/boot是安装操作系统时自动生成的,/data02是后来格式化挂载的,不知道其中到底是什么区别。 2)即使使用了user_xattr的选项,照样也会出现这个错误,比如 # setfattr -n "test" -v bigfs f1000 setfattr: f1000: Operation not supported 这里的错误原因是,name 一定是要以 user. 开头项目 (为namespace,一般称呼为命名空间),比如: # setfattr -n "user.test" -v bigfs f1000。

ACL Extended Attribute 新增与检视 setfacl 程序使用的方式如下:    setfattr -n name [-v value] pathname...  (新增标注)    setfattr -x name pathname...      (取消标注)

 

其中 -n 表示属性名称,-v 后面接属性的储存内容。 -x 表示删除该属性数据。 假设目前已经建立了 file.txt 档案,操作 setfacl 使用如下:    setfattr -n user.author -v "kenduest" file.txt    setfattr -n user.desc -v "test only file" file.txt 要注意的是,name 一定是要以 user. 开头项目 (为namespace,一般称呼为命名空间),要不然执行期会出现 operation not supported 错误。 getfacl 程序使用的方式如下:    getfattr -n name pathname... 其中 -n 表示属性名称,表示取出该属性的数据内容。若是都没指定参数只有接文件名,会列出所有设定上去的属性名称列表。 执行如下命令可以取出属性的纪录内容:    getfattr -n user.author file.txt    getfattr -n user.desc file.txt

程序执行结果分别显示输出如下:    # file: file.txt    user.author="kenduest"    # file: file.txt    user.desc="test only file" 可以发现到刚刚设定的属性数据已经可以正确检视了。 其中执行如下可以联系查看:

#getfattr -d -m "" file0

输出结果如下:

# file: file0 trusted.test-xattr="test"

Extended Attribute其他事宜 同 POSIX ACL 权限的一些问题等,并不是所有的程序都支持 Extended Attribute,所以可能程序于存取读写后可能会遗失这类信息纪录,尤其是常使用的 GNU tar 程序就尚未正式纳入该支持,所以在档案目录备份上还需要另外处理细节问题。 若是 Linux Distribution 对于 POSIX ACL与 Extended Attribute已经整合完备的话,常见的档案目录管理工具应该都会正确支持。而至于 GNU tar 程序问题,到是可以另外安装 star 程序来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值