Программно разделяющий диск

Я пытаюсь создать сценарий bash, который создаст новый раздел с файловой системой на диске с существующими разделами.

Похоже, что создавать разделы с программным обеспечением легко, но это требует, чтобы вы знали, с чего начать и остановить новый раздел, и в этом я испытываю проблемы.

  • ls для строки cut -f не работает
  • Как перенаправить вывод любой команды?
  • Закрытие терминала при использовании команды «login»
  • Прочитайте каждый каталог и выполните действия в скрипте Bash
  • Почему недавнее обновление Ubuntu 14.04 испортило мою подсказку PS1?
  • Объединение двух переменных приводит их в действие в Windows
  • Я не хочу полагаться на диск, имеющий разделы в определенном положении / размере. То есть, я хочу создать новый раздел, начиная сразу после последнего существующего. Я хочу иметь возможность затем создать раздел либо фиксированного размера, либо заполнить оставшееся пространство.

    В Bash существует надежный способ определения

    а) конечное положение последнего раздела и
    б) оставшееся безразмерное пространство после последнего раздела?

  • Удалите файлы и каталоги, даже если они не пусты, кроме некоторых каталогов
  • Сжимать каталог с помощью tar / gz через SSH на локальный компьютер?
  • Bash игнорирует мой PATH и его кеш
  • Копирование одного файла в несколько каталогов с помощью cp
  • Выбор диапазона журналов из ежедневных архивов журналов
  • Почему bash добавляет одинарные кавычки к неуказанным неудачным расширениям имени пути в команде перед ее выполнением?
  • 2 Solutions collect form web for “Программно разделяющий диск”

    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 и заканчивается 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` 

    Или что-то подобное. (Естественно, вы хотели бы сделать еще несколько проверок здравомыслия здесь.)

    @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; 

    Является ли это применимым для вашей ситуации (в моем примере вы не могли создать там раздел, он уже полон действительно) – это то, что вам нужно выяснить самостоятельно. 🙂

    Это легко, у mkparted есть опция --list , вам нужно использовать awk и --list для извлечения последнего раздела, а затем использовать mkpart part-type [fs-type] start end ,

    Но ваш ответ:

    Сначала вы должны получить все разделы и с:

     mystartgroup=`parted --list |awk {'print $2'}` myendgroup=`parted --list |awk {'print $3'}` 

    Заметки:

    1. Вы должны преобразовать GB в MG .
    2. Вы должны использовать последнее значение каждой variable
    3. Вы должны использовать -s в вашей parted command в конечном скрипте.

    Если у меня есть время, заполните этот сценарий, извините, у вас нет времени.

    Linux и Unix - лучшая ОС в мире.