После успешного восстановления ISO-образа Fedora (для USB-накопителя) после добавления файла кикстарта (https://serverfault.com/questions/548405/), У меня возникла проблема с поиском файла кикстарта на USB-носителе.
Когда это делается с компакт-диска, вы можете просто запустить его, добавив этот параметр для загрузки:
linux ks=cdrom
Это запустит кикстарт (при условии, что файл кикстарта называется ks.cfg и находится в корне диска).
Очевидно, что для USB-накопителя все будет по-другому, поэтому, исходя из своих исследований, я предположил, что эта строка подойдет:
linux ks=hd:sdb1:/ks.cfg
Очевидно, это не работает. Я получаю сообщение об ошибке, что этот диск уже смонтирован и не может быть перемонтирован.
РЕДАКТИРОВАТЬ: фактическое сообщение об ошибке:
mount: /dev/sdb1 is already mounted or /run/install/tmpmnt0 busy
Warning: Can't get kickstart from /dev/sdb1:/ks.cfg
Чтобы проверить правильность синтаксиса, я поместил файл кикстарта на другой USB-накопитель и загрузил ту же команду, чтобы получить ks.cfg из нового местоположения:
linux ks=hd:sdc1:/ks.cfg
Это работает (при условии, что USB-накопители смонтированы по порядку, загрузка -> sdb1, кикстарт -> sdc1). Установка запустится и завершится без проблем. Очевидно, что использование двух перьевых дисководов несколько неприятно и ненадежно.
Есть ли способ обойти это?
Я смог решить эту проблему, выполнив следующие действия:
isolinux
каталог и убедитесь, что он назван ks.cfg
мой isolinux.cfg
файл выглядит так:
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/isolinux/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
Использование метки диска при указании ks.cfg
делает полученный ISO-образ более переносимым. (можно превратить в загрузочную флешку)
Я перепробовал все, но, похоже, только это работает: поместите ks.cfg внутрь initrd. Итак, приведенные ниже шаги извлекают initrd, добавляют туда ks.cfg и воссоздают его. Протестировано с CentOS7
Сначала смонтируйте исходный образ .iso на свой компьютер и скопируйте его содержимое в tmp /
Затем,
#Keep the original file
cp -ai tmp/isolinux/initrd.img initrd.img.orig
mkdir irmod
cd irmod
#Extract initrd in irmod/
xz -d < ../tmp/isolinux/initrd.img | cpio --extract --make-directories --no-absolute-filenames
#Add the ks.cfg in there
cp ../tmp/ks.cfg .
# Recreate the initrd.img inside isolinux/
find . | cpio -H newc --create | xz --format=lzma --compress --stdout > ../tmp/isolinux/initrd.img
#cleanup
cd ..
rm -r irmod
# Add ks=file:/ks.cfg to the boot parameters in isolinux.cfg. you can do it by hand, this is an example for our own isolinux.cfg
sed -s -i 's|ks=.*ks\.cfg ksdevice=link|ks=file:/k1.cfg|' ../tmp/isolinux/isolinux.cfg ../isolinux.cfg
Затем приступайте к созданию изображения как обычно:
cd tmp/
imgname="inaccess-centos7-ks1-v1.iso"
xorriso -as mkisofs -R -J -V "CentOS 7 x86_64" -o "../${imgname}" \
-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
-boot-info-table -isohybrid-mbr /usr/share/syslinux/isohdpfx.bin .
cd ..
Мой любимый метод - использовать UUID, потому что он стабильный.
Я использую два флеш-накопителя, первый с CentOS, второй с кикстартом. После сохранения кикстарта на втором флеш-накопителе я проверяю его UUID в Linux с помощью команды blkid: / dev / sdg1: UUID = "885E: 0BD1" TYPE = "vfat"
И после этого я использую его на странице установки: ks = hd: UUID = 885E: 0BD1: /ks.cfg
Это действительно работает!
Вы должны указать / sda1, потому что при загрузке с USB sda - это USB, sdb - это первый жесткий диск и т. Д.
Теперь у вас есть один раздел на USB-накопителе размером с ISO-образ. Просто создайте еще один раздел на USB-накопителе, используя оставшееся пространство, отформатируйте его и поместите туда свои файлы кикстарта.
UPD: попробуйте fdisk
, поскольку parted
похоже, не работает в этом случае.
UPD1: iso нужно обновлять с помощью xorriso
UPD2: посмотреть https://serverfault.com/a/551307/134234