【问题标题】:VFS and FS i-node differenceVFS和FS i-node的区别
【发布时间】:2014-07-25 08:52:38
【问题描述】:

VFS i-node 和FS(例如EXT)i-node 有什么区别?

EXT i-node 是否有可能是持久的(包含/指向数据块),但 VFS i-node 在读取/使用EXT i-node 后仅在 i-node 缓存中创建?

或者VFS i-node 只是FS i-node 的一个图像(它是一样的),并且那些系统中的i-nodes 不能使用i-nodes(例如FAT, NTFS)有被模拟(如何?)以允许 VFS 与那些 FS 一起工作,就像他们支持 i-nodes 一样?

【问题讨论】:

    标签: linux operating-system filesystems inode


    【解决方案1】:

    您似乎已经自己回答了您的问题:)

    让我们考虑一下EXT4的情况:

    文件系统 inode 以 struct ext4_inode 所描述的格式存储在磁盘上。 struct ext4_inode_info 只是相同的内存表示。 VFS inode 也是一个内存中的对象,它包含与文件系统类型无关的常见 inode 信息,因此可以被抽象。它是从 inode 缓存(使用slab分配器获得的内存池)分配的。VFS struct inode 嵌入在文件系统特定的内存结构 inode 中。例如,struct ext4_inode_info 有一个名为 struct inode vfs_inode 的成员。给定一个 VFS inode,您可以使用内核代码中的标准 container_of 宏来获取 FS 特定的 inode。因此,当 VFS 将通用 inode 结构移交给任何 FS 时,它都可以访问自己的 inode 结构。

    查看使用 __ext4_new_inode() 创建新 inode 时会发生什么

    FAT 通常将元数据(即 inode 信息)存储在目录条目中。所以 linux fat 驱动程序只是 reads 它,在内存中填充必要的字段。由于 FAT 中没有 inode 的概念,因此 inode 编号是一个随机数 - 准确地说是调用 iunique()。

    一些关于 VFS 的好资源:

    http://www.win.tue.nl/~aeb/linux/lk/lk-8.html

    http://lxr.free-electrons.com/source/Documentation/filesystems/vfs.txt

    【讨论】:

    • 非常感谢您的解释和有趣的资源!
    猜你喜欢
    • 2015-07-11
    • 2011-12-10
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2020-02-26
    • 2011-03-21
    相关资源
    最近更新 更多