我正在使用parted对非 SSD 硬盘进行分区,因为我想要一个 GPT 分区表。
parted /dev/sda mklabel gpt
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试创建正确对齐的分区,因此我使用以下命令来了解第一个扇区的开始位置:
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
Run Code Online (Sandbox Code Playgroud)
我们可以看到它从扇区 34 开始(这是使用此分区表时的默认值)。
因此,要创建我尝试的第一个分区:
parted /dev/sda mkpart primary 63s 127s
Run Code Online (Sandbox Code Playgroud)
将它对齐到第 64 扇区,因为它是 8 的倍数,但它显示:
警告:生成的分区没有正确对齐以获得最佳性能。
我硬盘中的逻辑和物理扇区大小均为 512 字节:
cat /sys/block/sda/queue/physical_block_size
512
cat /sys/block/sda/queue/logical_block_size
512
Run Code Online (Sandbox Code Playgroud)
如何创建正确对齐的分区?我究竟做错了什么?
lik*_*lik 90
为了对齐分区,parted您可以使用--align选项。有效的对齐类型是:
另一个有用的提示是,您可以使用百分比设置大小以使其对齐。从 0% 开始到 100% 结束。例如:
parted -a optimal /dev/sda mkpart primary 0% 4096MB
Mat*_*man 12
在通过@lik接受的答案显示了如何指定首选对齐。但是,parted 总是使用该对齐来检查生成的分区,但并不总是使用该对齐创建分区。
TL;DR:当 1MiB 是最佳对齐时,指定 0% 将适用于 200MiB 和更大的磁盘。对于较小的磁盘或较大的对齐,指定 0G 可以在 0% 不起作用的情况下工作。原因见下文。
Parted 在创建分区时确实会尝试满足对齐约束,但它也不会偏离您请求的值太多。什么算作“太多”取决于您如何指定位置。
当您为 mkpart 命令指定开始(或结束)位置时,它会在内部生成一系列可接受的值。这个范围以您指定的值为中心,并在两侧均等地扩展为您使用的单位大小的一半(这是我从代码中读取的内容,注释说两端都是一个完整的单位大小)。
例如,当您指定“10M”时,它会尝试使用 9.5M 和 10.5M 之间的任何位置。百分比也是如此,因此如果您指定 0%,它将使用 0% 到 0.5% 之间的任何值(显然它不会变成负数)。
一个例外是,当使用两个单位的幂(例如 1024 的 KiB,而不是 1000 的 K)时,parted 假定您正在尝试指定一个确切的位置,并且只考虑您指定的确切值。
由于最佳对齐通常似乎是 1MiB 对齐,因此 K 和 M 单元通常没有足够的空间来达到最佳对齐。在 G 中指定位置应该有足够的空间,但 % 通常也可以。
所以,这就是为什么 0% 通常有效的原因,尽管即使这样也有限制。
小智 11
来自Arch 维基:
创建分区时,parted 可能会警告不正确的分区对齐,但不会提示正确对齐。例如:
(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?
Run Code Online (Sandbox Code Playgroud)
警告表示分区start未对齐。
Ignore无论如何输入继续,打印扇区中的分区表以查看它的开始位置,并删除/重新创建分区,并将起始扇区四舍五入到增加的 2 次幂,直到警告停止。例如,在具有 512B 扇区的闪存驱动器上,Parted 希望分区从 2048 的倍数的扇区开始,即 1MB 对齐。
此外,在这一部分的正上方,他们声明更精确的 IEC 二进制单位 KiB、MiB、GiB 等,以及不太精确的 KB、MB、GB 等单位都可以接受。
就个人而言,我解决这个问题的确切命令是:
mkpart hd ext4 1024KiB 8470MB
Run Code Online (Sandbox Code Playgroud)
它没有抱怨,我猜它想要 1MB 对齐。
小智 9
一个小的更正。据我了解,GPT 磁盘不再有分区类型,它们都是“主要”磁盘。命令“mkpart primary”不会像在 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!
Run Code Online (Sandbox Code Playgroud)
如果您尝试创建逻辑分区,这可能会引起混淆,我知道这对我有用。
(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
Run Code Online (Sandbox Code Playgroud)
您不能在名为“扩展”的分区内创建名为“逻辑”的分区。
这有效,对我来说是最简单的解决方案:
parted /dev/sda
(parted) mklabel gpt
(parted) unit s
(parted) mkpart primary ext4 0% 100%
Run Code Online (Sandbox Code Playgroud)
我从hqcodeshop.fi的“尝试 4”中发现了这一点
| 归档时间: |
|
| 查看次数: |
184761 次 |
| 最近记录: |