• ext2文件系统体会-xattr


    § 0x01 背景

    文件系统支持一特性就是扩展性,给一个文件(inode)添加各种属性。对于ext2文件系统来说,xattr(extend attribution)是它支持的为数不多的现代文件系统的特征之一。

    那么为什么需要这个特性呢?这要从文件系统的元数据和数据的区别说起。xattr属于元数据,元数据一般是固定的,但一些场景下它也要提供一定的扩展性,而xattr就是为元数据的扩展性而存在的。下面扯下我对元数据和数据的理解,分析下为什么需要元数据。

    1.1 文件的元数据与数据

    我们知道文件的数据分为两类:元数据(meta data)和数据(data)。元数据是用来控制用户对数据的操作的。这也符合k8s中通过对象控制对象的程序范式。

    1. 数据:记录真正对用户有意义的信息。如:文件中的内容;文件名。
    2. 元数据:辅助完成数据存取。如:文件的创建、修改时间,文件的权限。

    一般来说元数据不需要用户主动感知,比如文件创建时,对应的时间信息由文件系统自动写入。但必需以不同的方式提供它的访问。如果和常规数据放一起了,如下:

    filename: hello.txt
    modify_time: 2021-3-7 20:00:00
    regular_data:
    hello world
    

    这种方式可行吗?当然可行了。只是你无法控制用户是否会误操作,把对应的元数据改掉了;模块化编程的原则之一最小接口原则,在这里也适用,单独的接口修改,对比直接的修改来说,接口的能力(自由度)下降了,系统对用户的约束增强了,可以避免用户对数据的乱修改。
    另外一个问题是,元数据的变更是稳定的,即使你频繁地读写一个文件,这个文件的元数据需要修改的只是对应的访问时间戳和修改时间戳。没有分开的情况下,元数据整体被频繁的读出,写入,这对系统来说是无意义的消耗,更别说在那个计算能力不足的年代背景下了。

    通过以下分析,我们知道元数据需要单独存储。单独存储就需要单独的接口,因为普通文件的读写接口权限过大。但一方面,对一个文件来说,通过的读写接口不能满足对元数据修改的需求,需要提供其他系统接口。Linux下就是用ioctl系统调用实现对元数据的修改的。

    § 0x02 ext2的xattr实验

    主要setfattr和getfattr。通过查看ext2代码才知道,它支持三种类型的attr。通过不同的命名前缀区分。

    1. security.xxx: 目前是selinux在用;
    2. user.xxx: 普通用户也可以使用;
    3. trusted.xxx: 只有超级用户可以使用,可以用来在用户空间实现一些特性。

    示例:

    1. 为test文件增加一个属性。
    setfattr -n user.word -v "hello world" test
    
    getfattr -n user.word hello
    # file: hello
    user.word="hello world"
    

    § 0x03 xattr的用途

    1. 目前了解的是ceph演进过程中,曾经用xattr来保存底层的一些信息;
    2. 安全审计相关的应用会用到security attr;
    3. attr同样也支持给目录增加属性,可能某些场景下可以用到,暂时没有想到。

    § 0x04 参考

    1. [ceph后端存储引擎的演进] https://zhuanlan.zhihu.com/p/101772382
  • 相关阅读:
    《论文解读》THE CURIOUS CASE OF NEURAL TEXT DeGENERATION
    AnatoMask论文汇总
    项目质量保证措施(Word原件)
    C#闭包详解
    java计算机毕业设计消防应急管理系统源代码+数据库+系统+lw文档
    JavaScript学习总结(对象)
    fetch前后端通信
    npm常用命令详解
    创建对象在堆区如何分配内存
    SpringBoot是什么?SpringBoot的优缺点有哪些?
  • 原文地址:https://blog.csdn.net/u012520854/article/details/127100173