【发布时间】:2010-09-27 16:25:23
【问题描述】:
操作系统如何知道一个分区正在使用什么文件系统?也就是说,FAT16/32、NTFS、ext2/3等如何区分?
【问题讨论】:
标签: operating-system filesystems
操作系统如何知道一个分区正在使用什么文件系统?也就是说,FAT16/32、NTFS、ext2/3等如何区分?
【问题讨论】:
标签: operating-system filesystems
如果您在 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);
}
这只有在文件系统被正在运行的操作系统“识别”和“可挂载”的情况下才有效。
【讨论】:
有多种方法,具体取决于硬件类型。
硬盘有一个主引导记录,后跟一个分区表。 PT 包含此驱动器上的分区列表。该列表中的每个条目都包含(除其他外)一个数字 System ID 字段,用于指定分区文件系统。
软盘和大多数 U 盘没有 PT。在这里,您必须查看分区本身。 第一个分区扇区(称为Boot Sector)通常包含一个系统 ID与 PT 中的系统 ID 格式完全不同。此外,扇区内的 ID 位置可能因文件而异系统。
【讨论】:
/etc/fstab中的信息是从哪里来的?它是由某个程序编写的,该程序从我提到的结构中读取信息。
/etc/fstab,但现代 Linux 发行版倾向于识别分区并为你编写 fstab。
每个文件系统都有一些头信息,称为“超级块”。超级块包含幻数或有关文件系统类型的其他信息。
MBR 分区表还存储了一个 8 位的值,表示分区类型。
【讨论】:
首先,分区表中有一个指定分区类型的字节。其次,每个分区都有不同的标题和结构,因此通过一些分析可以非常精确地确定。
【讨论】:
处理设置文件系统或挂载它们的操作系统工具将使用各种启发式方法来尝试检测文件系统,例如查找它们具有的功能。例如,当“挂载”工具没有被告知要挂载的分区的文件系统类型时,它会按照“手册”页面的描述进行操作:
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)时,会使用类似的工具来检测文件系统。
【讨论】:
在 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
【讨论】: