在 Linux 中,无法确定 931.5 GiB 外部高级格式硬盘上的多个分区的最佳对齐方式

在 Linux 中,无法确定 931.5 GiB 外部高级格式硬盘上的多个分区的最佳对齐方式

概括

我有一台戴尔 Inspiron 17-5767 笔记本电脑,配有 1TB 内置磁盘,我允许最初发货的 Windows 10 继续拥有并独占主导地位(这是我的游戏操作系统)。此外,我还有两个外部驱动器,我可以从中启动当前和未来的 Linux 操作系统。我当前的设置如下:

  1. USB 3.0 端口 #0:Seagate Expansion+ 931.5 GiB (1000204885504 字节) 外部硬盘被识别为 /dev/sdb
    • 目前有一个全尺寸的空 ext4 分区,但一直在努力用 12 个分区的最佳对齐分区方案来替换它(困难的重点在于对齐)
  2. USB 3.0 端口 #1:238.5 GiB (256060514304 字节) Samsung SSD 840 Pro 被识别为 /dev/sdc
    • 使用 Fedora LiveCD 的安装程序(带有“自定义”选项)进行分区,并将我的 Fedora LXDE 和 Lubuntu Linux 发行版都安置在单个 LVM 中,其中包含共享交换空间、共享用户空间、单独的根目录和单独的外部启动分区(这里的外部,我的意思是不在 LVM 中,而是在同一磁盘上其他地方的自己单独的主分区中)
    • 根据 parted 的“align-check opt x”实用程序,此驱动器的物理和逻辑块大小均为 512,并且已最佳对齐,并且 fdisk 对对齐也很满意(任何实用程序均未对对齐提出投诉)
  3. UEFI BIOS 尝试先从 USB 启动,然后再从内部启动,因此 grub 弹出所有可用选项

目标

我正在尝试复制我在 /dev/sdb 驱动器上对 /dev/sdc 所做的操作,但使用的是 5 个 Linux 发行版。我已经介绍了项目的这一方面,因为我是一个经验丰富的多引导程序。但我的目标的另一部分是让我在 /dev/sdb 上的分区像 /dev/sdc 一样最佳地排列,而这正是我遇到麻烦的地方。

环境

我目前正在相对较新且升级的 Fedora LXDE 安装中进行工作,并且我所获得的结果在我相对较新且升级的 Lubuntu 安装中也是完全可重复的。

报告的磁盘参数

