Кривой стартер. Проблемы с разметкой дисков.

This entry is part [part not set] of 5 in the series kickstart

В процессе эксплуатации была выявлена одна проблема – порядок определения дисков имеет значение. Т.к. я привязывался к именам дисков, считая, что sda – установочная флешка, а sdb – целевой жёсткий диск, то всё благополучно ломается, если диски меняются местами. А они меняются местами. На абсолютно одинаковых неттопах, при условии, что “системная” флешка сидит всегда в одном и том же порту и установочная флешка подключается к другому порту (каждый раз расположенному там же на материнской плате), они, порой, меняются местами. Может от версии BIOS зависит, не знаю. Так глубоко копать не стал. Так же имена устройств меняются местами на одном и том же неттопе в зависимости от того, что является целевым диском – флешка или жёсткий диск.
Сбор информации по крупицам позволил сделать процесс универсальнее, о чём и поведаю.

В данном решении я отталкиваюь от метки установочной флешки. В моём случае – Scientific.
Начну с syslynux.cfg.
Нужно поменять в соответствующей строке append указание на загрузочный раздел. Вместо ks=hd:sda4 я использовал конструкцию hd:LABEL="Scientific"
В таком виде эта строка позволит найти ks.cfg вне зависимости от того, каким диском определилась установочная флешка (sda, sdb или sdc). Это уже должно упростить жизнь, особенно в случае установки на компьютер с несколькими дисками.

В самом ks.cfg меняем harddrive --partition=/dev/sda4 --dir=/ на
harddrive --partition=/dev/disk/by-label/Scientific --dir=/. Теперь и поиск установочного ISO образа будет завершаться непременным успехом.

Защитить установочную флешку от форматирования можно так же путём указания раздела не в формате sdXY, а указав метку:
part None --onpart=LABEL="Scientific" --noformat

Перейду к более сложному этапу – разметке диска. Часть вещей можно сделать штатными средствами anaconda, а часть придётся перевести в %pre скрипты.

Результатом работы будет сгенерированный файл /tmp/part-include, который надо будет подключить к ks.cfg через include.
Для начала нужно определить имя устройства установочной флешки и присвоить его значение переменной install_media:
install_media=blkid | grep Scientific | cut -c 6-8
Так как установка может проводиться на девственно чистый диск, то blkid уже не поможет, т.к. в выводе комманды присутствуют только диски, имеющие разделы. Исходя из того, что в системе два диска – установочный и целевой, причём на предыдущем этапе стало известно имя устройства установочного диска, воспользуемся для поиска имени устройства целевого диска содержимым директории /sys/block. Выведем список блочных устройств, исключим установочный диск и отфильтруем оставшиеся жёсткие диски и флешки:
dest_disk=ls -1 /sys/block | grep -v "$install_media" | egrep [hs]d
Получив таким образом имя устройства целевого диска, используем значение переменой в дальнейшем процессе. Все полученные строки надо записать в файл /tmp/part-include.
Укажем, куда ставить GRUB:
echo "bootloader --location=mbr --driveorder=$dest_disk --append="crashkernel=auto rhgb quiet reboot=bios"" >> /tmp/part-include
и удалим имеющиеся разделы на целевом диске:
echo "clearpart --all --initlabel --drives=$dest_disk" >> /tmp/part-include

В секции %pre, когда монтируется установочная флешка для доступа к устанавливаемым конфигам и скриптам, можно монтировать раздел, отталкиваясь от его метки:
mkdir /tmp/flash
mount /dev/disk/by-label/Scientific /tmp/flash

Share