使用parted创建对齐的分区

使用parted创建对齐的分区

我正在对非 SSD 硬盘进行分区分手了因为我想要一个GPT分区表。

parted /dev/sda mklabel gpt

现在,我尝试创建正确对齐的分区,因此我使用以下命令来了解第一个扇区的开始位置:

parted /dev/sda unit s p free

Disk /dev/sda: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End         Size        File system  Name      Flags
        34s    488397134s  488397101s  Free Space

我们可以看到它从第 34 扇区开始(这是使用此分区表时的默认扇区)。

因此,要创建我尝试的第一个分区:

parted /dev/sda mkpart primary 63s 127s

将其对齐到扇区 64,因为它是 8 的倍数,但它显示:

警告:生成的分区未正确对齐以实现最佳性能。

我的硬盘中的逻辑扇区和物理扇区大小均为 512 字节:

cat /sys/block/sda/queue/physical_block_size
512

cat /sys/block/sda/queue/logical_block_size 
512

如何创建正确对齐的分区?我究竟做错了什么?

答案1

为了使分区与parted您可以使用--align选项对齐。有效的对齐类型有:

  • 没有任何 - 使用磁盘类型允许的最小对齐方式。
  • 圆柱- 将分区与圆柱体对齐。
  • 最小的- 使用磁盘拓扑信息给出的最小对齐方式。该值和 opt 值将使用磁盘提供的布局信息将逻辑分区表地址与磁盘上的实际物理块对齐。最小值是将分区正确对齐到物理块所需的最小对齐方式,这可以避免性能下降。
  • 最佳的使用磁盘拓扑信息给出的最佳对齐方式。这以保证最佳性能的方式与物理块大小的倍数对齐。

其他有用的提示是您可以使用百分比设置大小以使其对齐。从 0% 开始,到 100% 结束。例如:

parted -a optimal /dev/sda mkpart primary 0% 4096MB

答案2

@lik 接受的答案显示如何指定首选对齐方式。但是,parted 始终使用该对齐方式来检查生成的分区,但并不总是使用该对齐方式创建分区。

TL;DR:当 1MiB 是最佳对齐方式时,指定 0% 将适用于 200MiB 及更大的磁盘。对于较小的磁盘或较大的对齐方式,指定 0G 可能有效,而 0% 则无效。请参阅下文了解原因。

Parted 在创建分区时确实会尝试满足对齐约束,但它也不会偏离您请求的值太多。什么算作“太多”取决于您如何指定位置。

当您为 mkpart 命令指定开始(或结束)位置时,它会在内部生成一系列可接受的值。该范围以您指定的值为中心,并在两侧均匀延伸您使用的单位大小的一半(这就是我的意思)从代码中读取, 这评论说两端各一个完整的单位尺寸)。

例如,当您指定“10M”时,它将尝试使用9.5M和10.5M之间的任何位置。百分比也是如此,因此如果您指定 0%,它将使用 0% 到 0.5% 之间的任何值(显然,它不会变为负数)。

一个例外是,当使用两个单位的幂(例如 KiB 表示 1024,而不是 K 表示 1000)时,parted 假定您正在尝试指定精确位置,并且仅考虑您指定的精确值。

由于最佳对齐通常看起来是 1MiB 对齐,因此 K 和 M 单元通常没有足够的空间来达到最佳对齐。在 G 中指定位置应该有足够的空间,但 % 通常也可以。

所以,这就是为什么 0% 通常有效,尽管即使这样也有限制。

答案3

我的解决方案是使用g磁盘默认情况下,它可以在 2048 个扇区 (1024KiB) 上自动执行分区对齐,但可以在专家菜单中更改。

答案4

一个小修正。据我了解,GPT 磁盘不再有分区类型,它们都是“主”磁盘。命令“mkpartprimary”不会像在 msdos 磁盘上那样创建主分区,它只是创建一个名为主分区。您也可以使用命令

(parted) mkpart Parted-FUN! 21476MB 4000787MB
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End        Size       File system  Name         Flags
 1      1.05MB   17181MB    17180MB    ext4         raid-var
 2      17181MB  21476MB    4295MB                  raid-swap
 3      21476MB  4000786MB  3979310MB               Parted-FUN!

如果您尝试创建逻辑分区,这可能会引起混乱,我知道它对我来说是这样的。

(parted) mkpart extended 21476MB 4000787MB
(parted) mkpart logical 21476MB 1000787MB
Warning: You requested a partition from 21476MB to 1000787MB.
The closest location we can manage is 4000786MB to 4000786MB.
Is this still acceptable to you?
Yes/No? Yes
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start      End        Size       File system  Name       Flags
 1      1.05MB     17181MB    17180MB    ext4         raid-var
 2      17181MB    21476MB    4295MB                  raid-swap
 3      21476MB    4000786MB  3979310MB               extended
 4      4000786MB  4000786MB  0.00MB                  logical

您无法在名为“扩展”的分区内创建名为“逻辑”的分区。

相关内容