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
Як ви бачите, це дає вам безпосередньо положення та розмір розділу, який ви зможете створити, тобто останній рядок, який говорить Free Space
. Ви можете створити розділ, який починається з 31115264 і закінчується в 31116287.
Якби не провалля, що розширена перегородка недостатньо велика!
Але, можливо, ви вже використовуєте 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`
Або щось подібне. (Природно, ви хочете зробити ще кілька перевірок на корисність.)
@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;
Чи це підходить для вашої ситуації (на моєму прикладі, ви також не могли створити там розділ, він дійсно повний) - це те, що ви повинні з’ясувати для себе. :)