代码之家  ›  专栏  ›  技术社区  ›  billyswong

确定分区属于哪个文件系统

  •  4
  • billyswong  · 技术社区  · 16 年前

    操作系统如何知道分区使用的文件系统?换句话说,fat16/32、ntfs、ext2/3等是如何区分的?

    7 回复  |  直到 12 年前
        1
  •  2
  •   Treb    16 年前

    根据硬件类型,有几种方法。

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

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

        2
  •  4
  •   reuben Omranic    16 年前

    如果在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);    
    }
    

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

        3
  •  2
  •   Mehrdad Afshari    16 年前

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

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

        4
  •  1
  •   Vilx-    16 年前

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

        5
  •  1
  •   Zoredache    16 年前

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

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

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

        6
  •  1
  •   Asfand Qazi    12 年前

    处理设置文件系统或安装文件系统的操作系统工具将使用各种试探法来尝试检测文件系统,例如查找它们拥有的功能。例如,如果没有告诉“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环境中,因此您不能只查询主引导记录。

    当建立一个新的基于Linux的系统(如Ubuntu)时,类似的工具被用来检测文件系统。

        7
  •  0
  •   benlumley    16 年前

    在Linux上安装文件系统时,可以传递-t ext3/ext3等-如果您在/etc/fstab(或等效文件)中查找,则每个驱动器可能都列出了其fs类型。

    然后,对于自动执行此操作,有superblock/equivalent(认为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