parted可以打印可用空间。示例(我故意选择了一个复杂的):
# parted /dev/sda unit s print free
[...]
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 4196351s 4194304s primary fat32 lba
4196352s 4198399s 2048s Free Space
2 4198400s 6295551s 2097152s primary ext2 boot
6295552s 6297599s 2048s Free Space
3 6297600s 27269119s 20971520s primary ext2
27269120s 27271167s 2048s Free Space
4 27271168s 31115263s 3844096s extended lba
5 27273216s 29192191s 1918976s logical ext2
6 29194240s 31115263s 1921024s logical ext2
31115264s 31116287s 1024s Free Space
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这直接为您提供了您可以创建的分区的位置和大小,即最后一行显示Free Space。您可以创建一个以 31115264s 开始并以 31116287s 结束的分区。
要不是扩展分区不够大这个坑!
但也许您已经使用 GPT,而不会遭受此类并发症的困扰。
获取数字应该很容易。
function make_partition
{
parted -s "$1" unit s mkpart primary "$2" "$3"
}
make_partition /dev/sda `parted /dev/sda unit s print free | grep 'Free Space' | tail -n 1`
Run Code Online (Sandbox Code Playgroud)
或者类似的东西。(当然,您希望在这里进行更多的健全性检查。)
@swisscheese 在另一个答案中做了很好的评论,我不知道parted提供了解析友好的输出。您可能会选择使用它。获取最后一个最大的空闲的示例:
# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;
Run Code Online (Sandbox Code Playgroud)
这是否适用于您的情况(在我的示例中,您也无法在那里创建分区,它实际上已经满了)是您必须自己弄清楚的事情。:)