Boot windows from internet

Boot windows from internet

В этом небольшом посте я расскажу вам о практических способах реализации загрузки бездисковых устройств через PXE. Скажем так, что до определенного момента я совсем не интересовался этой проблемой и о PXE имел весьма посредственное представление, также, наверное как и у большинства. Т.е. все из нас знают, что в современных ПК есть возможность загрузки по сети, каждый видел в BIOS’е собственного ПК такую возможность (PXE Boot, LAN Boot), но мало кто использовал ее на практике. Реализацией этой возможности мы и займемся на практике, а также рассмотрим какое практическое применение в «домашних условиях» может иметь сетевая загрузка.

Наша «тестовая лаборатория» включает в себя:

  • Маршрутизатор Mikrotik 951G-2HnD с RouterOS v6.39 (stable)
  • Сетевое хранилище Western Digital My Cloud EX2

  • PXE — Сетевая загрузка с микротика — здесь описывается настройка Mikrotik + TFTP для сетевой загрузки с использованием GRUB (Grub4DOS), а также приведен пример рабочей конфигурации для загрузки ALKID LiveCD и VINCOME LiveCD через PXE. Немного не то что нам хотелось (мы то хотели грузить Ubuntu LiveCD), но тем неменее информация полезная, берем на заметку.
  • Настройка TFTP сервера на Mikrotik RouterOS — а вот здесь рассматривается настройка TFTP на Mikrotik, правда тут уже у нас уже используется не GRUB, а PXELINUX (SysLinux) в качестве загрузчика. Который, как мы убедимся позже, можно будет использовать и для реализации сетевой установки Ubuntu, и для загрузки LiveCD и для множества других вещей. Уже интересно, не правда ли? Знакомимся со статьями дальше.
  • Загрузочный сервер — как загрузочная флешка, только сервер и по сети — пост на Хабре, в котором рассказывается о том как сделать «загрузочную флешку» по сети. Собственно такая конфигурация отлично подойдет для различных сервисных центров и т.п., с другой стороны, выбрать то, что будет грузиться по сети лично у него — это решение каждого, благо примеров полно. К концу чтения этого поста, вы (по-крайней мере я на это надеюсь) поймете, насколько это удобно.
  • Домашний роутер с PXE-Boot и сервисами. — приводится пример организации PXE загрузки на Asus’овском роутере с прошивкой Merlin-Firmware. Честно говоря я сам подобную никогда не использовал, но статья ценна уже как минимум различными примерами рассмотренных в ней конфигураций для загрузки. А также как отличная иллюстрация того, что при желании, для реализации PXE загрузки можно использовать только лишь ресурсы бюджетного SOHO устройства.
  • Как воспользоваться сетевой загрузкой (PXE) для Ubuntu LiveCD — переводная статья с HowToGeek, в принципе тоже может быть интересна. Кстати, именно по теме сетевой загрузки Ubuntu LiveCD вы так или иначе наткнетесь на различные ее вариации в поиске.
  • Мультизагрузочный PXE-реаниматор — статья на 3DNews от 2012 года, но тоже в принципе интересно. Если вы читая этот пост пока просто просматриваете эти ссылки «по диагонали» — то наверное уже поняли, что PXE загрузка предоставляет практически неограниченный набор возможностей, наша задача лишь научиться правильно применить их для наших задач.
  • [How-To] Запуск LiceCD Ubuntu (и не только) с любого ПК в сети с помощью PXE — название поста говорит само за себя, все действия автор проводит на сервере под управлением Debian 7. Т.е. DHCP + TFTP и т.п. у него развернуты на отдельном ПК с Debian 7. Тоже интересно, помечаем в «копилку».
  • Configure PXE Server In Ubuntu 14.04 — похожий англоязычный вариант.
  • Установка Ubuntu по сети (DHCP, PXE, boot-menu) на примере Ubuntu 14.04.
  • Ubuntu 16.04 / Debian 8: Run PXE boot server for automated install — конфигурирование сервера для автоматизированной установки Ubuntu и Debian по сети. Лично мне эта статья понравилась различными комментариями и дополнительными пояснениями. Если читать вдумчиво, а не по диагонали, то становится (хотя бы на базовом уровне) понятно что такое pxelinux.0, ldlinux.c32 и т.п.
  • Booten vom Netzwerk: Ubuntu 16.04 via PXE starten — статья, правда на немецком, подробно рассказывающая про то, как правильно настроить загрузку LiveCD с Ubuntu по сети. Собственно она и легла в основу решения поставленной задачи.
  • Руководство по сетевой загрузке предустановочной среды Windows (WinPE)
  • IT Geek: How to Network Boot (PXE) the WinPE Recovery Disk with PXElinux v5 & Wimboot

