为什么我的 3TB 磁盘使用除智能工具之外的多种工具显示的实际大小约为 800 GB?

为什么我的 3TB 磁盘使用除智能工具之外的多种工具显示的实际大小约为 800 GB?

系统盘开始出现故障,因此我在关门前 10 分钟跑去买了一个新硬盘:/ 这是 32 位系统盘。早些时候,相对较早的时候,我就曾查看过 Seagate Barracuda 2TB,但在销售人员的说服下购买了 3TB WD Red NAS 硬盘作为备用硬盘。很多的客户在过去几个月中退回了有错误的希捷磁盘。希捷有多种颜色。由于成本和我的潜意识,从 2TB 变成了 3TB那个联赛– 并强迫自己进入 GPT。 NAS 磁盘应该可以作为操作系统磁盘,例如,对于这个 24/7 运行的机器,有大量活动如编码等(如低 I/O),没有游戏,一些媒体处理如转换摄像机线、渲染(尽管这主要是由集群完成的)。

我的主要问题是关于使用各种工具的磁盘大小。

(f)磁盘:

#fdisk -l
#disk -l

Disk /dev/sdc: 801.6 GB, 801569726464 bytes
255 heads, 63 sectors/track, 97451 cylinders, total 1565565872 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

lsblk:

#lsblk
sdc      8:32   0 746.5G  0 disk

长沙:

#lshw -class disk
*-disk
     description: SCSI Disk
     physical id: 0.0.0
     bus info: scsi@2:0.0.0
     logical name: /dev/sdc
     size: 746GiB (801GB)
     configuration: sectorsize=512
  • 为什么它们都产生 764 GiB?会不会有什么问题?

  • 因为这需要 GPT;有什么我应该注意/格外小心的事情吗?例如,32 位有任何问题吗?

聪明的:

都做了,smartctl -t <conveyance|short>结果都OK。

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%         0         -
# 2  Conveyance offline  Completed without error       00%         0         -

SMART 也能产生正确的尺寸(显然):

# smartctl --info /dev/sdc
smartctl 5.43 2012-06-30 r3573 [i686-linux-3.5.0-51-generic] (local build)

=== START OF INFORMATION SECTION ===
Device Model:     WDC WD30EFRX-68EUZN0
Serial Number:    WD-XXXXXXXXXXXX
LU WWN Device Id: X XXXXXX XXXXXXXXX
Firmware Version: 82.00A82
User Capacity:    3,000,592,982,016 bytes [3.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ACS-2 (revision not indicated)
Local Time is:    Sat Jan 10 18:40:58 2015 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

相关性不大,但使用 1 小时进行各种测试等,产量:

Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   100   253   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   100   253   021    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       1
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   100   253   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       1
 10 Spin_Retry_Count        0x0032   100   253   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   253   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       1
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       0
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       6
194 Temperature_Celsius     0x0022   131   125   000    Old_age   Always       -       19
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   253   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0

子问题:

如果以上都可以,那么在磁盘上安装操作系统之前还有其他明智的做法吗?

答案1

如果您使用的是基于 Debian-Ubuntu 的系统(例如 Linux Mint),则fdisk (util-linux 2.20.1)无法理解 GPT。

您应该尝试parted -l对驱动器进行分区/格式化吗?使用gparted(如果您使用的是 GUI)可能会更容易。

我不确定lsblk,它说它从 读取sysfs。驱动器上可能只有一个小分区,或者是一个奇怪的 MBR/GPT。

但是 Cristian Ciupitu 的评论和来自 Seagate 的链接听起来非常有希望,但它似乎是关于 Windows 驱动程序......

正在寻找“分开错误:/dev/sdc:无法识别的磁盘标签”打开这个链接似乎可以实现您想要的功能:如何使用 Parted GPT 在 Linux 上创建大于 2TB 大小的分区。我已加粗(夸张的?)相关错误消息看起来应该在创建 GPT 后消失。 (我敢打赌使用gparted会类似/更容易。)

使用parted的mklabel命令将磁盘标签设置为GPT,如下所示。

# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print

Error: /dev/sdb: unrecognised disk label

(parted) mklabel gpt

(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

[然后它继续创建分区,但上面的命令看起来最相关]

使用 Parted mkpart 创建 >2TB 分区

使用parted的mkpart命令如下所示创建大于2TB的分区。在此示例中,我们创建一个大小约为 6TB 的分区。

# parted /dev/sdb

(parted) mkpart primary 0GB 5909GB

(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  5909GB  5909GB               primary

如果尝试创建 GPT 失败,应该有一些好的错误消息可供搜索。或者,如果它仍然只报告大小为 800GB,我会开始怀疑磁盘可能有问题,但由于 SMART 认为没问题,所以就剩下 Linux 驱动程序/内核了……

而你不是您使用某种外部 USB 外壳吗?它直接连接到计算机,就像内置硬盘一样?

答案2

你似乎已经构建了自己的内核,而且它只是 32 位。要使其能够访问 > 2 TB 磁盘,您必须启用配置_LBDAF(支持大型 (2TB+) 块设备和文件),但我可以发誓,如果没有它,大小只会被限制为 2 TB,而不是环绕到 32 位模数。

答案3

发布一个“回答”,这更多的是一种观察,因为有了这些信息,问题会变得有些混乱和冗长。

又做了一些测试。一种使用ioctl()和的简单 C 代码lseek()

ioctl BLKGETSIZE64  : 801569726464 (Same value as the tools)
ioctl BLKGETSIZE    :   1565565872 (Same as sectors reported by fdisk)
lseek Size          : 801569726464

快速浏览一下 的源代码lsblkfdisk它们lshw都使用ioctl()sysfs 来获取大小数据。 (拿“他们使用”这里很简单,因为我只浏览了一些在线资源。)

lsblk使用扇区 ( /sys/block/sdc/size) 并左移 9。(又称为 × 512 或 × 2^9)

Sectors: 1565565872                      (From printout in Q)
         1565565872 << 9 = 801569726464

仔细观察报告的大小并将我的大脑切换到二进制而不是十进制也很快认识到:

3000592982016 = 00101011101010100001010001110110000000000000 (44-bits (48))
 801569726464 =     1011101010100001010001110110000000000000 (40-bits)

此外:

Size by SMART - Size by tools (in effect kernel)
3000592982016 - 801569726464 = 2199023255552 == 2^32 * 512 or 2^32 << 9

fdisk还报告物理扇区大小为 512,与 SMART 的 4096 相反,这可能表明存在一些控制器问题。

答案4

对我来说,问题是我将它(相同的驱动器型号)与外部 USB 外壳一起使用。当我将其直接插入 SATA 连接器时,它开始被识别为 3TB。如果您遇到同样的问题并且使用 USB 接口连接驱动器,请尝试将驱动器直接连接到 SATA 连接。

正如 @phuclv 指出的,超级用户对此有一个很好的解释:https://superuser.com/questions/1101839/why-would-a-3tb-disk-show-as-being-746gib

相关内容