本篇内容介绍了“如何理解ext2文件系统中的xattr”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联是一家专业提供定安企业网站建设,专注与成都做网站、网站设计、H5场景定制、小程序制作等业务。10年已为定安众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
§ 0x01 背景
文件系统支持一特性就是扩展性,给一个文件(inode)添加各种属性。对于ext2文件系统来说,xattr(extend attribution)是它支持的为数不多的现代文件系统的特征之一。
那么为什么需要这个特性呢?这要从文件系统的元数据和数据的区别说起。xattr属于元数据,元数据一般是固定的,但一些场景下它也要提供一定的扩展性,而xattr就是为元数据的扩展性而存在的。下面扯下我对元数据和数据的理解,分析下为什么需要元数据。
1.1 文件的元数据与数据
我们知道文件的数据分为两类:元数据(meta data)和数据(data)。元数据是用来控制用户对数据的操作的。这也符合k8s中通过对象控制对象的程序范式。
数据:记录真正对用户有意义的信息。如:文件中的内容;文件名。
元数据:辅助完成数据存取。如:文件的创建、修改时间,文件的权限。
一般来说元数据不需要用户主动感知,比如文件创建时,对应的时间信息由文件系统自动写入。但必需以不同的方式提供它的访问。如果和常规数据放一起了,如下:
filename: hello.txt modify_time: 2021-3-7 20:00:00 regular_data: hello world
这种方式可行吗?当然可行了。只是你无法控制用户是否会误操作,把对应的元数据改掉了;模块化编程的原则之一最小接口原则,在这里也适用,单独的接口修改,对比直接的修改来说,接口的能力(自由度)下降了,系统对用户的约束增强了,可以避免用户对数据的乱修改。
另外一个问题是,元数据的变更是稳定的,即使你频繁地读写一个文件,这个文件的元数据需要修改的只是对应的访问时间戳和修改时间戳。没有分开的情况下,元数据整体被频繁的读出,写入,这对系统来说是无意义的消耗,更别说在那个计算能力不足的年代背景下了。
通过以下分析,我们知道元数据需要单独存储。单独存储就需要单独的接口,因为普通文件的读写接口权限过大。但一方面,对一个文件来说,通过的读写接口不能满足对元数据修改的需求,需要提供其他系统接口。Linux下就是用ioctl系统调用实现对元数据的修改的。
§ 0x02 ext2的xattr实验
主要setfattr和getfattr。通过查看ext2代码才知道,它支持三种类型的attr。通过不同的命名前缀区分。
security.xxx: 目前是selinux在用;
user.xxx: 普通用户也可以使用;
trusted.xxx: 只有超级用户可以使用,可以用来在用户空间实现一些特性。
示例:
为test文件增加一个属性。
setfattr -n user.word -v "hello world" test getfattr -n user.word hello # file: hello user.word="hello world"
§ 0x03 xattr的用途
目前了解的是ceph演进过程中,曾经用xattr来保存底层的一些信息;
安全审计相关的应用会用到security attr;
attr同样也支持给目录增加属性,可能某些场景下可以用到,暂时没有想到。
“如何理解ext2文件系统中的xattr”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
文章名称:如何理解ext2文件系统中的xattr
标题URL:http://lswzjz.com/article/ghopgs.html