Ну и на первое время достаточно. Просмотрев / прочитав все это начнем ваять что-то свое. Первое что мы делаем — это подключаем флешку к Mikrotik’у и форматируем ее в FAT32: System -> Disks -> Format drive . Сделать это можно как через WinBox, так и через Web-интерфейс Mikrotik. Проблем с этим возникнуть не должно.

Затем скачиваем заранее подготовленный архив pxe-mikrotik-disk1.rar и распаковываем его содержимое в корень флешки. Сделать это можно как в меню Files в web-интерфейсе Mikrotik’а, так и через FTP в Mikrotik, ну или просто вставив отформатированную USB Flash в ПК и распаковав в корень содержимое архива. В результате там должна получиться следующая структура файлов (смотреть скриншот справа).

Некоторых файлов, например kolibri.iso (образ Kolibri OS) в архиве не будет, т.к. их можно без труда найти и скачать в интернете, также в архиве не будет содержимого папки winpe (т.к. все эти файлы есть на любом установочном диске с Windows и включать их в состав архива я не вижу смысла). А вот на остальных мы остановимся подробнее.

pxelinux.0 — это основной загрузчик, на который направляются DHCP сервером все клиенты сетевой загрузки, он входит в состав пакета syslinux. Все что касается данного загрузчика, а также используемых им библиотек (*.c32) можно взять в следующих пакетах:

Читайте также:  Linux для ноутбука toshiba

Для чего они? После загрузки PXELinux на устройство начинается поиск дополнительных файлов и библиотек, т.е. устройство пытается подключиться к TFTP серверу, указанному в опциях отдаваемых DHCP сервером и запросить у него, например, файл ldlinux.c32, так вот TFTP сервер должен знать о реальном местоположении файла, чтобы отдать его, например в нашем случае он лежит в disk1/tftpboot/ldlinux.c32. Честно говоря я не экспериментировал, можно ли задать соответствие не отдельным файлам, а папкам или файлам по маскам, поэтому на всякий случай сделал правила для всех файлов на TFTP сервере. После того как мы прописали правила необходимо настроить наш DHCP сервер.

Переходим на закладку IP -> DHCP Server -> Networks в Mikrotik, выбираем нашу подсеть и делаем там следующие настройки:

На этом приготовления к первому запуску закончены. Можно брать любой ПК и пробовать загрузиться по сети. Для меня наиболее простым решением было создание отдельной виртуальной машины в VirtualBox и настройка ее на загрузку по сети. В результате, если все сделано правильно, вы увидите вот такую вот симпатичную менюшку PXELinux:

Сама конфигурация этого меню находится в файле disk1/tftpboot/ubuntu-installer/amd64/boot-screens/menu.cfg . Если мы попробуем загрузиться в Kolibri OS для примера, то заметим что передача казалось бы маленького (всего 66.5 Mb) образа kolibri.iso через TFTP даже по гигабитной сети займет довольно продолжительное время:

650 Mb и отдавать их по TFTP устройствам — превращается в настоящую муку. Т.е. грузится — да, но оЧЧень медленно. Первая мысль которая приходит в голову — а что если в качестве средства доставки тяжеловесного контента использовать не TFTP, а HTTP или NFS? И да, действительно, такая возможность есть.

Посмотрите как реализована в конфигурации (menu.cfg) загрузка того же Ubuntu LiveCD:

