我已经看到过很多类似的版本,但没有一个能把所有部分整合在一起。我在 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%