在 Windows 中格式化的 4TB GPT 驱动器在 Linux 中显示为 2TB

在 Windows 中格式化的 4TB GPT 驱动器在 Linux 中显示为 2TB

我有一个 4 TB 的硬盘连接到 Dell H200 控制器。该硬盘在 Windows 中使用 GPT 格式化,并在 Windows 中正确显示 4TB。

同一台计算机中启动 Linux(Ubuntu 16.04)的同一驱动器无法完全识别为具有 4 TB。

运行gdisk /dev/sdb -l结果

GPT fdisk (gdisk) version 1.0.1

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

Found valid GPT with protective MBR; using GPT.

Warning! Secondary partition table overlaps the last partition by
3519068194 blocks!
You will need to delete this partition or resize it in another utility.
磁盘 /dev/sdb:4294967295 个扇区,2.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): F8EA0B25-8D84-4BBB-88EB-BA90615C5318
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4294967261
Partitions will be aligned on 8-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34          262177   128.0 MiB   0C01  Microsoft reserved ...
   2          264192      7814035455   3.6 TiB     0700  Basic data partition

请注意上面粗体的“2.0 TiB”

我也无法挂载任何文件。挂载 /dev/sdb1 会导致“mount: 错误的 fs 类型...”错误,挂载 /dev/sdb2 会导致

mount: special device /dev/sdb2 does not exist

起初我以为是 H200 控制器的固件问题,但这无法解释为什么它在 Windows 中可以工作而 Linux 中不行,以及为什么无法安装。如何让 Linux 识别驱动器?我需要使用 Linux 重新格式化驱动器吗?如何确保将来任一操作系统都可以正确看到驱动器?

更新:

好吧,我现在感觉有点傻了。原来,这一直是 H200 控制器固件的问题。

我首先尝试更新 H200 控制器固件,gdisk现在正确返回:

Disk /dev/sdb: 7814037168 sectors, 3.6 TiB

并且 /dev/sdb2 挂载没有问题。我现在想了解的是为什么磁盘在 Windows (7) 中读取正常,而在具有过时 H200 固件的 Linux 中却读取不正常。

答案1

我觉得情况很清楚,但不太清楚为什么会发生这种情况。您的输出显示:

Warning! Secondary partition table overlaps the last partition by 3519068194 blocks!

GPT 有两个分区表,一个主分区表位于磁盘的开头,另一个(或备份)分区表位于磁盘的最后 33 个扇区(16K),请参阅非常有用的 Arch Linux wiki关于这一点。

人们在手动对磁盘进行分区时经常不为备份 PT 留出空间,这导致磁盘实用程序抱怨缺少辅助分区表,并警告将最后一个分区的大小缩小 33 个扇区。

您遇到的情况完全相同,只是您的备份 PT 提前到达了 3.5x10^9 个扇区(约 1.8TB)。换句话说,该gdisk实用程序看到放错位置的备份 PT 并认为这是磁盘的末尾。因此磁盘大小较小(2TiB 而不是 4TB),并且无法安装远远超出磁盘(假定)边缘的分区。

这是怎么发生的?我只能猜测,但备份 PT 出现在恰恰2TiB,理论上限(见这篇维基百科文章最右边的框gdisk) 适用于 FAT32 文件系统(具有 512B 扇区)。输出中的文件系统代码0x0700信息量不大:根据罗德·史密斯的书

Windows 对其所有数据分区(无论是 FAT 还是 NTFS)使用单个 GUID 代码

本质上是代码 0x0700。因此,我不知道它是 FAT32 还是 NTFS,但如果它是 FAT32,我们就可以理解你所处的困境。更麻烦的是存在一个sdb2大于可用磁盘的分区 ( ),

... last usable sector is 4294967261

而的结束扇区sdb2是7814035455,并且错误消息

 mount: special device /dev/sdb2 does not exist

最有可能的是,我们看到了多次分区尝试的结果,其中存在一些错误/缺陷/什么的。

此外,gdisk坚持你的选择:

    You will need to delete this partition or resize it in another utility.

任何一种选择都意味着数据丢失。我不知道你的磁盘上有什么,是全新的还是充满了长期珍藏的个人数据,所以我不知道该建议什么。当然,备份所有内容(从 Windows),然后重新格式化磁盘(在 Linux 中),并在实际存储任何内容之前在 Windows 上试用磁盘听起来是一个合理的做法。此外,我建议你选择一个像 NTFS 这样的文件系统,它对磁盘大小没有限制(或者至少,没有与 4TiB 磁盘相关的限制),再次请参阅此维基百科文章最右侧的方框

相关内容