我最近尝试使用 Linux Mint 19 系统将 USB 驱动器(Kingston DT Elite G2)上的某些文件从 NTFS 移至 FAT32。我所做的是:
- 建立 FAT32 分区
- 将一些文件从 NTFS 分区复制到 FAT32 分区。
执行此操作后,Windows 和 Linux 仍可读取这两个分区。但是,在缩小 NTFS 分区并增加 FAT32 分区的大小后,Windows 再也无法读取 FAT32 分区。我收到“您需要格式化磁盘”消息。Windows 仍可读取 NTFS 分区。
然后我fsck /dev/sdb2
在 Linux 系统上运行,它删除了脏位(已设置)并修复了一些文件长度不正确的文件。(请注意,fsck.fat
使用的是,而不是fsck.ext
。)
即使运行后fsck
,问题仍然存在。Windows 磁盘管理显示该分区为 RAW(无法识别)。
但是,这个分区甚至可以被一些 Windows 程序读取。DiskInternals 将它作为一个无名 FAT32 分区读取,没有任何错误(即使这个分区有名字)。
我该怎么做才能让 Windows 资源管理器再次读取该分区?
答案1
这可能与https://unix.stackexchange.com/q/410440/168301,其他人也遇到了同样的问题。链接到的评论(应该是答案)https://bugzilla.gnome.org/show_bug.cgi?id=759916#c21:
如果它可以帮助某人,下面是我用来修复 USB 密钥上损坏的 FS 的单行代码,基于上述评论:
$ echo -ne '\xeb\x58\x90' | sudo dd conv=notrunc bs=1 count=3 of=/dev/sdb1
注意瞄准正确的分区(在我的情况下是 /dev/sdb1,在你的情况下可能是其他分区),并首先在文本文件上测试命令行,以确保你的 shell 正确解释十六进制(上述操作在 ZSH 中有效,但在其他 shell 中,你可能必须将反斜杠加倍)。
我在 bash(不是 zsh)中运行了此命令,它修复了我硬盘上一个存在相同问题的分区(以前,Windows 和 testdisk 无法识别该分区上的文件系统)。不过我没有在 fish 上测试。
我仍然认为需要更改 Linux 的 fsck.vfat 以识别和修复此错误,并且 testdisk 理想情况下应该识别这种类型的损坏磁盘并为您恢复它,并且 photorec 在尝试取消格式化这种类型的损坏分区时不应该进入无限循环。