【问题标题】:FUSE filesystem manipulationFUSE 文件系统操作
【发布时间】:2011-08-04 12:47:14
【问题描述】:

如何遍历 FUSE 文件系统的超级块中的 inode?文档没有说明这一点。

【问题讨论】:

  • 遍历 inode 是什么意思?
  • 我的意思是我希望能够有一个指向每个 inode 的指针——可能是某种结构。
  • FUSE 是一个接口,而不是一个文件系统。 FUSE 后端代表的虚拟文件系统可能没有 inode 或超级块,它可能根本无法以可枚举的方式表示文件。 (例如,很容易编写一个包含所有可能文件名的 FUSE 文件系统,每个文件都包含其名称。)
  • 是否可以伪造每个文件和目录都有一个inode?这也足够了。
  • FUSE 可以做一些非常危险的事情,并导致主机以危险的方式行事。特别是,要符合 POSIX,每个文件必须具有唯一的 dev_tino_t 对。这是能够识别 2 个名称或文件描述符是否引用同一个文件的关键。每个可能的文件名都存在的文件系统具有比ino_t 值更多的文件,因此存在一个大问题。可悲的是,在 Linux 内核人员中似乎很流行给人们足够的绳索来炸毁宇宙......

标签: c fuse


【解决方案1】:

您可以通过在活动 FUSE 实例的挂载点调用 nftw() 来遍历可见的(带有条目的)。您提供的回调将获得文件系统中每个条目的路径和struct stat。您可以通过对返回路径的系统调用与相应的 inode 进行交互。

【讨论】:

  • 制作nftw。我相信它稍微灵活一些,并且意味着过时了普通的ftw
【解决方案2】:

FUSE 不是文件系统,也不包含传统的 inode。最好将其视为实现 UNIX 文件系统 API 提供的相反功能。例如,当您打开一个文件时,您会生成一个文件打开系统调用。然后内核接受该系统调用并返回一个文件。

FUSE 所做的是从内核将系统调用重定向到返回到用户空间的 FUSE 应用程序。然后应用程序决定如何响应该系统调用并向内核返回一些内容。然后内核将该响应传递回原始调用应用程序。

在许多情况下,当您使用 FUSE 安装某些东西时,您并不是在安装物理介质。当您在 FUSE 文件系统中打开一个文件时,它可能会在某个真实文件系统的某个位置创建一个临时文件,将数据复制到该文件,然后将 FUSE 文件上的大多数文件操作调用重定向到它创建的临时文件.

大多数 FUSE 应用程序都实现了 stat,并提供了真实 INODE 结构所具有的大部分信息,但是,这些信息通常不会有指向它的指针方面。

从技术角度来看,您可以在 FUSE 中实现类似 EXT3 的功能,它将 EXT3 文件系统作为挂载参数作为挂载参数。在这种情况下,您可以想象真正的 INODES,可能带有实际的 INODE 指针。但是,EXT3 的实现可能相当不受欢迎,因为每个文件系统调用都涉及从用户空间到内核到 FUSE 用户空间到内核到 FUSE 用户空间到内核,然后最终返回到您的应用程序。 FUSE 对于性能不重要的文件系统更有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 2011-12-03
    • 2017-10-04
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2012-10-16
    相关资源
    最近更新 更多