4

操作系统如何知道分区正在使用什么文件系统?换言之,FAT16/32、NTFS、ext2/3等如何区分?

4

7 回答 7

4

如果您在 Windows 上使用 Win32 API,则可以调用 GetVolumeInformation ( http://msdn.microsoft.com/en-us/library/aa364993.aspx ) 来确定给定安装卷上存在的文件系统类型。

例如,如果您尝试检测 D: 上存在的文件系统,那么您可以调用:

WCHAR FSType[512];    

if (GetVolumeInformationW(L"D:\\", NULL, 0, NULL, NULL, NULL, FSType, ARRAYSIZE(FSType))) {
    wprintf(L"FS type = %s\n", FSType);    
}

但是,这仅在文件系统被正在运行的操作系统“识别”和“可挂载”时才有效。

于 2008-12-19T09:34:34.487 回答
2

几乎每个文件系统都有一些头信息,称为“超级块”。超级块包含幻数或有关文件系统类型的其他信息。

MBR 分区表还存储了一个 8 位的值,表示分区类型。

于 2008-12-19T09:24:15.833 回答
2

有几种方法,具体取决于硬件类型。

硬盘有一个主引导记录,后跟一个分区表PT包含此驱动器上的分区列表。该列表中的每个条目都包含(除其他外)一个指定分区文件系统的数字系统 ID字段。

软盘和大多数 U 盘没有 PT。在这里,您必须查看分区本身。第一个分区扇区(称为引导扇区)通常包含与 PT 中的系统 ID 格式完全不同的系统 ID。此外,扇区内 ID 的位置可能因文件系统而异。

于 2008-12-19T09:58:26.873 回答
1

首先,分区表中有一个指定分区类型的字节。其次,每个分区都有不同的标题和结构,因此通过一些分析可以非常精确地确定它。

于 2008-12-19T09:23:14.480 回答
1

假设你有一个MBR,那么关于 4 个主分区的详细信息可以在 0x01BE 找到。描述分区的十六个字节之一是类型标识符。

0x06 的 id 是fat16, 0x0B 是 FAT32 , 0x07 是NTFS, 0x82 是 Linux 分区。

除此之外,文件系统在分区内的特定位置具有可以检测到的结构。

于 2008-12-19T09:26:13.413 回答
1

处理设置文件系统或挂载它们的操作系统工具将使用各种启发式方法来尝试检测文件系统,例如查找它们具有的功能。例如,当“挂载”工具没有被告知要挂载的分区的文件系统类型时,它会按照“手册”页面的描述进行操作:

If no -t option is given, or if the auto type is  specified,  mount  will
try to guess the desired type.  Mount uses the blkid library for guessing
the filesystem type; if that does not turn up anything that looks  familiar,
mount  will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems.  All of the filesystem types  listed  there
will  be  tried, except for those that are labeled "nodev" (e.g., devpts,
proc and nfs).  If /etc/filesystems ends in a line with a single *  only,
mount will read /proc/filesystems afterwards.

blkid 库和 'disktype' 工具将,如果你给它一个磁盘块设备(如 /dev/sda)或分区块设备(如 /dev/sda1),使用启发式和有根据的猜测来确定其中的内容设备。非常有用的工具,尤其是在没有磁盘只有虚拟分区的xen环境中,因此你不能只查询主引导记录。

在设置新的基于 Linux 的系统(如 Ubuntu)时,会使用类似的工具来检测文件系统。

于 2012-10-10T07:13:19.563 回答
0

在 linux 上,当您挂载文件系统时,您可以传递 -t ext3/ext3 等 - 如果您查看 /etc/fstab(或等效项),每个驱动器可能都列出了其 fs 类型。

然后为了自动执行它,有超级块/等效项(认为 Windows 类型将其称为其他东西)......

看到这个:

超级块

每个文件系统都是不同的,它们有 ext2、ext3 等类型。此外,每个文件系统的大小有 5 GB、10 GB 和挂载状态等状态。简而言之,每个文件系统都有一个超级块,其中包含有关文件系统的信息,例如:

* File system type
* Size
* Status
* Information about other metadata structures

取自:

http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-superblock.html

于 2008-12-19T09:25:51.790 回答