Здесь ядро vmlinuz.efi и рамдиск initrd.lz у нас грузятся по TFTP, а вот содержимое rootfs уже берется с NFS ресурса (благо Ubuntu так умеет). Порядок создания папки ubuntu16.04_live_amd64 на NFS ресурсе описан тут.

Ну или если вкратце, то я создал отдельную папку на WDMyCloud EX2, разрешил доступ к ней по NFS:

/nfs и просто скопировал необходимые файлы с LiveCD с Ubuntu в нее:

В результате содержимое папки ubuntu16.04_live_amd64 у нас полностью идентично корню LiveCD с Ubuntu:

Просто? Просто. Теперь пробуем загрузиться по PXE выбрав в меню LiveCD:

С гигабитной сетью все получилось достаточно быстро. Основное время здесь правда тратится на загрузку vmlinuz.efi (7 Mb) и initrd.lz (27 Mb) по TFTP. И вот здесь мы подходим к главному? А можно ли как-то грузить эти файлы тоже с NFS или с HTTP ресурса? Можно! И ответом здесь является использование вместо PXELinux (который к сожалению так не умеет), загрузчика iPXE. Настоятельно рекомендую вам познакомиться с ним и изучить примеры и т.п. на официальном сайте. В архив pxe-mikrotik-disk1.rar уже входит ipxe.lkrn , собранный мной из исходников с включенной поддержкой HTTP, NFS и т.п.:

Обратите внимание, есть поддержка DNS, HTTP, iSCSI, NFS, TFTP и др. вещей. Т.е. грубо говоря используя iPXE вы можете разместить необходимые файлы не только на NFS шаре, но и где-нибудь в интернете, например, на http://yourdomain.ru/files/ . и загрузчик будет брать их оттуда. При выборе опции Load iPXE SuperBoot Menu в PXELinux открывается меню загрузчика iPXE:

И вот здесь уже, согласитесь, есть чем впечатлиться. Сама конфигурация этого меню находится в файле boot.ipxe, который был взят мной из этого проекта bradgillap/IPXEBOOT на GitHub’е. Внутри подробные примеры и комментарии для всех вариантов загрузки, фактически это означает что вы с минимальными усилиями сможете настроить у себя загрузку любого из приведенных пунктов меню, просто разместив необходимые файлы у себя в сети и скорректировав boot.ipxe .

Ну и последнее о чем хотелось бы рассказать — это о загрузке *.wim образов WinPE через PXE. Для этого в моем примере используется именно iPXE и wimboot. Пример конфигурации вы можете увидеть в menu.cfg от PXELinux в пункте меню «Load iPXE [wim-boot.ipxe]». Фактически там грузится ipxe.lkrn, который читает файл конфига wim-boot.ipxe. Просто размещаете файлы wimboot, bootmgr, bcd, boot.sdi и boot.wim вашего WinPE дистрибутива где-либо в сети (на HTTP, NFS ресурсах) и все замечательно загружается. Примеры опять же, смотрите в wim-boot.ipxe.

Кстати, в меню iPXE SuperBoot от bradgillap есть пункт External Linux Installs. Фактически это внешнее (т.е. находящееся в интернет) загрузочное меню, которое позволяет вам установить некоторые Linux-based ОС, а также загрузить некоторые варианты LiveCD онлайн. Т.е. для того чтобы установить тот же Ubuntu, фактически достаточно только соответствующим образом сконфигурировать DHCP . Все остальное, даже на этапе загрузочного меню может быть взято из сети.

p.s. Чуть не забыл 😉 Архив pxe-mikrotik-disk1.rar со всеми необходимыми загрузчиками и примерами конфигураций (пароль на архив стандартный — decker.su). Также буду рад любым вашим мнениям и отзывам в комментариях. Если у вас уже есть свои конфигурации для PXE загрузки распространенных LiveCD дистрибутивов, например, DrWeb Live CD, Kaspersky Rescue Disc и др. популярных инструментов — делитесь ими в комментариях. Также, если у кого-то есть опыт (или ссылки на соответствующие статьи) о настройке бездисковых RDP клиентов, например на базе Thinstation — это тоже приветствуется.

