Скрипты Bash разделены для GPT

Используя сценарии Bash & Python в Ubuntu 12.04, мы предоставляем клиентам образ диска в виде файла (созданного dd). однажды ddПерейдем к новому диску, мы изменим размер раздела, чтобы соответствовать размеру диска. Теперь, когда мы используем GPT-диски, мне нужно предоставить новый неинтерактивный, не-X-скрипт.

Проблема в parted генерирует интерактивное сообщение:

Ошибка: резервная таблица GPT находится не в конце диска, как должно быть. Это может означать, что другая операционная система считает, что диск меньше. Исправить, переместив резервную копию до конца (и удалив старую резервную копию)? Fix/ Игнорировать / Отменить?

Но используя -s или же -m переключиться с parted Я не могу заставить его изменить размер диска и исправить местоположение резервной копии GPT. Я также не могу вставить "F" в команду:

echo "F" > parted  /dev/sda resize 2 0% 100%
parted  /dev/sda resize 2 0% 100%
parted -m /dev/sda resize 2 100%
parted -s /dev/sda resize 2 100%

И так далее. gdisk а также sgdisk кажется, не в состоянии изменить размер. gparted работает нормально но это Х конечно и не разрешено.

Из CLI я могу подавить интерактивное сообщение, запустив в обратном порядке:

`parted -s /dev/sda rm 2`  ( succeeded with error)
`parted -s /dev/sda mkpart primary 100%` ( fails because the backup GPT was not moved)

Поэтому мне нужна специальная услуга "переместить резервное копирование GPT", предлагаемая в интерактивном сообщении и предлагаемая только там, но мне нужно работать не в интерактивном режиме.

2 ответа

Решение

Подход Дру, вероятно, сработает, хотя я его не проверял. Два других подхода заключаются в использовании комбинации sgdisk а также partedили использовать sgdisk более сложным способом. В частности, вы можете сделать одно из:

  • использование sgdisk -e переместить данные резервной таблицы разделов в конец диска, а затем parted {device-file} resize... изменить размер раздела. Использование двух утилит вместо одной немного не элегантно, но это должно работать.
  • использование sgdisk -e {device-file} переместить данные резервной таблицы разделов в конец диска, а затем sgdisk -d... удалить раздел, а затем sgdisk -n... создать новый раздел на своем месте. Вы, вероятно, можете объединить их в два или, может быть, даже один вызов sgdisk, Одно предостережение состоит в том, что этот подход изменит значение GUID для раздела. Если важно, чтобы он оставался прежним, вам нужно извлечь эти данные и сбросить значение GUID - или, учитывая, что вы начинаете с известного изображения, вы можете сохранить значение GUID как часть вашего скрипта и сбросить его без предварительного извлечения.

Обратите внимание, что я не проверял ни один из этих подходов, поэтому я не могу гарантировать их больше, чем я могу гарантировать метод Дру.

Вы можете запустить expect скрипт из вашего Bash-скрипта parted ответить на вопрос.

#!/usr/bin/expect
eval spawn parted  /dev/sda resize 2 0% 100%
expect "Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? "
send "F\r"
expect eof
Другие вопросы по тегам