parted
można wydrukować wolne miejsce. Przykład (celowo wybrałem skomplikowany):
# 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
Jak widać, daje to bezpośrednio pozycję i rozmiar partycji, którą możesz być w stanie utworzyć, tj. Ostatni wiersz, który mówi Free Space
. Możesz utworzyć partycję, która zaczyna się od 31115264s, a kończy na 31116287s.
Gdyby nie pułapka, rozszerzona partycja nie jest wystarczająco duża!
Ale może już używasz GPT, gdy nie cierpisz z powodu takich komplikacji.
Chwytanie liczb powinno być dość łatwe.
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`
Lub coś podobnego. (Oczywiście chciałbyś tutaj zrobić więcej kontroli zdrowia).
@swisscheese zrobił dobry komentarz w drugiej odpowiedzi, nie wiedziałem, że parted
oferuje przyjazny wynik analizy. Możesz zamiast tego użyć tego. Przykład wykorzystania ostatniej największej darmowej:
# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;
To, czy ma to zastosowanie do twojej sytuacji (w moim przykładzie nie można tam utworzyć partycji, jest już naprawdę pełna), jest czymś, co musisz samemu wymyślić. :)