Как вы уже поняли, я далеко не гуру в Linux’е и по-сути как работает PXE я узнал только вчера. Поэтому в архиве по факту используется несколько загрузчиков: PXELinus (SysLinux) как основной, а из него уже можно загрузить iPXE или Grub4DOS, хотя по факту, в реальной жизни достаточно использовать что-то одно. Все это оставлено просто в качестве примера, чтобы было наглядно понятно как работать и с тем, и с другим, и с третьим. Так что, как говорится, «ногами не пинать», а ценные комментарии всегда приветствуются.

Читайте также:  Kitchen design with windows

BootDev

Создание загрузочных дисков и прочие полезные мелочи

Страницы

2018-02-28

Загрузка по сети — Установка загрузчика BOOTMGR на TFTP сервер

Немного ранее, мы рассмотрели установку TFTP и DHCP сервера, в лице программы Tftp32. Как и было обещано, начнем тему установки загрузчиков на TFTP сервер. Так как в рамках одной статьи рассматривать все загрузчики будет нецелесообразно. Установку каждого, будем обозревать по отдельности. Первым на очереди будет Windows Boot Manager (BOOTMGR).

Все дальнейшие действия предполагают, что у вас уже установлен и настроен TFTP сервер. Если же это не так, то советую прочесть прошлый материал по данной теме.

Дистрибутив загрузчика BOOTMGR

Первым делом, нам необходимо достать сам загрузчик BOOTMGR. Обычную его версию, для загрузки не по сети , можно достать прямо в самой ОС Windows, по пути %windir%\Boot\.

Сетевую PXE версию, можно взять из boot.wim файла среды предустановки любого установочного Windows образа (или диска), начиная с Windows 7. В моем случае, я использовал установочный iso образ Windows 10×64.

Для просмотра содержимого wim файлов, отлично подойдет файловый менеджер архиватора 7-Zip. Найти файл boot.wim можно в папке sources, в корне установочного iso образа или компакт диска.

При его открытии, вы увидите каталоги с цифрами. Они представляют собой разделение содержимого на версии внутри wim архива. Заходим в ту, которая имеет самый больший размер.

После переходим по пути Windows\Boot.

И извлекаем содержимое данной папки в удобное для вас место. В моем случае это будет папка D:\Boot.

Копируем файлы загрузчика на TFTP сервер

Ранее, при настройке TFTP сервера, в качестве его корневой директории, мною был выбран путь D:\TFTP.

На данный момент данная папка пуста.

Скопируем в нее самые главные файлы загрузчика pxeboot.n12 и bootmgr.exe. Располагаются они по пути D:\Boot\PXE.

Первый, запускается PXE окружением. А второй, является исполняемым файлом загрузчика BOOTMGR. Роль первого файла, даже исходя из его маленько размера, очевидна, выполнить запуск файла основного загрузчика.

Первая загрузка

Попробуем загрузиться с нашего TFTP сервера. Но, предварительно нужно прописать один параметр DHCP сервера. А именно опцию 67, отвечающую за то, какой файл является загрузочным на TFTP сервере.

Переходим в настройки настройки DHCP сервера, программы Tftp32, и прописываем в секции DHCP Pool defenition, в поле Boot File имя файла pxeboot.n12.

Применяем внесенные изменения, нажатием на кнопку OK, и перезагружаем программу, или сервис программы Tftp32, в зависимости от типа установки.

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

В начале загрузки отобразится индикатор ожидания ответа от DHCP сервера. После успешного его получения, скачается и запустится загрузчик.

В логах TFTP сервера, окна программы Tftp32, так же отобразится информация о скачанных файлах.

Как можно наблюдать, из предпоследнего скриншота, загрузчик загрузился, но выдал ошибку. Ошибка в данном случае, заключается в отсутствующем, или поврежденном файле \Boot\BCD. Данный файл, является конфигурационным файлом загрузчика BOOTMGR.

Дадим загрузчику то, что он просит. Первым делом создадим папку Boot в корневой директории TFTP сервера.

После, скопируем в нее файл BCD из папки D:\Boot\DVD\PCAT.

Попробуем загрузиться снова.

