Linux(exfat-fuse)无法读取 GPT 4TB 外部 exFAT 磁盘

Linux(exfat-fuse)无法读取 GPT 4TB 外部 exFAT 磁盘

我有一个 4TB 外置 WD RED。它在 Windows 10 机器上格式化为 exFAT 磁盘。我可以轻松读取原始 Windows 10 机器和 2017 年 MacBook Pro(High Sierra)上的文件。

在我使用的 Linux 机器上(Ubuntu 16.10 x64 + Slackware 14.2),系统从未检测到磁盘可读或可挂载。令人困惑的是,如果我在 Linux 机器上擦除磁盘并将其格式化为 exFAT,那么 Windows 10 机器和 MacBook 都无法读取它,尽管这两个 Linux 设备都可以读取。这让我怀疑 exfat-fuse 实现不完整……尽管我承认我了解的还不够多,无法确定。

[附注:我还从 MacBook Pro 中删除了文件并将其格式化为 exFAT,Windows 10 计算机仍然可以读取/写入。Linux 计算机则不行。]

以下是我迄今为止调查的内容:

sudo lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sdj      8:144  0   3.7T  0 disk 
├─sdj1   8:145  0   6.4G  0 part 
└─sdj2   8:146  0   7.3G  0 part 

请注意 lsblk 检测到的垃圾文件系统大小。该卷仅使用 1 个 exFAT 分区进行格式化,跨越全部 4TB。

parted -l /dev/sdj

Error: /dev/sdj: unrecognised disk label
Model: WDC WD40 EZRZ-00GXCB0 (scsi)                                       
Disk /dev/sdj: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags: 

parted 至少很诚实地说它不知道我们在处理什么。它确实检测到了正确的型号,它是 WD red 4tb。

fdisk -l /dev/sdj

Disk /dev/sdj: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
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: 0x3258a7ab

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdj1           1     76805     76805  37.5M ee GPT
/dev/sdj2       77056 976754431 976677376 465.7G  7 HPFS/NTFS/exFAT

fdisk 的输出很有趣,因为它几乎是正确的。它将一个分区映射为 GPT 元数据。另一个分区正确地找到了 id (0x07 ==微软数据),但大小不对。分区是 4TB,而不是 465.7GB。

我通过从 Windows 写入 4TB 的测试内容,验证了该分区确实跨越 4TB,并成功地从 MacBook Pro 读取了所有内容。

尝试安装任何检测到的设备均不起作用:

sudo mount.exfat-fuse -d /dev/sdj1 /mnt/foobar

FUSE exfat 1.2.4
ERROR: exFAT file system is not found.

sudo mount.exfat-fuse -d /dev/sdj2 /mnt/foobar

FUSE exfat 1.2.4
ERROR: exFAT file system is not found.

即使在调试模式下,exfat-fuse 也不会打印有用的输出。查看源代码,它在读取超级块之后很早就失败了。

我使用十六进制转储查看了设备上的前 1MB 数据,它看起来很正常,没有明显的垃圾。(Pastebin:https://pastebin.com/BVLWW3kf

我还应该尝试其他调试步骤吗?对这里发生的事情有什么想法吗?

编辑:

使用gdisk,驱动器似乎具有混合 MBR+GPT。但是,gdisk 检测到 GPT 无效:

sudo gdisk /dev/sdj
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: hybrid
  BSD: not present
  APM: not present
  GPT: not present

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************

答案1

问题似乎是磁盘被分区为 4k 原生扇区大小的磁盘。GPT 从 4096 字节开始。由于它是 512e 驱动器,因此它应该从磁盘中的 512 字节开始。我猜想无论出于什么原因,Windows 都会错误地将驱动器检测为 4kn。

相关内容