我正在尝试sgdisk
创建以 1 MB 对齐的分区。
-a
如果我选择大小,这对于起始扇区(使用 )和结束扇区来说很容易。
但如果我sgdisk
选择结束部分,我最终会得到类似的结果:
Device Start End Sectors Size Type
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part2 2048 1046527 1044480 510M EFI System
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part3 1048576 5242879 4194304 2G Solaris /usr & Apple Z
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part4 5242880 467660800 462417921 220.5G Linux filesystem
462417921 的大小显然与 1 MB 块不对齐。
我本来期望的是这样的:
/dev/disk/by-id/scsi-36848f690d917dc002587bfae06302a5a-part4 5242880 466616319 461373440 220G Linux filesystem
它似乎-a
只适用于起始部门。
如何使其也与磁盘分区的其余部分对齐结束扇区?
分区表由以下内容组成:
sgdisk --zap-all $DISK
sgdisk -n2:1M:+510M -t2:EF00 $DISK
sgdisk -a 1048576 -n3:0:+2G -t3:BF01 $DISK
# Use the rest of the disk for the final partition
# and it is here the end sector is not aligned
sgdisk -a 1048576 -n4:0:-0 -t4:BF01 $DISK
答案1
这是一个非常不寻常的要求,并不真正符合预期的用例sgdisk 对齐选项:
-a, --set-alignment=value
设置扇区对齐倍数。 GPT fdisk 将分区的开头与该值倍数的扇区对齐,在新格式化的磁盘上默认为 2048。为了获得 Western Digital 高级格式和物理扇区大小大于逻辑扇区大小的类似驱动器、某些类型的 RAID 阵列以及 SSD 设备的最佳性能,此对齐值是必要的。
分区的结束扇区不会像起始扇区那样对性能产生影响。这就是为什么-a
切换不会影响末端扇区的原因。
也许你最好的选择是使用该-E
选项来找出-nx:x:0
会做什么,然后自己计算对齐:
man 8 sgdisk
-E, --end-of-largest
显示磁盘上最大可用扇区块末尾的扇区号。脚本可以存储该值并将其作为 -n 选项的一部分传回以创建分区。如果没有可用的未分配扇区,则该函数返回值 0。
因此,要在脚本(例如 bash 脚本)中使用它,您可以这样做:
end_position=$(sgdisk -E $DISK)
sgdisk -a 1048576 -n4:0:$(( $end_position - ($end_position + 1) % 2048 )) -t4:BF01 $DISK
此处,脚本创建带有显式设置的结束扇区的分区,该扇区将尽可能靠近磁盘的末尾,但与1048576
字节 (1MiB) 对齐。
答案2
您似乎正在尝试解决一个您不知道或不太理解的问题。对齐分区的要求仅适用于分区开始。
这是我完美对齐的分区表:
Disk /dev/sda: <skipped>
Disk model: <skipped>
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: <skipped>
Device Start End Sectors Size Type
/dev/sda1 2048 206847 204800 100M EFI System
/dev/sda2 206848 468991 262144 128M Linux filesystem
/dev/sda3 468992 67577855 67108864 32G Linux filesystem
...
请注意末端扇区是如何“未对齐”的。