为什么 3TB 磁盘显示为 746GiB

Beo*_*e42 4 linux hard-drive ubuntu

我有一个 3TB 硬盘,Ubuntu 14.04 live DVD 显示它为 746.5GiB。我以前在其他情况下见过其他磁盘的此类问题,但从未找到解决方案。我什至让希捷更换了硬盘,告诉我在磁盘映像工具以某种方式永久地告诉硬盘它是一个较小的磁盘后,他们无法修复硬盘。

两个问题:

  • 这怎么发生的?
  • 我如何解决它?

此案例的硬盘背景

  • 该磁盘曾经是使用裸磁盘而不是分区的 ZFS RAIDZ 的一部分。
  • 它在架子上放了好几个月。
  • 我使用 GParted 尝试删除磁盘上的所有内容

我目前正在运行命令

dd if=/dev/zero of=/dev/sdd bs=16M

在此之前,我跑了:

root@ubuntu:/home/ubuntu# dd if=/dev/zero of=/dev/sdd bs=10M count=128
128+0 条记录
128+0 条记录
已复制 1342177280 字节 (1.3 GB),42.8214 秒,31.3 MB/秒
root@ubuntu:/home/ubuntu# smartctl -i /dev/sdd
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic](本地构建)
版权所有 (C) 2002-13,Bruce Allen,Christian Franke,www.smartmontools.org

=== 信息部分开始 ===
型号系列:Western Digital Caviar Green(AF、SATA 6Gb/s)
设备型号:WDC WD30EZRX-00DC0B0
序列号:{空白}
LU WWN 设备 ID:5 0014ee 0036bc22d
固件版本:80.00A80
用户容量:3,000,592,982,016 字节 [3.00 TB]
扇区大小:512 字节逻辑,4096 字节物理
设备是:在smartctl数据库中[详细使用:-P show]
ATA 版本为:ACS-2(未指明次要修订版)
SATA 版本为:SATA 3.0, 6.0 Gb/s(当前:1.5 Gb/s)
当地时间是:UTC 时间 2016 年 7 月 17 日星期日 07:44:41
SMART 支持是: 可用 - 设备具有 SMART 功能。
SMART 支持是:已启用
root@ubuntu:/home/ubuntu# gdisk -l /dev/sdd
GPT fdisk (gdisk) 版本 0.8.8

分区表扫描:
  MBR:不存在
  BSD:不存在
  APM:不存在
  GPT:不存在

创建新的 GPT 条目。
磁盘 /dev/sdd:1565565872 个扇区,746.5 GiB
逻辑扇区大小:512 字节
磁盘标识符 (GUID):1F876634-0284-4A1C-8FDF-34A255B9DCCC
分区表最多可容纳 128 个条目
第一个可用扇区是 34,最后一个可用扇区是 1565565838
分区将在 2048 个扇区边界上对齐
总可用空间为 1565565805 个扇区 (746.5 GiB)

编号开始(扇区)结束(扇区)大小代码名称
root@ubuntu:/home/ubuntu# 

它通过 USB HDD 底座连接。也许这就是问题的根源。我将重新接线,使其直接插入主板上的 SATA 端口。与此同时,这里是要求的额外信息。

root@ubuntu:/home/ubuntu# sg_readcap --16 /dev/sdd
不支持读取容量 (16)
root@ubuntu:/home/ubuntu# sg_readcap /dev/sdd
读取容量结果:
   最后一个逻辑块地址=1565565871(0x5d50a3af),块数=1565565872
   逻辑块长度=512 字节
因此:
   设备大小:801569726464 字节,764436.5 MiB,801.57 GB
root@ubuntu:/home/ubuntu# hdparm -N /dev/sdd

/开发/ SD:
 最大扇区数 = 5860533168/1(5860533168?),HPA 设置似乎无效(有问题的内核设备驱动程序?)

Tom*_*Yan 10

root@ubuntu:/home/ubuntu# sg_readcap --16 /dev/sdd
READ CAPACITY (16) not supported
Run Code Online (Sandbox Code Playgroud)

这意味着当您的 USB 扩展坞从驱动器的 ATA IDENTIFY DEVICE 数据(见hdparm -I/ smartctl -i)转换容量时,它最多可以报告高达 32 位(即 0xffffffff,4294967295)的逻辑扇区数量。这是 SCSI READ CAPACITY (10) 的继承限制:

Logical Sector Size | Maximum capacity supported (TiB / TB)
         512        |              ~2.0 /  ~2.2
        4096        |             ~16.0 / ~17.6
Run Code Online (Sandbox Code Playgroud)

由于您的驱动器是AF 512e驱动器,共有 5860533168 / 0x15d50a3b0 512 字节逻辑扇区,需要 33 位来表示,因此只有支持 SCSI READ CAPACITY (16) 的 SATA/USB 桥接器才能正确处理。当大小截断为 32 位时,变为:

101011101010100001010001110110000 (5860533168)
Run Code Online (Sandbox Code Playgroud)

 01011101010100001010001110110000 (1565565872)
Run Code Online (Sandbox Code Playgroud)

Linux 内核,或者可能是所有操作系统,基本上永远不会“直接”向 USB 驱动器发出 ATA IDENTIFY DEVICE 命令(即封装在 SCSI ATA PASS-THROUGH 命令中),但 SCSI READ CAPACITY 命令(您手动发出sg_readcap),以得到他们的能力。

只有当驱动器实际上是与 SATA/USB 桥接器连接的 SATA 驱动器时,该命令才会由桥接器中实现的 SCSI-ATA 转换层处理,然后向 SATA 驱动器发出 ATA IDENTIFY DEVICE 命令以获取其信息需要为 READ CAPACITY 命令形成响应数据。

但是像hdparmsmartctl这样的实用程序(几乎)专门用于 ATA 驱动器,因此它们几乎可以通过 ATA PASS-THROUGH 完成所有操作。(另外,因为它们是用户空间实用程序,预计您,用户,只会在适当类型的设备上使用它们。)这就是为什么您最终在不同地方获得不同容量的原因。