我从 Peter Abel 的书 IBM PC 汇编语言和编程 中阅读了 FAT#2 的单行解释。
它说:
Although FAT2 is still maintained, its use has never been implemented.
维基百科说:
The FAT Region.
This typically contains two copies (may vary) of the File Allocation Table for the sake of redundancy checking, although rarely used, even by disk repair utilities.
我可以想到使用它的两个强有力的理由
- 所有 FAT 系统都有一个(除非一个禁用它)
- 它是内置的
我知道 FAT 是一个非常古老的文件系统,但为什么 FAT#2 从未并且很少被实现?
假设“FAT2”表示 FAT(文件分配表)的第二个副本,那么基本问题是它几乎没有实际用途,但我不确定它是否真的从未使用过。
FAT 是 FAT 文件系统中的一个中心数据结构,它是如此重要以至于文件系统本身就是以它命名的。它不仅是一个包含哪些簇已分配或未分配的表,它还存储构成每个文件的簇的链表。如果 FAT 中的单个扇区损坏,可能会丢失大量文件,因此在某些时候有人认为拥有 FAT 的备份副本是个好主意。
但问题是,如果 FAT 已损坏,您如何判断 FAT 的哪个副本是正确的?这将备份副本的用途限制为从主 FAT 读取导致读取错误的情况。因此,至少在理论上,如果在读取文件时操作系统在读取 FAT 时遇到错误,它可以尝试备份副本。
然而,物理磁盘错误并不是 FAT 损坏的唯一途径。特别是,磁盘修复实用程序(如 chkdsk
)并非真正设计用于修复由读取错误引起的文件系统损坏。它们只是为了修复由于将错误数据写入磁盘而导致的损坏。最常见的情况是计算机在写入磁盘的过程中关机。在那种情况下,文件系统很容易处于不一致状态。特别是如果操作系统正在更新 FAT,它可能更新了主副本但没有更新备份副本,或者它可能更新了备份副本但没有更新主副本。无法知道是哪一个。
我不确定操作系统是否真的会在读取错误后检查备份 FAT。这很难说,因为它很少在实践中产生影响。在过去 20 年左右制造的硬盘上,单个扇区读取错误并不常见,因为它们会在故障扇区变坏之前重新映射它们。驱动器在完全失效之前往往没有磁盘错误。即使在软盘上,物理磁盘错误也往往会影响整个磁道,这会删除 FAT 的两个副本。
查看 Linux 和 FreeBSD FAT 文件系统实现的源代码,如果从主 FAT 读取失败,它似乎不会尝试备份 FAT。我不知道微软的三个主要实现(MS-DOS、Windows 95 或 Windows NT)有什么用。