我使用 GParted 将外部 USB 硬盘驱动器划分为两个分区。两者都是格式为 FAT32 的主分区,大小相同 (500 GB)。这是的输出file -s
:
/dev/sdb1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 64, reserved sectors 64, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 2048, sectors 976760832 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x3, serial number 0x99034dfb, label: "TOSHIBA1 "
/dev/sdb2: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 64, reserved sectors 64, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 976762880, sectors 976760832 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x1, serial number 0x96cbe274, label: "TOSHIBA2 "
在/dev/sdb2
,什么是hidden sectors
,为什么它大于sectors
?差值是 2048,恰好是hidden sectors
for的值/dev/sdb1
。这是巧合吗?GParted 或file
命令错误?更重要的是,有什么需要担心的吗?
tl;博士
没什么好担心的。
维基百科文章FAT 文件系统的设计多次提到“隐藏扇区”,相关元数据条目的常见描述是
(很少有怪癖)。此描述似乎符合您在特定情况下观察到的值。
我希望 Linux 工具默认不会使用这个值。在您的情况下,相应的值
2048
和976762880
在 的上下文中有效/dev/sdb
,但是如果您分别考虑/dev/sdb1
和 ,/dev/sdb2
则这些设备没有分区,因此在它们的上下文中“隐藏扇区”应该是0
。使用 like 挂载很常见
mount /dev/sdb1 /some/mountpoint
,但如果分区从 512 字节的 2048 个扇区的偏移量开始,那么您可以使用因此,就 Linux 而言,没有明确的指示哪个上下文是“正确的”上下文。“隐藏扇区”值无关紧要的另一个提示是,它将属于分区表的信息嵌入到文件系统的元数据结构中。现在我们倾向于不混合这样的抽象层。将两条信息“去同步”相对容易。而且由于操作系统首先需要读取分区表来查找文件系统,因此只有在您已经知道偏移量之后才可用的有关偏移量的冗余信息几乎没有用处。
请注意,还有另一个冗余信息:分区表包含分区 ID (MBR) 或分区类型 GUID (GPT),它们应该对应于分区中的实际文件系统,但可能不对应。但是,如果这些信息是一致的,则非常有用,因为您可以通过仅检查分区表来了解预期的内容(什么操作系统、可能的多重引导、交换分区)。在实践中,有时这对人类有用,有时对机器有用;特别是 UEFI 需要知道哪个分区是EFI 系统分区。但是如果你告诉 Linux
mount /dev/sdb1 …
它将尝试检测那里的实际文件系统而不是检查/dev/sdb
,读取分区表并使用分区 ID/GUID。我不知道“隐藏部门”背后的基本原理是什么。尽管如此,似乎有些设备以某种方式依赖于这个值。比较
man 8 mkfs.fat
:看来 GParted 继续前进并试图满足“一些数码相机”之类的要求。所以这是一件好事。您绝对不需要使用其他工具重做。