我有一个新的 4 TB Western Digital SN850X NVMe SSD 驱动器,我正在尝试将其分区作为 Ubuntu 20.04 的启动驱动器。无论我做什么,fdisk 都会报告分区未对齐,即使它们看起来与逻辑(512 字节)和物理(8388608 字节)扇区大小对齐:
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 3.65 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model:
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 8388608 bytes
I/O size (minimum/optimal): 8388608 bytes / 8388608 bytes
Alignment offset: 6832128 bytes
Disklabel type: gpt
Device Start End Sectors Size Type
/dev/sda1 16384 671743 655360 320M EFI System
/dev/sda2 671744 7814035455 7813363712 3.7T Linux filesystem
Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
请注意,分区 1 从扇区 16384 开始,正好是磁盘中的 8 MiB (16384 * 512),这与物理扇区大小匹配,但 fdisk 声称它因 6832128 字节的奇怪值而未对齐。
分开的align-check
报告相同:
(parted) align-check
alignment type(min/opt) [optimal]/minimal? minimal
Partition number? 1
1 not aligned: 16384s % 16384s != 13344s
(parted) align-check
alignment type(min/opt) [optimal]/minimal? minimal
Partition number? 2
2 not aligned: 671744s % 16384s != 13344s
这里parted似乎是说分区错位了13344个扇区,即6832128字节,与fdisk报告的值相同。但显然“16384s % 16384s”是对齐的。
这个 6832128 字节/13344 个扇区的奇怪错位值从何而来?任何建议/想法非常感谢!
答案1
注意文字:
Alignment offset: 6832128 bytes
在fdisk -l
输出中。
这篇 SuSE 支持文章关于分区对齐有以下信息对齐偏移:
有一种特殊情况:当引入内部 4k 块大小时,一些 HDD 制造商实际上通过将逻辑扇区计数移一来解决经典的 DOS 分区表未对齐问题,因此从扇区 63 开始将转换为扇区 64(即内部块 8) 。有些硬盘甚至可以配置一个开关来进行这种移动一位。 SATA 规范甚至为驱动器提供了报告此类偏移的机制,以便操作系统可以采取适当的步骤来优化性能。据我们所知,这样的驱动器并不存在。并且只有其中的一个子集正确报告了偏移量。
如果驱动器报告任何对齐偏移,SLE11-SP1(或更高版本)中的 Linux 内核将通过属性 /sys/block/$DEV/alignment_offset(以扇区为单位)报告此情况。
所以你的磁盘似乎是一个非常特殊的情况:它不仅似乎使用 8 MiB 物理块,而且由于某种原因第一个块也有 6832128 字节的不均匀大小......假设报告的信息是正确的。
由于西部数据 SN850X 是一个 NVMe 驱动器(正如您正确所述),您访问它的事实意味着/dev/sda
PCIe 总线和驱动器之间存在某种转换器设备:直接连接的非企业 NVMe 设备将显示为/dev/nvmeNn1
且其分区为/dev/nvmeNn1pP
(/dev/sd*
其中 N = NVMe 设备编号,P = 分区编号)。
(在 NVMe 设备名称中,n1
是命名空间编号:大多数非企业 NVMe 设备仅支持单个命名空间,但设备命名方案旨在支持多个命名空间。将命名空间视为具有某些企业存储潜力的元分区诸如快照之类的功能。)