[root@frank ~]# cat /sys/class/block/sdb/queue/physical_block_size 
4096
[root@frank ~]# cat /sys/class/block/sdb/queue/logical_block_size 
512
[root@frank ~]# cat /sys/class/block/sdb/queue/minimum_io_size 
4096
[root@frank ~]# cat /sys/class/block/sdb/queue/optimal_io_size 
33553920
[root@frank ~]# cat /sys/class/block/sdb/alignment_offset 
0
[root@frank ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 931.5 GiB, 1000204885504 bytes, 1953525167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 9428D9DB-746C-40CA-B189-060F92A10E3C

Device     Start        End    Sectors   Size Type
/dev/sdb1  65535 1953467279 1953401745 931.5G Linux filesystem

Partition 1 does not start on physical sector boundary.
[root@frank ~]#

问题

因此,根据物理块大小的报告,该磁盘似乎是 4k(高级格式),而不是像其他驱动器那样是 512b,尽管出于向后兼容的目的,它使用的逻辑扇区大小为 512b。我可以说 GNU parted 实用程序假设块大小为 512,因为当它计算最佳 IO 间隔时

(optimal_io_size + alignment_offset) / physical_block_size = optimal_sector_interval

它得到的值是 65535,这是它自动启动第一个分区的位置,并且 align-check 子实用程序将分区对齐作为最佳方式传递的唯一方法是,它从 65535 的倍数启动。parted 的结果唯一有意义的方式是,如果您认为它将 physical_io_size 视为 512 而不是 4096

(33553920 + 0) / 512 = 65535.

然而,parted 不能使用 4096 块大小,这是可以理解的,因为这样的话,公式就会变成

(33553920 + 0) / 4096 = 8191.875.

这个答案可以让高中代数老师满意,但显然对于扇区间隔来说毫无意义,因为人们期望该间隔是一个离散值(即整数!)。无论如何,因为我想创建 12 个分区,其中一些分区的大小只有 256MiB,所以在 GNU Parted 中使用百分比无法做到这一点,长话短说,我只能满足对齐检查以获得最佳对齐,坚持使用“单位”并自己进行模块化运算以确保我的分区以 65535s 间隔开始,这是 parted 希望我这样做的方式。根据我的研究,我认为确保我的分区也以这些间隔结束并不那么重要,因此我的大多数分区之间都留有间隙(显然不大于 65535)。

再次,parted 认为我的结果是最佳对齐的,将物理块大小视为 512 而不是 4096。但是在退出 parted 并运行“fdisk -l /dev/sdb”后,我在输出中包含以下内容:

Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
Partition 3 does not start on physical sector boundary.
Partition 4 does not start on physical sector boundary.
Partition 5 does not start on physical sector boundary.
Partition 6 does not start on physical sector boundary.
Partition 7 does not start on physical sector boundary.
Partition 8 does not start on physical sector boundary.
Partition 9 does not start on physical sector boundary.
Partition 10 does not start on physical sector boundary.
Partition 11 does not start on physical sector boundary.
Partition 12 does not start on physical sector boundary.

因此,parted 喜欢的,fdisk 不喜欢。因此,我尝试使用 gParted 重新制定我的分区方案,让它使用 1 MiB 作为单位大小,它从 2048s 开始第一个分区,就像您在我的其他磁盘 (/dev/sdc) 上看到的那样。然后 fdisk 很开心,不再抱怨扇区对齐,但随后 GNU parted 未通过最佳模式的对齐检查测试,尽管它会通过最小模式。

然而,我发现在两种情况下,mkswap(我使用它在放置在 /dev/sdb11 上的 LVM 中创建交换卷)都给出了以下警告:

[root@frank ~]# mkswap /dev/strange_quark_experimental/swap
mkswap: warning: /dev/strange_quark_experimental/swap is misaligned

因此,无论 parted 认为磁盘是最佳对齐还是最小对齐,mkswap 都会发现我的交换卷未对齐,并且无论 fdisk 对对齐是否满意,mkswap 也会发现我的交换卷未对齐。

理论

所有这些给我的印象是,我可能不得不忽略至少一个磁盘报告或分区实用程序的警告,但我不确定是哪一个。所有报告一开始也可能是不可靠的,因为包含 HDD 的 USB 兼容外壳可能会错误报告至少一个扇区参数。例如,也许它实际上不是 AF 驱动器?或者它的最佳 IO 大小被错误报告了。或者两者兼而有之?而且,相信我,我也考虑过这是一个 PEBKAC 案例的可能性,因为我可能只是误解了如何在 4k 驱动器上对齐分区。我不确定。

无论发生什么,一旦我相信我的分区是最佳对齐的,并且 mkswap,或者至少是我应该最信任的实用程序,不再抱怨对齐,我就会很高兴地继续我的实际 Linux 安装。

帮助

请帮我理解为什么我似乎无法让 parted 和其他磁盘实用程序就最低对齐(仅在使用 gParted 或 gdisk 进行分区时实现)以外的任何内容达成一致,并请告诉我是否真的应该过分担心最佳对齐相对于最低对齐的优势,因为如果性能或磁盘健康状况的差异太小,我就不会再浪费时间了。否则,我希望能够充分利用我的磁盘的高级格式优势。

答案1

如果你仍然对奇怪的数字 65535s 感到困惑。我最近也被这个问题搞糊涂了。我搜索了答案,发现了这个:http://gparted-forum.surf4.info/viewtopic.php?id=17839

简而言之,当 HD 通过 USB-SATA 适配器连接到 PC 时,optimal_io_size 可能无效。

解决方案就是忽略这个数字并坚持 1MiB 边界建议。

相关内容