我有两个格式化为 FAT32 的 USB 外置硬盘。它们在 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: ""
重新格式化磁盘(使用
mkfs.fat
)似乎已经解决了这个问题。这对我有用。它涉及可能会损坏磁盘和文件系统的破坏性步骤。如果您遵循此程序,我将放弃所有责任。
我的磁盘是 32GB USB,使用 分区
fdisk /dev/sdb
,创建了一个逻辑分区,该分区跨越所有类型为 0b WIN95 OSR2 FAT32 的磁盘,使用 mkfs.vfat 格式化。它可以在 Linux 下工作,但不能在 Windows 或 Mac 下工作。我设法修复它,但我不知道是什么原因,因为我没有正确备份。
在进行实验之前,我先在 Linux 中完成了磁盘的备份。
我将执行以下操作,以便我可以恢复 MBR 或告诉您文件系统出了什么问题:
可能的恢复是
可能具有破坏性的命令确保 /dev/sdb 是您要覆盖的磁盘
首先有人指出它可能是多个标签,所以我
它显示了三个项目dos,gpt和iso9660。当我将 linux 映像复制到磁盘上时,那个 iso9660 有剩余。所以我开始做一些更可怕的事情
可能具有破坏性的命令
这样做之后,什么也没有发生。在 Linux 上挂载但不在 Windows 上,所以我继续
可能具有破坏性的命令
在 Linux 上挂载但不在 Windows 上,所以我继续
可能具有破坏性的命令
现在它停止在 Linux 上挂载并且没有在 Windows 上启动:-)
现在我使用重新创建了 MBR
可能具有破坏性的命令
使用dos表并创建默认大小的主分区,将其更改为0b WIN95 OSR2 FAT32。在 Linux 上挂载但不在 Windows 上,所以我继续
当我将分区类型更改为 0f WIN95: Extended partition, LBA-mapped 我最终损坏了磁盘,使其无法再安装在 Linux 中。即使我安装 /dev/sdb1 使用
它不起作用。所以我删除了整个 MBR 直到 sdb1 边界
可能具有破坏性的命令,我删除了 sdb 和 sdb1 开始之间的偏移量
现在我
testdisk
作为最后的手段跑步可能具有破坏性的命令
经过越来越深的扫描,终于找到了vfat分区。声称存在损坏的 FAT32 引导扇区,但存在正常的 FAT32 备份引导扇区。此外,它将分区类型识别为 0c WIN95 OSR2 FAT32,LBA 映射。从https://www.cgsecurity.org/wiki/Advanced_FAT_Repair恢复类型“从 FAT32 备份引导扇区恢复引导扇区(如果有效(备份 BS)”)后,我再次能够在 Linux 下挂载。然后我把它放到 Windows 机器上,它正在工作。我仍然不知道为什么。如果您觉得幸运,您可以自担风险调查原因是什么,如果这是 Windows 或 Linux 中的错误。我还是不知道。我没有提到那一步,只是简单地改变了分区类型
cfdisk
到 Win95 LBA 之前我破坏了 sdb1 引导记录并没有恢复 Windows 功能。如果它仍然不适合你并且有工作的备份 FAT 扇区,那么尝试使用类似dd if=/dev/zero of=/dev/sdb1 bs=1 count=512 conv=notrunc
在运行 testdisk 之前的东西来破坏 sdb1 的开始。