为什么 Windows 无法识别 FAT32 外部驱动器?

为什么 Windows 无法识别 FAT32 外部驱动器?

我有两个 USB 外置硬盘,格式为 FAT32。它们在 Linux 下都可以正确识别和安装。但是,其中一个 ( /dev/sdb/) 在 Windows 7 或 10 下无法识别。当我插入它时,Windows 要求对其进行格式化。另一个 ( /dev/sdc/) 在 Windows 下可以正确识别和安装。

这是输出fdisk -l

Disk /dev/sdb: 465.78 GiB, 500107861504 bytes, 976773167 sectors
Disk model: M3              
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbfc594d1

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1        2048 976773119 976771072 465.8G  b W95 FAT32


Disk /dev/sdc: 465.78 GiB, 500107862016 bytes, 976773168 sectors
Disk model: 5000AAKB Externa
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8f9c798a

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdc1        2048 976773119 976771072 465.8G  b W95 FAT32

据我所知,除了磁盘的型号和使用年限之外,它们之间没有区别,这些应该无关紧要。可能是它们用不同的软件格式化的(老实说我不记得了,至少其中一个是用 格式化的gparted),但两种情况下的分区表都一样dos,文件系统也一样。
我想知道为什么会发生这种情况,以及是否有解决办法。Windows 和 FAT32 之间是否存在问题?

编辑:输出file -s

/dev/sdb1: DOS/MBR boot sector

/dev/sdc1: 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 976771072 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x1, serial number 0x31284d40, label: ""

答案1

重新格式化磁盘(使用mkfs.fat)似乎解决了该问题。

答案2

这是对我有用的方法。它涉及可能破坏磁盘和文件系统的破坏性步骤。如果您遵循此过程,我将免除所有责任。

我的磁盘是 32GB USB,使用 进行分区fdisk /dev/sdb,创建了一个逻辑分区,该分区涵盖所有 0b WIN95 OSR2 FAT32 类型的磁盘,使用 mkfs.vfat 进行格式化。它在 Linux 下可以运行,但在 Windows 和 Mac 下不能运行。

我设法修复了它,但我不知道原因是什么,因为我没有正确备份。

在实验之前我首先对 Linux 中的磁盘进行了备份。

我应该执行以下操作以便可以恢复 MBR 或告诉您文件系统出了什么问题:

mkdir backup
dd if=/dev/sdb of=mbr bs=1 count=512
dd if=/dev/sdb1 of=sdb1start bs=1 count=512

可能的恢复是

可能具有破坏性的命令确保 /dev/sdb 是您要覆盖的磁盘

dd if=mbr of=/dev/sdb bs=1 count=512 conv=notrunc
dd if=sdb1start of=/dev/sdb1 bs=1 count=512 conv=notrunc

首先,有人指出,可能还剩下多个标签,所以我

wipefs /dev/sdb

它显示了三个项目 dos、gpt 和 iso9660。那个 iso9660 是我将 linux 映像复制到磁盘时留下的。所以我开始做一些更可怕的事情

可能具有破坏性的命令

wipefs -a -t iso9660 /dev/sdb

执行此操作后,什么也没发生。在 Linux 上安装,但在 Windows 上没有安装,所以我继续

可能具有破坏性的命令

wipefs -a -t gpt /dev/sdb

在 Linux 上安装但不能在 Windows 上安装所以我继续

可能具有破坏性的命令

wipefs -a -t dos /dev/sdb

现在它停止在 Linux 上安装并且没有在 Windows 上启动 :-)

现在我使用重新创建了 MBR

可能具有破坏性的命令

cfdisk /dev/sdb

使用 dos 表并创建默认大小的主分区,将其更改为 0b WIN95 OSR2 FAT32。在 Linux 上安装,但在 Windows 上安装不上,所以我继续

当我将分区类型改为 0f WIN95: 扩展分区,LBA 映射时,我最终损坏了磁盘,以至于它无法再在 Linux 中挂载。即使我使用

mount -t vfat /dev/sdb1 /usb

它不起作用。所以我删除了整个 MBR 以及 sdb1 边界

可能是破坏性的命令,我删除了 sdb 和 sdb1 开始之间的偏移量

dd if=/dev/zero of=/dev/sdb bs=1 count=2048

现在我把跑步testdisk当作最后的手段

可能具有破坏性的命令

经过越来越深入的扫描,它终于找到了 vfat 分区。声称有损坏的 FAT32 引导扇区,但有正常的 FAT32 备份引导扇区。此外,它还将分区类型标识为 0c WIN95 OSR2 FAT32,LBA 映射。在恢复类型“如果有效,则从 FAT32 备份引导扇区恢复引导扇区(备份 BS)”后https://www.cgsecurity.org/wiki/Advanced_FAT_Repair我又可以在 Linux 下安装。然后我把它放到 Windows 机器上,它就可以正常工作了。我仍然不知道为什么。如果你觉得自己很幸运,你可以自行承担风险调查原因是什么,以及这是 Windows 还是 Linux 中的错误。我仍然不知道。我没有提到那个步骤,但cfdisk在我破坏 sdb1 引导记录之前简单地将分区类型更改为 Win95 LBA 并没有恢复 Windows 功能。如果它仍然不工作并且有可用的备份 FAT 扇区,那么尝试dd if=/dev/zero of=/dev/sdb1 bs=1 count=512 conv=notrunc在运行 testdisk 之前使用类似的东西破坏 sdb1 的启动。

相关内容