如何在FUSE文件系统上获取更详细的文件系统信息?

时间:2015-03-09 23:49:48

标签: linux fuse

在Linux系统上,可以识别“常规”文件系统 使用statfs(2)并检查f_type。常数为几个 文件系统类型在statfs(2)联机帮助页中提到,例如

EXT4_SUPER_MAGIC      0xEF53
BTRFS_SUPER_MAGIC     0x9123683E
FUSE_SUPER_MAGIC      0x65735546
PROC_SUPER_MAGIC      0x9fa0
SYSFS_MAGIC           0x62656572

(事实证明,这些实际上是在linux/magic.h中定义的。)

我希望能够区分众所周知的远程文件系统 (例如sshfs)来自着名的本地文件系统(例如 NTFS-3G)。有没有办法找到更多关于基于FUSE的信息 文件系统,例如此时的名称?

1 个答案:

答案 0 :(得分:1)

根据some old IBM fuse documentation,并且在每个这些文件系统的statfs实现中设置f_type的sshfsntfs-3g的实现似乎被忽略。

我相信使用此方法会导致基于the initialization of the value here的值为0x65735546。

在用户空间中获取文件系统信息的机制是/proc/mounts/proc/<pid>/mountinfo,如文档here所述。这有第9个字段作为文件系统类型,它具有FUSE子类型(如果它们被指定为mount选项并且由内核支持)为type.subtype。例如fuse.sshfs或fuse.ntfs-3g。

要在内核空间中访问相同的信息,可以将lookup_mnt与路径一起使用,以获取指向vfsmount结构的指针,从中可以访问超级块,然后访问子类型。其中struct vfsmount *mnt和子类型为mnt->mnt_sb->s_subtype