Снова ошибка. Теперь в тексте ошибки написано, что загрузчик не может получить доступ к загрузочному устройству. Происходит это из-за того, что в скопированном файле BCD уже прописаны инструкции по загрузке, и они явно разнятся с тем окружением в котором мы их используем. Еще, если обратить внимание на нижнюю строку, можно увидеть надпись ENTER=OS Selection. Нажатием на клавишу ENTER, можно попасть в меню ручного выбора варианта загрузки, прописанного в данном конфигурационном файле. Проверим.

В списке находится один пункт Windows Setup. Данный BCD файл, как видно из названия пункта загрузки, сконфигурирован на запуск установки ОС Windows. Что не удивительно, так как взят он был из папки Boot\DVD. Еще, в тексте данного диалога присутствует сообщение, что по нажатию клавиши TAB, можно перейти в нижнее меню Tools, в котором только один пункт Windows Memory Diagnostic. Предназначение которого, проверка оперативной памяти компьютера.

Попробуем перейти по данному пункту.

Получаем сообщение, что файл \boot\memtest.exe не найден. Скопируем данный файл (memtest.exe) из папки D:\Boot\PCAT в папку D:\TFTP\Boot.

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

Теперь данный инструмент работает. Но, запуск установки Windows и проверка оперативной памяти компьютера, это явно не то чего мы ждем он нашего сервера сетевой загрузки, поэтому перейдем к конфигурированию загрузчика.

План загрузки

Перед тем как, настраивать загрузчик BOOTMGR, неплохо бы определиться с тем, что мы можем, и что будем с его помощью загрузжать. Сам загрузчик BOOTMGR, или правильнее Windows Boot Manager, это исключительно загрузчик для ОС Windows. Он умеет загружать ядро вышеупомянутой операционной системы, без изысков в виде параметров сетевой загрузки (то есть, что то типа — грузим только ядро с параметрами, а уже оно само идет в сеть и загружает с указанного ресурса все остальное). Умеет загружать wim и vhd(x) образы. Вот собственно и все.

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

Читайте также:  Windows 10 как включить показ скрытых папок

Для будущего загрузочного меню, исключительно для демонстрации, будем использовать по одному из wim образов из мультизагрузочных сборок, с данной страницы. Конкретно, это будут образы из сборок 2k10 , AdminPE , Sergey Strelec .

Настройка BOOTMGR

Как было сказано ранее, вся конфигурация загрузчика BOOTMGR располагается в файле \Boot\BCD. Его мы и будем редактировать. Для этих целей нам понадобится программа BOOTICE. Она позволяет проводить все манипуляции с данным файлом в графическом интерфейсе, что намного удобнее использования штатной консольной программы bcdedit.

Сперва создадим в корневой директории TFTP сервера папку Image, и поместим в нее wim образы от упомянутых ранее сборок.

Приступим к конфигурированию загрузчика.

Запускаем программу BOOTICE и переходим на вкладку BCD.

В секции BCD file ставим переключатель в положение Other BCD file. В открывшемся окне открытия файла указываем наш, в моем случае D:\TFTP\Boot\BCD, и жмем на кнопку Открыть.

Ничего не произойдет. Так и задумано. Далее нам необходимо выбрать режим в котором будет отображено содержимое BCD файла. Тут у нас два варианта, либо Easy mode, либо Professional mode. Для выполнения текущих целей, Easy mode более чем достаточно. Жмем на соответствующую кнопку.

В открывшемся окне, мы получим удобное представление содержимого BCD файла. На данный момент, список у нас состоит из одного пункта Windows Setup, который мы могли наблюдать ранее. Начнем с глобальных параметров загрузчика. В данном окошке это секция Global settings.

Что в этой секции нужно изменить? Сперва поставим галочку напротив пункта Display boot menu. Эта опция укажет загрузчику на то, что нужно всегда выводить загрузочное меню. Так как, тайм-аут при загрузке по сети не очень то и нужен, выставляем его в значение 0, после чего уберем галочку Timeout. Язык загрузчика по умолчанию выставим на русский, для этого изменим параметр Boot language на значение ru-RU. И последнее для данной секции, выставим галочку No integrity checks. Она отвечает за возможность загрузки измененных wim файлов, то есть отредактированных или сторонних. В итоге должно получиться так.

