MBR 和第一个分区之间的 FAT 文件系统

MBR 和第一个分区之间的 FAT 文件系统

我有一个旧的 64MB USB 闪存盘,它似乎有 MBR:

root@3:~# fdisk -lu /dev/sdd

Disk /dev/sdd: 64 MB, 64880640 bytes
2 heads, 54 sectors/track, 1173 cylinders, total 126720 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f20736b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048      126719       62336    6  FAT16
root@3:~# 

/dev/sdd1是FAT16文件系统:

root@3:~# file -s /dev/sdd1
/dev/sdd1: sticky x86 boot sector, mkdosfs boot message display, code offset 0x3c, OEM-ID " mkdosfs", sectors/cluster 2, root entries 512, Media descriptor 0xf8, sectors/FAT 244, sectors 124672 (volumes > 32 MB) , serial number 0x6b067135, label: "           ", FAT (16 bit)
root@3:~# 

我能够安装该/dev/sdd1分区并向其读取和写入文件。现在奇怪的部分是,我还能够挂载/dev/sdd并且能够列出该文件系统上的文件。文件系统/dev/sdd似乎是由 Windows XP 创建的,因为它使用 MSDOS5.0 作为 OEM ID:

root@3:~# file -s /dev/sdd
/dev/sdd: sticky x86 boot sector, code offset 0x3c, OEM-ID "MSDOS5.0", sectors/cluster 2, root entries 512, Media descriptor 0xf8, sectors/FAT 247, heads 255, sectors 126720 (volumes > 32 MB) , serial number 0x50435598, unlabeled, FAT (16 bit)
root@3:~# 

此外,一旦我将其安装/dev/sdd到 /media 并执行ls -l /media,其中一个文件就被命名为“New Text Document.txt”。我知道可以直接在没有分区的设备上创建文件系统,但在这种情况下将没有 MBR,并且fdisk应该抱怨没有有效的分区表。

我是否正确,可能在 Windows 下为整个 USB 闪存盘创建了 FAT16 文件系统,然后为该闪存盘创建了 MBR 和单个分区,但从未触及扇区 1 到 2047 的区域,并且Windows 创建了 FAT16 文件系统结构,至少达到了我能够使用mount实用程序安装它的程度?

答案1

发生这种情况的原因是 FAT(16 和 32)将分区几何结构存储在第一个扇区的开头附近(分别为 63 和 90 字节),而 MBR 将其存储在结尾附近。这使得同时编写两者成为可能。 GRUB 的第一阶段支持两者,因此它在这两个地方都有“未使用”的区域。但就你而言,结构显然是交联的向其中一个写入会腐蚀另一个!我建议您备份文件,验证它们,然后擦除 MBR,然后重新正确创建它。编辑:它不是一个保护性 MBR,因为这样它就不会作为可用的 FAT 系统可见。它会被隐藏。也许 Windows 会提示您对其进行格式化,就像不受支持的可移动驱动器的自定义操作一样。

答案2

这要么是您的猜测,要么是您检测到的 MBR保护性MBR该磁盘曾经可能是 UEFI 启动磁盘。gdisk /dev/sdd有关磁盘及其分区结构的更多信息,请执行以下操作。gptfdisk如果您尚未安装该软件包,则需要该软件包。

无论问题的根源是什么,如果您可以在进一步分区/格式化之前清除磁盘的顶部 4MB 以删除任何文件系统或分区表的所有痕迹,则可以使用新的分区表重新开始。

做:

dd bs=4096 count=1024 if=/dev/zero of=/dev/sdd

...如果你想擦拭它,一定要重新开始。

相关内容