如何在 bash 脚本中使用 sgdisk 分区确定大小

如何在 bash 脚本中使用 sgdisk 分区确定大小

我在类似于以下的 bash 脚本中使用 sgdisk:

sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub"  -g /dev/vda
sgdisk --new 2:2048:16779263 --typecode 2:8300 -g /dev/vda
sgdisk --new 3:16779264:20971486 --typecode 3:8200 -g /dev/vda

只有当设备预先众所周知并且扇区被硬编码时,这种方法才有效。

我想删除扇区值的硬编码。相反,我希望脚本在脚本运行之前未知磁盘大小的情况下运行。创建分区 1 后,我将预留已知的固定金额给分区 3 用于交换,其余的给分区 2。

最简单的方法是将交换分区设置为 #2。我知道该怎么做。不过,我想看看是否可以执行此操作,同时保留分区 3 上的交换空间。这意味着 sgdisk 必须计算分区 2 的大小或结束扇区值,同时考虑下一步为分区 3 分配的大小。

通读 sgdisk 手册页并没有给我提供有关如何执行此操作(或者即使可以完成)的线索。

答案1

以下将起作用:

sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub"  -g /dev/vda
sgdisk --new 2:0:-2G --typecode 2:8300 -g /dev/vda
sgdisk --new 3:0:0 --typecode 3:8200 -g /dev/vda

这比我想象的要简单得多。sgdisk进行所有计算。关键是减号,这在手册页中进行了解释(我之前错过了)。

您可以通过在数字前面添加“+”或“-”符号来指定相对于指定默认范围的开始或结束的位置,如 +2G 中指定默认起始扇区后 2GiB 的点,或 -200M 指定最后一个可用扇区之前 200MiB 的点。起始值或结束值 0 指定默认值,

相关内容