0

什么样的宏对应linux中什么样的文件系统。在 ReadHat linux 这里是 [a Link] 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 ......

谢谢!

4

2 回答 2

1

您所指的magic.h 文件并不能真正用于通过格式的幻数来识别文件系统。一方面,它为某些文件系统提供了神奇的数字,但它没有说明文件系统的磁盘格式在哪里寻找它!例如,您为 ext* 引用的 0xef53 幻数必须通过查看文件系统开头的偏移量 0x438 来找到,而 XFS 文件系统中的幻数可以在开头找到(字节偏移量 0),您可以查找reiserfs 在偏移量 0x10034 处的幻数。文件系统甚至没有必要通过幻数来识别——这只是一种很好的做法。因此,magic.h 文件永远不会真正完整或有用。

如果要识别不同类型的文件系统,我建议使用file. 您可以从其源代码中查看文件系统魔术文件。它包含您提到的大多数文件系统类型的匹配规则。

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

于 2013-07-06T13:35:54.177 回答
0

这是一个老问题,但我会为任何挖掘它的人提供我的观点,因为我确实在寻找 linux/magic.h 似乎不完整的原因,并且我没有看到 XFS_SUPER_MAGIC 的定义或我认为它应该在任何系统中的值头文件。

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

但是,如果您使用 statfs() 系统调用来确定 inode 所在的文件系统类型,也许是查看不同的条目或类似性质的东西,那么 linux/magic.h 中的幻数可以很好地识别文件系统据我所知。不幸的是,当我发现为 XFS 寻找一个时,似乎存在差距。顺便说一句,它似乎从 statfs() 返回为 0x58465342。无论好坏(不幸的是可能更糟),我现在有:

#include <linux/magic.h> 
#ifndef XFS_SUPER_MAGIC
#define XFS_SUPER_MAGIC 0x58465342
#endif
于 2017-09-01T15:47:07.730 回答