文件系统扩展属性操作(setfattr, getfattr)

文件系统扩展属性操作(setfattr, getfattr)  

2010-03-12 22:19:52|  分类: 技术文档|举报|字号 订阅

最近研究文件系统的扩展属性,在特殊情况下可以实现令人想象不到的效果,现在还没有搞太明白,先记录
几条命令,有时间再深入研究。
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"


可以发现到刚刚设定的属性数据已经可以正确检视了。

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、付费专栏及课程。

余额充值