Intereting Posts
ESC + {: Что это такое и где я могу узнать больше об этом? Игнорировать пробелы для цикла при печати имени файла? Не удалось использовать make для установки Valgrind Можно ли отключить GNOME / KDE? NTFS монтирование с использованием fstab принудительно nosuid, nodev Как я имею в виду смелый вес семейства шрифтов на смелый вес другого семейства шрифтов? Создайте дублируемую запись, основанную на условии Iptables: сопоставление исходящего трафика с conntrack и владельцем. Работает со странными каплями Простой способ надежно подключить 2 машины через Ethernet-кабель? Можно ли перенаправить корневую почту на внутреннюю электронную почту axigen? Использование if и find together Как эффективно искать список строк в большой директории кода Как сделать wpa_supplicant автоматически входить в файл Как я могу запланировать запуск программы python из другой программы python? Как извлечь изображения из видеофайла?

Как я могу задать определенный сервер для загрузки

Какие параметры доступны для выполнения следующего сценария загрузки?

При загрузке (перед загрузкой) свяжитесь с определенным веб-сервером и спросите, что загрузить (обычный ответ: загрузка с локального жесткого диска, альтернативный ответ: загрузочный образ XYZ)

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

То, что я нашел и пытался до сих пор, заключается в следующем: запуск Grub2 с локального жесткого диска и загрузка iPXE. Затем iPXE связывается с определенным веб-сервером через http и получает скрипт iPXE. Но оттуда я еще не нашел способ загрузиться с локального диска (за исключением того, что снова начал Grub и заканчивался бесконечным циклом). OS, которую я хотел бы загрузить, находится на разделе 2 того же жесткого диска, с которого начинается Grub / iPXE.

  1. Есть ли альтернативный способ достижения того, что мы пытаемся выполнить?
  2. Есть ли способ сказать Grub выбрать другой вариант во втором запуске (начиная с iPXE) или сообщить iPXE для загрузки из раздела 2?

Замечание: Раздел 2 содержит загрузчик Windows и может быть загружен из меню Grub.

Я использовал следующий метод обновления удаленной системы, который может помочь вам. В этой системе я мог только инициировать сброс, а не смотреть на (загрузочный) экран. Система загрузилась в grub (на Ubuntu 12.04) и имела как дополнительный раздел, так и раздел данных. Хитрость заключается в том, чтобы вставить /etc/default/grub :

 GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=false 

Чтобы вы всегда загружались в запись 0 (Ubuntu 12.04), если:

  • кто-то на консоли выбирает что-то еще
  • вы запускаете grub-reboot X во время входа в Ubuntu и перезагружаетесь

Из Ubuntu я загрузил и вытравил tar-файл на дополнительный раздел (или сделаю небольшие изменения вручную), а затем запустите update-grub чтобы обновить меню grub (которое сканировало недавно заполненный дополнительный раздел и создало записи меню для своей ОС) затем используйте grub-reboot и reboot .

Если машина не вернется (т. ssh Не сможет ssh после льготного периода), я могу перезагрузить машину, и она перезагрузится в Ubuntu, чтобы проанализировать, что пошло не так, и следующий цикл.

С помощью соответствующей программы, запускаемой при загрузке, вы можете проверить, что нужно загрузить следующее «изображение», посмотреть, есть ли у вас это (если не скачать) и установить. Затем перезагрузитесь, как указано выше.

С распределенным распределением на основе systemd процесс перезагрузки должен быть относительно быстрым, и загрузка / установка альтернативной ОС / дистрибутива займет большую часть времени.

Я нашел способ выполнить то, что мы искали. Спасибо go @jc__ за подсказку с grubenv, а также @Anthon.

Итак, вот мое решение: поместите ядро ​​iPXE kernel (.lkrn) с помощью специального скрипта, чтобы связаться с сервером управления загрузкой в ​​/ boot

Затем настройте Grub

1- использовать переменную от grubenv

 GRUB_DEFAULT=saved 

2- Цепная загрузка iPXE в / boot от Grub и включение следующей команды перед загрузкой iPXE

 set saved_entry='<menuentry to boot from local drive>' save_env saved_entry 

3- Подготовьте меню Grub, которое загружает ОС с локального диска с помощью

 set saved_entry='<menuentry iPXE>' save_env saved_entry 

4- Если ничего не нужно сделать, сервер управления загрузкой инструктирует iPXE загружаться с локального диска с помощью

 sanboot --no-describe --drive 0x80 

5- Grub снова загружается и загружается на локальный диск, а затем снова загружает iPXE.

Время загрузки в Windows 10, включая запрос сервера управления загрузкой, составляет около 25 секунд. Так что на самом деле довольно быстро. 🙂

Есть по крайней мере два способа сделать это:

  1. Взгляните на http://ipxe.org/appnote/work_around_bios_halting_on_ipxe_exit#examples , одна из этих команд может работать на вас:

     chain ${server}/grub4dos.exe --config-file="find --set-root /BOOTMGR;chainloader /BOOTMGR" chain ${server}/grub4dos.exe --config-file="root (hd0,1);chainloader +1" 
  2. В настоящее время я использую следующее, поскольку я создал это, прежде чем нашел эту страницу на GRUB4DOS на сайте iPXE. Создайте ISO-образ, содержащий ISOLINUX и эту конфигурацию:

     NOESCAPE 1 PROMPT 0 ALLOWOPTIONS 0 DEFAULT chain-hd0-2 LABEL chain-hd0-2 SAY Chaining hd0 2... COM32 chain.c32 APPEND hd0 2 

    И загрузите его с помощью (вы должны использовать 0x81 здесь, потому что он использует 0x80 по умолчанию, который будет перекрывать локальный диск):

     sanboot --drive 0x81 ${server}/chain-hd0-2.iso