如何复制 sfdisk 中的分区表并编辑最后一个分区以使用所有可用空间?

如何复制 sfdisk 中的分区表并编辑最后一个分区以使用所有可用空间?

我已经看到过很多类似的版本,但没有一个能把所有部分整合在一起。我在 Linux 系统上执行此操作

我知道我可以用来sfdisk /dev/sda <table.txt复制分区表。然后我可以使用sfdisk /dev/sda <table.txt该数据在新磁盘上重新创建相同的表。

我还可以指定一个使用磁盘上剩余所有可用空间的分区,例如echo 'start=2048, type=83' | sudo sfdisk /dev/sdb

我想要做的是使用第一种方法,但table.txt在我的批处理文件中进行编辑,以便该文件中的最后一个分区现在将填满所有剩余的可用空间。这样,如果我将分区表复制到更大或更小的磁盘,最后一个分区将使用所有可用空间。(我们假设,如果新驱动器比原始驱动器小,我将确保不会将更多数据复制到源驱动器,而新驱动器无法容纳这些数据。)

例如,如果我有这样的表格:

label: dos
label-id: 0xe5e884c6
device: /dev/sda
unit: sectors

/dev/sda1 : start=        8192, size=      524288, type=e, bootable
/dev/sda2 : start=      532480, size=   245227520, type=83

我该如何指定 /dev/sda2 的大小才能使用其余的可用空间?我尝试为该分区的大小值指定 0、-1 或不指定任何值,但都不起作用。

我的目标是让一个子程序成为 bash 脚本的一部分,该脚本将从一个驱动器读取分区表,在文件中进行我提到的更改(使用 sed 或 awk 之类的工具),然后使用编辑后的文件在第二个驱动器上创建分区表,使最后一个分区尽可能大。虽然我认为按照我描述的方式做这件事相当容易,但我也愿意接受其他方式来实现这一点。

答案1

虽然非常适合在不进行修改的情况下克隆分区表,但如果您想更改某些分区,sfdisk我建议您切换到使用。parted

我不知道如何使用克隆分区表,parted因此我会保留 sfdisk 来处理该部分:

sfdisk -d /dev/sourcedisk | sfdisk /dev/newdisk

批处理脚本中的下一行可以使用命令parted resizepart来使用新磁盘上的所有可用空间。

parted /dev/newdisk -s resizepart 2 100%

相关内容