文件系统信息如何存储?

How does a file system information stores?

1.When 我在 linux 中使用 mkfs 命令,我想知道当我设置不同的 --type 时,磁盘会发生什么情况。

2.When 我用的是fdisk -l,它会告诉我每个分区的文件系统类型。所以我猜想磁盘中一定存有一些信息,以供识别之用。我对吗?如果是,信息位于何处?采用什么格式?

MBR和EBR中的分区信息不被Linux用来识别分区中存储的文件系统。这样做的原因是因为 MBR 只能容纳文件系统类型的单个 8 位值,而且它是出了名的不可靠。没有分配分区类型 ID 的单一注册表,如果有的话,考虑到多年来 MBR 已被大量操作系统使用(从 MS-DOS,到 Windows,到 Xenix,到许多 BSD,到 SCO Unix,到 Linux),256 种不同的分区类型是不够的。

所以发生的是文件系统 "magic numbers" 存储在不同的不同位置,几乎总是在分区的前 32k 左右(最常见的是在分区的前 4-8k ).当 Linux 内核挂载根文件系统时,它会简单地尝试多种不同的文件系统类型,直到成功挂载一个。在/etc/fstab文件中,列出了特定块设备应该使用的文件系统类型,因此内核不必猜测,或盲目尝试不同的文件系统类型。

如果您不知道特定分区中的文件系统类型 table,可以使用像 blkid 这样的程序使用启发式方法,通常使用 table 驱动的幻数集, 以确定文件系统类型。可以在这里找到这样的 table:

https://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/tree/lib/blkid/probe.c?h=v1.43.1#n1411

可以在多个地方找到幻数这一事实听起来很可怕,因为根据您尝试探测幻数的顺序,您可能会得到不同的答案。但幸运的是,大多数 mkfs 工具都足够智能,可以将磁盘的其他部分清零,这些部分来自文件系统的幻数可能以前曾在该分区上使用过,实际上,如果将前 32k 和最后 32k 清零,它就可以很好地工作在分区中。