linux中哪种宏对应哪种文件系统

linux中哪种宏对应哪种文件系统,linux,filesystems,Linux,Filesystems,什么样的宏对应于linux中什么样的文件系统。 在ReadHat linux中 这里是[链接] 谢谢 您所引用的magic.h文件实际上无法通过其格式的幻数来识别文件系统。首先,它给出了一些文件系统的神奇数字,但它没有说明在文件系统的磁盘格式中查找它的位置!例如,您为ext*引用的0xef53幻数必须通过从文件系统开始处的偏移量0x438来查找,而XFS文件系统中的幻数正好位于开始处(字节偏移量0),您可以在偏移量0x10034处查找reiserfs的幻数。甚至严格来说,文件系统也不需要通过幻数

什么样的宏对应于linux中什么样的文件系统。 在ReadHat linux中 这里是[链接]


谢谢

您所引用的magic.h文件实际上无法通过其格式的幻数来识别文件系统。首先,它给出了一些文件系统的神奇数字,但它没有说明在文件系统的磁盘格式中查找它的位置!例如,您为ext*引用的0xef53幻数必须通过从文件系统开始处的偏移量0x438来查找,而XFS文件系统中的幻数正好位于开始处(字节偏移量0),您可以在偏移量0x10034处查找reiserfs的幻数。甚至严格来说,文件系统也不需要通过幻数来识别——这只是一种好的做法。因此,magic.h文件永远不会真正完整或有用

如果要识别不同类型的文件系统,我建议使用
file
。你可以看看这个。它包含您提到的大多数文件系统类型的匹配规则


注意:您也提到了NFS。由于NFS是一个网络文件系统,没有任何磁盘格式,它怎么会像其他文件系统一样有一个神奇的数字呢?

这是一个老问题,但我将为任何人提供我的观点,就像我在寻找linux/magic.h似乎不完整的原因一样,我没有看到XFS\u SUPER\u magic的定义,也没有看到任何系统头文件中应该包含的值

这取决于你想完成什么。例如,如果您试图读取一些您不知道其格式的媒体,那么Celada是正确的,您将需要有关该文件系统布局的更多信息,在类似NFS的情况下,可能是幻数没有意义

但是,如果您使用statfs()系统调用来确定inode所在的文件系统的类型,可能需要查看dirent条目或类似的内容,那么就我所知,linux/magic.h中的神奇数字可以很好地识别文件系统。不幸的是,正如我为XFS寻找的那样,似乎存在一些差距。顺便说一下,它似乎是从statfs()返回的0x58465342。无论是好是坏(很可能更糟),我现在有:

#include <linux/magic.h> 
#ifndef XFS_SUPER_MAGIC
#define XFS_SUPER_MAGIC 0x58465342
#endif
#包括
#ifndef XFS_超级魔术
#定义XFS_SUPER_MAGIC 0x58465342
#恩迪夫

如果您后退一步,公布您试图解决的实际问题,可能会有所帮助。您可能会发现,“识别文件系统类型”对于解决问题并不是必不可少的。例如,您可以启动UML并实际挂载您的文件吗?(无需特殊烫发。)
#include <linux/magic.h> 
#ifndef XFS_SUPER_MAGIC
#define XFS_SUPER_MAGIC 0x58465342
#endif