我有一个 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 磁盘相关的限制),再次请参阅此维基百科文章最右侧的方框。