使用parted创建分区对齐


66

我划分非SSD硬盘parted的,因为我想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

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


您确定扇区号从零开始吗?
Burton Samograd

1
我也尝试过parted /dev/sda mkpart primary 64s 128s(如果它从1开始),但是它返回相同的警告。
Marc

似乎有一条命令可以检查值是否对齐:gnu.org/software/parted/manual/html_node/align_002dcheck.html。也许使用for循环尝试各种值,然后吐出可以的值?
Burton Samograd

伯顿,我不知道该命令,但是直到拥有一个分区后才能使用它。
Marc

抱歉,我没有足够仔细地阅读说明。
Burton Samograd

Answers:


68

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

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

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

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


5
命令应该不结束0% 100%吗?哪里4096MB来的?
njahnke 2014年

4
值4096MB这里只是举个例子来表明混合%的能力,具体大小号
LIK

3
请注意,'0%'为了使命令正确执行,我必须在外壳中加上引号。
亚当·埃伯林


1
没关系,我只是注意到分手print使用kB作为1000字节...
jiggunjer

9

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


7

Arch Wiki

创建分区时,parted可能会警告分区对齐不正确,但不会提示正确对齐。例如:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

警告表示分区start未对齐。

Ignore仍然要继续输入,在扇区中打印分区表以查看其开始位置,然后删除/重新创建分区,并将起始扇区向上舍入为2的幂,直到警告停止。例如,在具有512B扇区的闪存驱动器上,Parted希望分区以2048的倍数(即1MB对齐)的扇区开始。

此外,在本节的上方,他们指出,可接受的单位为KiB,MiB,GiB等更精确的IEC二进制单位,以及不太精确的KB,MB,GB等。

就我个人而言,解决此问题的确切命令是:

mkpart hd ext4 1024KiB 8470MB

它没有抱怨,我想它想要1MB对齐。


不,我尝试了1048576KiB,没有骰子。
Behrooz

5

较小的更正。据我了解,GPT磁盘不再具有分区类型,它们都是“主要”磁盘。命令'mkpart primary'不会像在msdos磁盘上那样创建主分区,它只是创建一个称为primary的分区。您也可以使用命令

(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

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


谢谢,由于此工具的糟糕cli,我浪费了很多时间,而您却让我弄清楚了发生了什么。
Florian Heigl

5

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

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

Parted确实会在创建分区时尝试满足对齐约束,但也不会与您的请求值有太大差异。什么算作“太多”取决于您指定位置的方式。

当您为mkpart命令指定开始(或结束)位置时,它将在内部生成可接受范围的值。此范围以您指定的值为中心,并且在两侧均等地扩展了所用单位大小的一半(这是我从代码中读取的内容注释说两端均是一个完整的单位大小)。

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

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

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

因此,这就是为什么0%通常有效的原因,即使那有限制。


您能否总结一下您的答案的实用TLDR:与接受的答案相比,究竟应该以不同的方式做些什么呢?
yurkennis

很好的建议,我添加了一个TL; DR。在实践中,我认为0%可以用于除很小的磁盘以外的所有磁盘,但是我的回答为它的工作原理提供了一些背景知识。
Matthijs Kooijman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.