我有两个 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 的启动。