什么样的宏对应linux中的哪种文件系统。 在ReadHat linux中 这是[链接] http://lxr.free-electrons.com/source/include/uapi/linux/magic.h#L24
Eg:
#define EXT2_SUPER_MAGIC 0xEF53
#define EXT3_SUPER_MAGIC 0xEF53
#define EXT4_SUPER_MAGIC 0xEF53
------------------------------> are file system EXT2/EXT3/EXT4
what is the others?// HFS、NFS、XFS、JFS、Minix fs ......
谢谢!
答案 0 :(得分:1)
您引用的magic.h文件无法通过格式的幻数识别文件系统。首先,它为某些文件系统提供了神奇的数字,但它没有说明文件系统的磁盘格式在哪里寻找它!例如,你引用ext *的0xef53幻数必须通过查看文件系统开头的偏移量0x438找到,而XFS文件系统中的幻数号就在开头找到(字节偏移0)你可以查找reiserfs的偏移量为0x10034的幻数。文件系统甚至不是必须通过幻数识别 - 这只是一个好习惯。因此,magic.h文件永远不会真正完整也无用。
如果您想识别不同类型的文件系统,我建议使用file
。你可以查看filesystems magic file from its source code。它包含您提到的大多数文件系统类型的匹配规则。
注意:你也提到了NFS。由于NFS是一个网络文件系统,并且没有任何磁盘格式,它怎么能像其他格式一样有神奇的数字呢?
答案 1 :(得分:0)
这是一个老问题,但我会提供我的观点,任何人挖掘它,因为我一直在寻找linux / magic.h似乎不完整的原因,我看不到XFS_SUPER_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