在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的信息 文件系统,例如此时的名称?
答案 0 :(得分:1)
根据some old IBM fuse documentation,并且在每个这些文件系统的statfs实现中设置f_type的sshfs和ntfs-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
。