Чтобы сохранить проделанные изменения нажимаем на кнопку Save Globals. Данная кнопка сохраняет как раз изменения глобальных настроек загрузчика.

Теперь проверим результат изменений загрузившись по сети.

Меню загрузилось. Тайм-аута нет. Но все по прежнему на английском языке, хотя в глобальных настройках мы указали русский. Все потому, что загрузчик не нашел файлы локализации. Скопируем их из папки D:\Boot\PXE\ru-RU в папку D:\TFTP\Boot\ru-RU. По сути копируется папка ru-RU.

Проверим что из этого вышло.

Вместо текста у нас теперь вопросительные знаки. Все из-за отсутствия шрифтов. Скопируем их из папки D:\Boot\Fonts в папку D:\TFTP\Boot\Fonts, и снова проверим результат.

Теперь все как надо. Перейдем к настройке загрузочных пунктов меню. Снова открываем BOOTICE, и переходим к редактированию файла BCD.

Так как у нас на данный момент присутствует только один пункт Windows Setup, изменим его для загрузки wim образа 2k10. Первым делом, поменяем название пункта меню. За данную настройку отвечает параметр OS title секции [Option]. Изменим текст в данном поле на «WIM-образ 2k10«.

Теперь изменим путь к wim образу на корректный. За это отвечает параметр File секции [Boot Device]. В нашем случае путь будет таким \Image\2k10.wim.

Ниже, в этой секции располагается параметр SDI File. Данный параметр указывает на расположение sdi файла, который представляет собой образ диска с одним разделом и файловой системой NTFS, в которую после будет разворачиваться wim образ в оперативной памяти компьютера.

Так как файл boot.sdi отсутствует на TFTP сервере, скопируем его из папки D:\Boot\DVD\PCAT в D:\TFTP\Boot.

Изменять данный параметр не нужно, так как пути совпадают с нашими.

И последнее, убираем галочку Metro Boot Manager. Данный параметр отвечает за стилизацию загрузки под Windows 8/10. То есть вместо полосы загрузки будут отображаться крутящиеся шарики. Что на мой взгляд менее информативно.

Сохраним проделанные изменения, нажав на кнопку Save current system, и посмотрим как это будет выглядеть в реальных условиях.

Попробуем загрузиться с данного пункта.

Получаем ошибку о недействительных файлах внутри wim образа. Странно, учитывая что мы выставили глобальный параметр No integrity checks. Попробуем выставить данный параметр для нашего пункта меню отдельно, или персонально. Сделать это в Easy mode невозможно, поэтому открываем редактирование BCD в Professional mode.

В разделе Windows Boot Manager, отвечающем за глобальные настройки данный параметр установлен и включен. Установим теперь данный параметр для нашего пункта меню. Выделяем его в левой части окна, располагаться он будет в ветке Application objects. После, в правой части окна, жмем правой кнопкой мыши на свободном месте, и в появившемся меню выбираем пункт New element.

В открывшемся окне, из выпадающего списка Element name выбираем параметр DisableIntegrityChecks, и жмем на кнопку OK.

В следующем окне, выставляем переключатель в положение True / Yes и жмем на кнопку OK.

Программа сообщит что элемент успешно отредактирован.

Жмем OK. Среди параметров теперь появится соответствующий пункт.

Закрываем окно редактирования, и снова пробуем загрузиться.

Система успешно загрузилась.

Осталось прописать еще два загрузочных пункта меню. Создавать заново их не придется. Профессиональный режим редактирования позволяет создавать дубликаты загрузочных записей. Делается это просто, жмем правой кнопкой по существующей записи, и в появившемся меню выбираем пункт Duplicate this entry.

Дальше остается лишь изменить путь до файла wim образа, и сменить отображаемое название в меню.

Итоговый вариант меню. Думаю описывать этот процесс не имеет смысла.

И результаты загрузки последних двух добавленных пунктов.

Оцените статью