确定分区的文件系统

时间:2008-12-19 09:13:51

标签: operating-system filesystems

操作系统如何知道分区使用的文件系统?换句话说,FAT16 / 32,NTFS,ext2 / 3等如何相互区分?

7 个答案:

答案 0 :(得分: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);    
}

但是,只有正在运行的操作系统“识别”和“可安装”文件系统时,这才有效。

答案 1 :(得分:2)

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

MBR分区表还存储表示分区类型的8位值。

答案 2 :(得分:2)

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

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

软盘和大多数USB记忆棒没有PT。在这里你必须查看分区本身。 第一个分区扇区(称为Boot Sector)通常包含一个系统ID ,其格式与PT中的系统ID完全不同。此外,扇区内ID的位置可能不同在文件系统之间。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

假设您有MBR,那么有关4个主分区的详细信息位于0x01BE。描述分区的十六个字节中的一个是类型标识符。

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

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

答案 5 :(得分:1)

处理设置文件系统或安装它们的操作系统工具将使用各种启发式方法来尝试检测文件系统,例如查找它们具有的功能。例如,当'mount'工具没有被告知要安装的分区的文件系统类型时,它会执行它的'man'页面所描述的内容:

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环境中,因此您不能只查询主引导记录。

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

答案 6 :(得分:0)

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

然后为了自动执行它,有超级块/等价物(想想windows类型称之为其他东西)......

见:

的Superblock

  

每个文件系统都不同   有类型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