parted
Puede imprimir espacio libre. Ejemplo (elegí uno complicado a propósito):
# 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
Como puede ver, esto le proporciona directamente la posición y el tamaño de la partición que puede crear, es decir, la última línea que dice Free Space
. Puede crear una partición que comience en 31115264s y termine en 31116287s.
¡Si no fuera por la trampa, la partición extendida no es lo suficientemente grande!
Pero tal vez ya usa GPT donde no sufre tales complicaciones.
Agarrar los números debería ser bastante fácil.
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`
O algo similar. (Naturalmente, querrás hacer más controles de cordura aquí).
@swisscheese hizo un buen comentario en la otra respuesta, no sabía que parted
ofrecía resultados amigables para analizar. Puede optar por usar eso en su lugar. Ejemplo para agarrar el último libre más grande:
# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;
Si eso es aplicable a su situación (en mi ejemplo, tampoco podría crear una partición allí, ya está llena) es algo que debe descubrir por sí mismo. :)