系统盘开始出现故障,因此我在关门前 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
快速浏览一下 的源代码lsblk
,fdisk
它们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