我有一个 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。