Бездисковые компьютеры подключаем к серверу
Внимание! В статье описываются действия, которые могут вывести из строя ваше оборудование. Мы не несем никакой ответственности за возможные повреждения. Выполняйте их на свой страх и риск. Вы можете преобрести готовое решение у специалистов.
Цель iSCSI. Настройка программы StarWind Virtual SAN
Открываем StarWind Management Console, жмем кнопку Add Server и создаем новый сервер с IP-адресом 192.168.0.1. Имеющийся по умолчанию сервер с IP-адресом 127.0.0.1 можно удалить.
Далее выбираем созданный нами сервер и нажимаем ссылку Add Target. В появившемся окне можем указать свое название IQN цели, активировав галочку Target Name. В частности я указал iqn.2014-11.home:win7-64bit.
Далее выбираем созданный нами Target и нажимаем ссылку Add Device.
В появившейся окне выбираем Hard Disk Device, далее выбираем Virtual Disk, указываем расположение и объем создаваемого диска, задаем объем и параметры кэширования, и создаем дисковое устройство нажатием кнопки Create.
В итоге получаем настроенный и готовый к работе iSCSI Target, имеющий следующий вид:
При необходимости мы можем создавать необходимое количество iSCSI Target-ов и на каждый из них подключить необходимое количество iSCSI дисков. А также обеспечить безопасности доступа к iSCSI Target-ам с использованием CHAP-аутентификации клиентов, нажав по ссылке Add Permission.
История вопроса
В каждом персональном компьютере есть микросхема памяти, которая не теряет своего содержимого при выключении питания. На этой микросхеме записаны исполнимые коды базовой системы ввода-вывода компьютера, BIOS. Во все времена исполнимый код BIOS решал одну задачу: загрузить в память исполнимый код операционной системы.
Раньше BIOS умел работать только с дисководами. Он загружал первые 512 байт с дискеты с операционной системой и дальше выполнял служебные функции, компьютером же управляла операционная система, заголовок которой по стандарту содержался в этих 512 байтах.
Затем в компьютерах появились жесткие диски, а в настройках BIOS дополнительный пункт меню, определяющий, откуда BIOS должен загружать операционную систему: с дискеты или с жесткого диска.
Далее добавились возможности загрузки с CDROM, ZIP, USB карт памяти. У всех этих устройств есть одна общая черта: интерфейс работы с ними на аппаратном уровне описывается стандартом. И если код в BIOS умеет грузиться с одного CDROM, поддерживающего стандарт ATAPI, — он сможет загрузиться с любого другого, также поддерживающего этот стандарт.
Etherboot
Etherboot — оpensource проект, который выпускает прошивки практически для всех существующих сетевых карт. Прошивка Etherboot может быть записана в микросхему BootROM или flash-память сетевой карты, может быть запущена с дискеты или жесткого диска как загрузочный сектор или как программа из DOS. Прошивки Etherboot являются единственным способом загрузки по сети парка компьютеров с разномастными сетевыми картами, для которых производители не написали PXE-прошивки.
Установка ОС Windows (альтернативный метод)
Не знаю кому как, но мне лично не представляется удобным для каждого установочного образа Windows записывать DVD диск.
Мне привычнее распаковать содержимое установочного диска и запустить установку Windows с жесткого диска. К тому же с жесткого диска операционная система устанавливается быстрее.
Приведу пример, с использованием стандартного загрузчика bootmgr, имеющегося в любом установочном дистрибутиве Windows.
Данный метод подходит также для установки Windows с локальных жестких дисков.
Если коротко, то создаем на iSCSI диске небольшой «активный» раздел, копируем туда содержимое установочного диска Windows, и затем настраиваем MBR, для загрузки с диска установщика Windows. Подробности под спойлером.
Итак, откроем на рабочей Windows системе Панель управления — Администрирование — Инициатор iSCSI.
Появиться окно «Свойства: Инициантор iSCSI».
Переходим на вкладку «Обнаружение» и нажимаем кнопку «Обнаружить портал. ».
В открывшемся окне вводим IP-адрес нашей цели iSCSI — 192.168.0.1 и нажимаем ОК.
Далее переходим обратно на вкладку «Конечные объекты» и увидим все цели с идентификаторами IQN.
Выбираем в списке нужную цель и нажимаем кнопку «Подключить».
Откроется еще одно окно требующий нашего подтверждения, где также нажимаем ОК.
Если в открывшемся окне оставить галочку «Добавить это подключение в список предпочитаемых конечных объектов» то указанная цель будет автоматически подключаться к системе при каждой загрузке.
Открываем оснастку «Управление компьютером» и переходим на вкладку «Управление дисками». Тут мы увидим, что в нашей системе появилось еще одно дисковое устройство. Создаем на этом диске «Основной раздел», указав размер диска чуть больше размера нашего установочного образа. Далее форматируем под файловую систему NTFS, подключаем любую букву диска и делаем раздел «активным».
Откроем необходимый образ установочного диска программой UltraISO или WinRar и распакуем содержимое образа на созданный в предыдущем пункте раздел диска. Важно, чтобы после распаковки на диске оставалось как минимум 100Мб свободного места (Для Windows 8 рекомендуется 350Мб свободного места). Если свободного места недостаточно, то расширяем выбранный раздел в оснастке «Управление дисками».
Затем скачиваем из интернета программу BOOTICE и запускаем (ссылки приводить не буду, сами сможете найти без труда).
В программе выбираем нужный нам диск из раскрывающегося списка. В моем случае HD6:
Далее нажимаем кнопку «Process MBR» и откроется следующее окно:
В данном окне выбираем последний пункт «Windows NT 5.x / 6.x MBR» и нажимаем кнопку «Install/Config».
На диске будет настроен MBR, загружающий стандартный загрузчик bootmgr из активного раздела диска.
Далее можно загружаться на бездисковом ПК с данного iSCSI-диска и сходу устанавливать ОС WIndows.
Установка Windows запуститься автоматически.
Но рассмотрим еще один момент. Если мы хотим сделать данный раздел скрытым от пользователей и недоступным для операционной системы, то запускаем командную строку от имени администратора и набираем следующие команды:
Diskpart
List disk
Sel disk x (вместо x подставляем номер нужного диска, список которых выводит предыдущая команда)
Sel part 1 (при необходимости список разделов можно посмотреть командой List part)
Remove
Set этого данный раздел диска станет технологическим и скрытым. Для этого раздела уже не возможно назначит букву диска и примонтировать его к работающей системе, но устанавливается Windows с данного раздела без проблем.
Получится что то типа раздела восстановления)
В этой статье будет рассказано, как запилить сервер, который будет при включении грузиться по PXE, потом монтировать корневую файловую систему по iSCSI и спокойно жить дальше.
Что необходимо?
Для загрузки системы нужны три компонента: ядро, initramfs и корневая файловая система.
Ядро и initramfs мы передадим по TFTP, а корневую файловую систему — по iSCSI.
iSCSI-таргеты
iSCSI — реализация протокола SCSI поверх TCP. Сам протокол SCSI весьма универсален, теоретически с его помощью можно подключить устройство любого типа. Тем не менее, в большинстве случаев SCSI используется для доступа к тем или иным устройствам хранения данных (жёсткие диски, приводы CD и DVD и т. п.). Для примера Mass Storage Device, использующийся в USB-устройствах, является реализацией SCSI поверх USB. Поэтому, кстати, флешки в Linux опознаются как /dev/sdX-устройства. Использующаяся на серверах шина SAS также является реализацией SCSI (собственно, это видно из названия — Serial Attached SCSI).
В iSCSI различаются понятия таргета (target, целевое устройство, осуществляет приём и выполнение запросов) и инициатора (initiator, порождает запросы). В более привычных терминах таргет — это сервер, а инициатор — клиент.
Таргеты и инициаторы бывают разных видов. iSCSI-таргетом может выступать обычный компьютер, сервер или система хранения данных. Инициаторами обычно выступают сетевые карты (в их ROM бывает прошит необходимый код) или software-реализации.
Вариант, предлагаемый ниже, состоит из двух серверов: таргета, который дополнительно к iSCSI-таргету содержит на себе DHCP и tftp-сервер, необходимые для начальной загрузки и инициатора, у которого дисков нет, а есть только сетевая карта.
На таргете желательно использовать LVM для нарезания томов, но можно использовать и обычные файлы.
1. Образ целевой системы
Создадим том размером 16 ГиБ, который будет отдаваться по iSCSI (моя VolumeGroup называется vg00, том будет называться client):
1.1. Разделы и файловые системы
Я люблю и уважаю LVM за его гибкость и удобство в работе, поэтому использую сетап, не требующий таблицы разделов на образе client. Вместо этого сразу на client создаётся еще одна VolumeGroup, которая потом режется на lv-тома.
Создадим файловую систему и разметим раздел под swap:
1.2 Сам образ системы
Примонтируем файловую систему и развернем туда с помощью debootstrap минимальный образ:
Приведем fstab к нужному виду:
Чтобы не оказаться в глупом положении, нужно изменить пароль в новой системе.
Отмонтируем rootfs и деактивируем группу томов, чтобы случайно ее не задеть:
Образ системы готов! Загрузчик ему не нужен, ядро будет запускаться с помощью pxelinux.
2. iSCSI-таргет
Установим userspace-утилиты для управления таргетом:
И запустим утилиту управления таргетом — targetcli:
2.1. Backstore
Находясь в консоли targetcli необходимо выполнить следующие команды:
Таким образом будет создан backstore для нашего тома vg00-client.
2.2. iSCSI
Назначим предварительно созданный backstore этому таргету:
Назначим таргету интерфейс для работы (без указания параметров назначатся все активные интерфейсы):
Настроим права доступа (документация по правам доступа доступна на официальном сайте:
2.3. Сохранение настроек
Несмотря на то, что действия в targetcli выполняются немедленно, они не сохраняются и после перезагрузки все таргеты не вернутся. В этом поведение LIO похоже на поведение любых других ядерных служб (iptables, ebtables, ipvsadm и т. п.). При сохранении настроек targetcli компилирует всю конфигурацию в shell-скрипт, который просто скармливает нужные данные в configFS.
Сохраним все настройки:
Таргет готов! Перейдем к настройке DHCP + TFTP.
3. DHCP-сервер
Предполагаем следующую конфигурацию:
Серверы живут в сети 10.0.0.0/24, таргет живет на 10.0.0.2, клиент получает по DHCP адрес 10.0.0.5.
Мануалов в сети море, поэтому коротко:
4. TFTP-сервер
Опять же, мануалов в сети море.
5. Syslinux
Копируем pxelinux.0 в /var/lib/tftpboot:
Также нам необходим образ ядра (можно взять с хост-системы). Сейчас у меня используется ядро от Ubuntu версии 3.2.0.37:
Дальше нужно собрать правильный initramfs. Для этого нам нужен модуль iSCSI:
Pxelinux будет искать файл с конфигурацией в директории pxelinux.cfg относительно корня tftp-сервера. Создадим ему конфигурацию:
Вместо XX необходимо подставить MAC-адрес сетевой карты client'а, записанный в нижнем регистре через минусы, а не через двоеточия.
Логин и пароль здесь необходимо использовать те же, что были указаны при настройке прав доступа к таргету.
Настройка Syslinux закончена. Теперь можно насладиться загрузкой :)
Мой лог загрузки выглядит примерно так:
Итоги:
Можно вполне использовать iSCSI для загрузки серверов, не имеющих своих дисков (актуально для виртуализации, самопильных систем хранения данных, серверов, которые не должны долго жить и т.п.).
Есть другой вариант, использовать инициатор, встроенный в сетевую карту. Такой подход иногда бывает невозможен по различным причинам (самая банальная — отсутствие необходимого функционала в самой карточке), а также обладает несколько меньшей гибкостью.
Присутствует security-hole, поскольку /proc/cmdline доступен любому желающему в системе и этот любой желающий может получить доступ к экспортированному тому. Поэтому можно на таргете закрыть фаерволом все адреса, кроме необходимого.
Описанная схема — по большей части драфт и основа для инфраструктуры сетевой загрузки.
В этой статье будет описан самый быстрый метод, который позволит добиться следующего результата: загрузить компьютер без жесткого диска и подключиться к терминальному серверу Windows. О том, как довести получившееся решение до идеала, вы прочтете позже.
Пожалуйста, выполняйте инструкции этой статьи в точности так, как написано. Если на каком-то из этапов вы получили не тот результат, который описан в статье, лучше остановиться и найти ошибку. Возможно, стоит обратиться в службу поддержки WTware. Эксперименты ставить и улучшать схему лучше после того, как вы получите действующий стенд.
Загрузка с сетевой карты
Производители сетевых карт никогда не утруждали себя разработкой стандартного протокола управления картой на аппаратном уровне. Они просто выпускали драйвера для Windows, и в большинстве случаев потребителю этого было достаточно.
Для того, чтобы компьютер смог загружаться с CDROM, производителю BIOS нужно написать один драйвер: драйвер ATAPI. И все производители BIOS после появления стандарта ATAPI очень быстро добавили этот драйвер. Поэтому любой новый компьютер сейчас умеет загружаться с CDROM.
Для того, чтобы компьютер смог загружаться с сетевой карты, производителю BIOS нужно написать множество драйверов, по одному для каждой из существующих сетевых карт. Потому что нет единого стандарта, который бы описывал управление сетевой картой на аппаратном уровне, и карты 3com управляются совсем не так, как карты Intel. Ни один производитель BIOS на это не пойдет. Поэтому обычно компьютеры не умеют загружаться с сетевых карт.
Выход из этой ситуации один. Раз микросхемы BIOS на материнских платах не содержат кода управления всеми существующими сетевыми картами, надо каким-то способом добавить в него код управления одной единственной картой. Той, которую мы вставили в компьютер. И этот способ существует.
Любое устройство на шине ISA, а позднее и на шине PCI, может иметь свою микросхему энергонезависимой памяти, в которой будет храниться исполнимый код управления этим устройством. Существуют стандарты оформления этого кода, которые, гласно или негласно, поддерживаются подавляющим большинством BIOS.
Самый распространенный пример такого устройства — карта 3C905C-TX-M от фирмы 3com. На борту карты есть флэш-память объемом 64 килобайта, в которую фирмой 3com записан исполнимый код загрузчика. Над просто вставить эту сетевую карту в компьютер и в настройках BIOS указать, что мы хотим загружаться с сетевой карты.
Повторюсь: BIOS нашего компьютера не знает, как загружаться с сетевой карты 3C905C-TX-M. Правила аппаратного управления этой картой навсегда останутся для него тайной. Зато BIOS нашего компьютера, скорее всего, умеет находить код управления произвольным ISA- или PCI-устройством, размещенный в микросхеме энергонезависимой памяти на самом этом устройстве, и передавать управление компьютером этому коду. Эта микросхема и называется BootROM, а исполнимый код, который в ней записан, обычно называют прошивкой.
На практике в настоящее время используют два типа прошивок: PXE-совместимые и прошивки opensource проекта Etherboot. Прошивки этих двух типов предъявляют разные требования к оформлению загрузочного образа операционной системы. Имеено поэтому при загрузке WTware для карт с PXE-прошивками надо указывать файл wtware.pxe , а для карт с прошивками Etherboot файл wtshell.nbi .
Pre-boot (или Pre-OS) eXecution Environment (среда предзагрузочного выполнения) — спецификация, предложенная фирмой Intel. Такие и только такие прошивки используются производителями при изготовлении сетевых карт и BIOS материнских плат с интегрированными сетевыми картами. Прочитайте документацию к вашему оборудованию чтобы узнать, поддерживает ли оно загрузку по методу PXE. Если ваша сетевая карта или материнская плата уже укомплектованы прошивкой PXE, то никаких дополнительных действий вам делать не придется. Такие сетевые карты и материнские платы сразу после покупки готовы для использования в качестве бездисковых терминалов.
Для некоторых карт (в том числе для всех моделей карт на чипе rtl8139C,D) прошивку можно найти на сайте фирм-производителей чипсетов. Эту прошивку нужно самостоятельно прошивать в микросхему BootROM. Подробности этого процесса описаны ниже.
Если для вашей сетевой карты производитель не сделал прошивку, то единственным решением будет использование прошивок Etherboot.
А можно проще?
Да, если в этом списке есть люди из вашего города. Свяжитесь с ними, за некоторую компенсацию они помогут.
Однажды к нам пришли (ну, не сами. ) серверы с 14 хардами по 2Тб. Избавившись от аппаратного рейда (зачем — вопрос отдельный), мы задумались о том, что неплохо бы сделать для них загрузку по сети, дабы избавиться от возни с разделами. Диски предполагалось экспортировать по iSCSI, и не хотелось выделять какие-то диски на Особенные Системные Диски, а какие-то на всё остальное. Таким образом возникла задача сделать загрузку по сети с размещением корневого каталога в оперативной памяти.
Теория
По сути, для того, чтобы система загрузилась ей необходимо 3 компонента — ядро, начальное окружение initramfs и корневой каталог, в котором система будет работать.
Практика
Все действия проводятся на машине с ubuntu precise.
Для начала настроим PXE. Мануалов на эту тему уйма, поэтому я расскажу только самую суть.
Ставим ваш любимый dhcp сервер, например isc-dhcp-server, который будет раздавать машинкам ip адреса и указывать путь к файлу pxelinux.0, который будет отдавать tftp сервер (tftp-hpa или же atftp).
Пример конфига dhcp сервера. В примере pxe-сервер находится по адресу 10.0.0.1.
Запускаем tftp сервер (в ubuntu он имеет init-скрипт, но вполне вероятно, что вам придется запускать его и через inetd/xinetd).
Проверяем работоспособность. Кладем файл в каталог /var/lib/tftpboot и пробуем стянуть его tftp клиентом.
В принципе неважно, где вы возьмете файл pxelinux.0, так как он является просто начальным загрузчиком, в который мы передаем то, что надо грузить дальше.
Вы можете сделать красивую менюшку в загрузчике, но сейчас нам это не нужно, поэтому мой pxelinux.cfg/default выглядит так
rootfs
Образ rootfs собираем через debootstrap, чрутимся в него и ставим необходимые программы. Настраиваем сеть, hostname, фаервол и прочее, чем больше сделаем настроек, тем больше будет образ. Главное не забудьте сменить пароль на рута.
С нашим минимальным набором система получилась весом 200Мб.
Initramfs
В этом примере мы будем забирать образ корневой фс с веб-сервера, расположенного на нашем сервере сетевой загрузки, то есть на 10.0.0.1. Решение было таким просто потому, что в нашем initramfs была утилита wget. Чтобы не тянуть большой объем данных по сети, мы решили сжать образ. Это можно было бы сделать и обычным tar, но можно попробовать squashfs, тем более, что обычно в initramfs tar не встроен, с другой стороны, ничего не мешает его туда добавить.
Squashfs
Squashfs — это сжимающая файловая система, которая включена в ядро с версии 2.6.29. С ее помощью можно заархивировать каталог, примонтировать на loop устройство и читать с него, для записи же необходимо провести процедуру добавления файлов в архив. Так как при обращении к squashfs, вы читаете из архива, то это дает дополнительную нагрузку на cpu.
Для более эфферктивного сжатия вы можете использовать опцию -comp, чтобы установить тип сжатия, по умолчанию используется gzip.
Далее надо научить init из initramfs забирать образ корня и помещать его в оперативную память.
init в initramfs — это скрипт на sh, который производит разбор опций из cmdline, монтирует фс, делает switch_root и запускает гланый init-процесс системы.
Воспользуемся этим и допишем свои опции для cmdline. Напишем скрипт ram, который будет вызываться при значении опции boot=ram.
Через параметр rooturl можно указывать откуда качать образ корневой фс. Для работы со squashfs необходимо подгрузить ее модуль в ядро. Указываем в /etc/initramfs-tools/initramfs.conf BOOT=ram и пересобираем initramfs
Включаем машинку, на которой будем тестировать, и смотрим на происходящее. После успешной загрузки мы получили бездисковую систему, которая занимает в памяти около 300Мб, при этом мы может писать в нее, но после ребута, система вернется в свое первоначальное состояние.
В это примере, мы использовали squashfs просто для сжатия образа, но почему бы нам не попробовать примонтировать корневой раздел в squashfs и не посмотреть, что получится? Меняем наш скрипт, в функции do_rammount() оставляем только монтирование squashfs.
Пересобираем initramfs, запускаем, смотрим. Система загружается в режиме ro, но зато занимает в памяти всего около 180Мб.
В каких-то случаях монтирование в режиме ro это хорошо, но нас это не устраивает, но и просто так тратить оперативную память нам тоже не хочется. Выход же был найден при помощи Aufs.
Aufs
Aufs позволяет делать каскадно-объединённое монтирование файловых систем — одну в режиме только на чтение, а вторую в rw. Работает она в режиме copy-on-write, то есть все изменения записываются на rw систему и после этого чтение производится с нее же.
Опять переписываем наш скрипт.
В фукнцию mountroot() добавляем
А фукнцию do_rammount() приводим к следующему виду:
Пересобираем initramfs, запускаем, смотрим. Система занимает в памяти 181Мб, при этом мы можем менять ее, писать, читать. Все изменения хранятся отдельно в /mnt/rw, а сама система хранится в /mnt/ro.
В результате мы получили систему, которая грузится по сети, занимает небольшой объем в памяти, при этом после каждой перезагрузки пропадают все изменения (поэтому надо заранее собирать все нужные продукты жизнедеятельности системы в надежное место).
Все вышеперечисленные способы имеют право на жизнь. Надеюсь, что эта информация вам пригодится, а мне же будет интересно почитать/послушать ваши комментарии.
Спасибо за внимание.
Написанию данного поста предшествовало сбор информации по частям и многочасовое курение как русскоязычных, так и англоязычных ресурсов в сети интернет в поиске сравнительно простых способов реализации бездисковой загрузки ПК.
Предпосылкой к изучению данного вопроса стало наличие в сети компьютера, с вышедшем из строя дисковым накопителем. Необходимо было запустить на данном ПК «полноценную» 64-битную операционную систему Windows 7 без использования Linux-сервера, ограничившись только имеющимися в локальной сети Windows системами. Приводимые в данном посте программные продукты распространяются бесплатно и могут работать как на серверных, так и на пользовательских версиях Windows.
- iSCSI (англ. Internet Small Computer System Interface) — протокол, который базируется на TCP/IP и разработан для установления взаимодействия и управления системами хранения данных, серверами и клиентами;
- iSCSI Target: (Цель iSCSI) — программа или аппаратный контроллер (HBA), осуществляющие эмуляцию диска и выполняющие запросы iSCSI;
- iSCSI Initiator: (Инициатор iSCSI) — клиентская программа или аппаратный контроллер, который взаимодействует с iSCSI Target;
- IQN: (iSCSI Qualified Name) — уникальный идентификатор (имя) iSCSI Target’a или iSCSI Initiator’а;
- LUN: (Logical Unit Number) — адрес блочного устройства в диапазоне 0-127;
- DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической настройки узла) — сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP;
- TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется главным образом для первоначальной загрузки бездисковых рабочих станций.
Подбираем нужную прошивку Etherboot
Для ISA-карт подобрать прошивку иногда достаточно сложно. Большинство встречающихся ISA-карт поддерживаются прошивкой ne . Некоторые карты поддерживаются только прошивкой ne более старых версий Etherboot — 5.0.x. На сайте rom-o-matic можно получить прошивки и этих версий. В самых сложных случаях следует воспользоваться базой знаний о картах, которая также доступна на сайте rom-o-matic.
- Скачиваем образ дискеты etherinst-0.1.zip, распаковываем архив.
- Записываем на дискету программой rawwrite. Должна получиться дискета, которая будет читаться из Windows.
- Загружаем терминал с этой дискеты и в меню выбираем пункт "Show PCI ID of network card". Программа укажет PCI ID карты, установленной в компьютере.
На сайте rom-o-matic в поле "Choose NIC/ROM type" возле каждой из PCI-карт указаны такие же два числа, PCI ID карты, для которой подходит этот драйвер. Остается только найти в списке ту карту, PCI ID которой совпадает с вашим.
Установка ОС Windows 7
Перед началом установки Windows 7 на бездисковую станцию открываем его BIOS и настраиваем порядок опроса загрузочных устройств следующим образом:
1) Hard Disk
2) Network
3) CD/DVD
4) остальные устройства
Если на ПК имеется установленный жесткий диск, то на время установки Windows его желательно отключить, чтобы компьютер не пытался с него загружаться.
Далее размещаем в приводе CD/DVD установочный диск Windows 7 и перезагружаем компьютер.
Первым делом мы должны увидеть запуск загрузки через PXE. Если этого не произошло то снова заходим в BIOS и разрешаем загрузку компьютера через сетевой адаптер.
Далее на экране появиться загрузочное меню PXELINUX. Если этого не произошло проверяем, запущена ли на другом компьютере программа Tftpd32, правильно ли она настроена и не блокирует ли его работу firewall-ы, антивирусы или другие программы.
После выбора необходимого пункта загрузочного меню PXELINUX мы должны увидеть запуск iPXE.
В процессе инициализации iPXE должны промелькнут надписи:
Registered as BIOS drive 0x80
Booting from BIOS drive 0x80
Это значит, что ПК удачно подключился к iSCSi диску.
Затем мы увидим ошибку загрузки через iSCSi диск, после чего компьютер перейдет к опросу следующего загрузочного устройства и запустит установка Windows 7 с привода CD/DVD. При этом подключение к iSCSi диску останется активным — за это отвечает указанная в скрипте строчка set keep-san 1.
В процессе установки Windows, на этапе выбора дискового устройства мы должны увидеть подключенный нами iSCSi диск. Если iSCSi диск в списке отсутствует, значит установщик Windows не смог автоматически подключить необходимые драйвера для сетевой карты. В этом случае скачиваем с сайта разработчика необходимые драйвера сетевой карты и подключаем их установщику Windows. После этого iSCSi диск должен появиться в списке.
В этом случае первым делом проверьте в BIOS порядок опроса загрузочных устройств. Жесткий диск должен находиться на первой позиции, даже если на компьютере физически не установлен дисковый накопитель.
Если проблема не исчезла, то попробуйте в BIOS-е включать/выключать SATA контроллер, менять режим его работы IDE, ACHI, либо подключить реальный диск на время установки, но установку проводить на iSCSI диск.
После выбора дискового устройства начнется установка Windows 7. Дальше никаких трудностей возникнуть не должно. После установки мы получаем «полноценную» операционную систему Windows 7, работающей на iSCSI диске.
Инструкция:
-
, образ дискеты с универсальным загрузчиком Etherboot.
- Последнюю версию утилиты tftpd32 с сайта разработчика. .
2. Записываем программой rawwrite образ загрузчика eb-net.dsk на дискету. Загружаем терминал с этой дискеты (стрелка на схеме). Сначала на экране будет следующий текст:
Затем загрузчик попытается обнаружить сетевую карту. Если ему это удастся, то он произведет запрос к dhcp-серверу (стрелка на схеме) и появится надпись "Searching for server (DHCP). ":
3. Делаем dhcp-сервер. Для загрузки по сети должны работать две службы - dhcp и tftp. На начальном этапе проще всего использовать утилиту tftpd32. Она обладает всей необходимой функциональностью, проста в установке и настройке, ведет журнал запросов.
Если у вас в сети уже есть dhcp-сервер, то необходимо настроить именно его, а не создавать новый dhcp-сервер. В одном сегменте сети Ethernet не может одновременно работать два dhcp-сервера.
Для Microsoft dhcp, входящего в дистрибутив Windows, нужно указать два параметра: 066 (Boot Server Host Name), задать ip-адрес tftp-сервера, и 067 (Bootfile Name), задать значение wtshell.nbi
Для unix-сервера dhcpd от ISC в конфигурационный файл dhcpd.conf надо добавить такие волшебные слова:
next-server ip-адрес-tftp-сервера;
filename "wtshell.nbi";
Основное окно tftpd32 настраиваем так:
В поле Server Interfaces должен быть указан ip-адрес той сетевой карты сервера, которая смотрит на терминал. В поле IP pool starting address указываем начало блока незанятых ip-адресов сети, в которой находятся терминал и сервер, Size of pool — размер этого блока (укажите хотя бы 10), Boot File — wtshell.nbi, Mask — маску сети, в которой находятся терминал и сервер.
Settings tftpd32 настраиваем так:
4. Перезагружаем терминал. На закладке tftp утилиты tftpd32 при этом появится примерно такой текст:
А на экране терминала должны добавиться такие строчки:
Первые две строки соответствуют стрелке на схеме. Последняя строка — запрос на загрузку WTware на терминал (стрелка на схеме).
Дальше терминал скажет "TFTP error 1 (File not found). Пока так и должно быть.
А на экране терминала - такая картинка:
Загрузка терминала по сети прошла успешно, выполнена стрелка схемы.
Еще раз перезагружаем терминал. На экране терминала должна появиться такая картинка:
7. Проверяем работу драйвера видеокарты. Запустите первый пункт меню, "Проверить видеокарту". На экране терминала должна появиться такая картинка:
Последовательность цветов должна быть именно такой. Белый логотип "WTware должен двигаться при перемещении мыши.
8. Проверяем сеть. Из меню запускаем команду "Проверить сеть и связь с сервером". На экране терминала должна появиться такая картинка:
Естественно, должен быть указан ip-адрес вашего терминального сервера, тот, который вы указали параметром win2kIP в конфигурационном файле default.wtc
9. Подключаемся к терминальному серверу. Из меню запускаем команду "Подключиться к терминальному серверу". На экране терминала должно появиться окошко с приглашением ввода пароля для входа в Windows.
Результат достигнут: компьютер загрузился без жесткого диска, можно работать с терминальным сервером Windows. Готов работающий стенд. Теперь можно вносить изменения в схему, чтоб сделать ее более удобной и функциональной. Читайте следующую статью!
История вопроса
В каждом персональном компьютере есть микросхема памяти, которая не теряет своего содержимого при выключении питания. На этой микросхеме записаны исполнимые коды базовой системы ввода-вывода компьютера, BIOS. Во все времена исполнимый код BIOS решал одну задачу: загрузить в память исполнимый код операционной системы.
Раньше BIOS умел работать только с дисководами. Он загружал первые 512 байт с дискеты с операционной системой и дальше выполнял служебные функции, компьютером же управляла операционная система, заголовок которой по стандарту содержался в этих 512 байтах.
Затем в компьютерах появились жесткие диски, а в настройках BIOS дополнительный пункт меню, определяющий, откуда BIOS должен загружать операционную систему: с дискеты или с жесткого диска.
Далее добавились возможности загрузки с CDROM, ZIP, USB карт памяти. У всех этих устройств есть одна общая черта: интерфейс работы с ними на аппаратном уровне описывается стандартом. И если код в BIOS умеет грузиться с одного CDROM, поддерживающего стандарт ATAPI, — он сможет загрузиться с любого другого, также поддерживающего этот стандарт.
Эмулятор BootROM напрямую с жесткого диска (без ОС)
Если возникают сложности с записью BootROM, то его эмулятор можно разместить на жестком диске или IDE-Flash, установленном в терминале.
ВНИМАНИЕ: все содержимое этого диска будет уничтожено!
- Скачиваем образ дискеты etherinst-0.1.zip, распаковываем архив.
- Записываем на дискету программой rawwrite. Должна получиться дискета, которая будет читаться из Windows.
- Выбираем прошивку на сайте rom-o-matic так, как описано выше.
- Просим rom-o-matic сделать нам "LILO/GRUB/SYSLINUX loadable kernel format (.zlilo)", сохраняем полученный файл на дискету под именем loader.
- Устанавливаем в терминал жесткий диск/IDE Flash-диск, указываем его в BIOS'е.
- Загружаем терминал с этой дискеты. Ни в коем случае не загружайте с нее компьютер, на жестком диске которого находятся какие-то важные данные, так как все данные на жестких дисках будут уничтожены.
- Выбираем в меню первый пункт: "1: Prepare hard disk". После выполнения компьютер должен автоматически перегрузиться.
- После перезагрузки выбираем в меню второй пункт: "2: Install Etherboot". Согласитесь форматировать диск, нажмите Enter на вопрос о VOLUME LABEL.
- Перегружаем компьютер, указываем BIOS'у грузиться с диска С.
После этого терминал должен загружаться с жесткого диска, автоматически запуская эмулятор BootROM, и загружать по сети образ WTware.
Эмулятор BootROM на загрузочной дискете
- В большинстве случаев можно использовать образ дискеты с универсальным загрузчиком: eb5_4_0.zip.
- Если универсальный загрузчик не определит вашу сетевую карту, придется выбрать прошивку на сайте rom-o-matic так, как описано выше. Просим rom-o-matic сделать нам "Floppy bootable ROM Image", сохраняем полученный файл.
- Записываем на дискету программой rawwrite.
Теперь с этой дискеты можно загружать компьютер с этой сетевой картой.
Настройка PXELINUX
В папке программы Tftpd32 создаем вложенную папку pxelinux.cfg, а в нем создаем файл default следующего содержания:
default menu.c32
gfxmenu /erdpxe
prompt 0
LABEL Windows 7 64bit
MENU DEFAULT
KERNEL IPXE.KRN
INITRD win7.ipxe
Думаю излишнем писать подробный комментарий к данному файлу, рассмотрим только две последние строчки:
KERNEL IPXE.KRN — указывает на ядро iPXE, которую нужно загрузить.
INITRD win7.ipxe — указывает на файл скрипта с параметрами iPXE
Указанных настроек PXELINUX вполне достаточно для использования дефолтной конфигурации и можно перейти к дальнейшей настройке iPXE, поэтому остающуюся часть текста решил убрать под спойлер.
Если в сети существует несколько бездисковых рабочих станций, и нужно чтобы каждый ПК имел доступ только «к своему» iSCSI-диску и не имел доступа к «чужим» дискам, то нам нужно будет создать несколько файлов с загрузочным меню для каждого ПК.
Соответственно, для каждой бездисковой рабочей станции нам нужно написать «свое» загрузочное меню и разместить в папке pxelinux.cfg с названием файла 01-mac-адрес клиента, в нижнем регистре. Содержимое этих файлов может отличаться, к примеру, только последней строчкой INITRD win7.ipxe.
Эмулятор BootROM из DOS и Windows Command Prompt
- Выбираем прошивку на сайте rom-o-matic так, как описано выше.
- Просим rom-o-matic сделать нам "DOS Executable ROM Image (.COM)", сохраняем полученный файл.
Этот файл можно запускать из командной строки DOS или Windows Command Prompt
Иногда необходимо оставить возможность загружать Windows, и при этом работать с WTware. Можно организовать меню при загрузке Windows 9x, из которого пользователь будет выбирать загрузку машины как WTware-терминала или загрузку локальной копии Windows 9x. Пример меню, файл config.sys:
[menu]
menuitem=Windows
menuitem=WTware
[Windows]
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\emm386.exe
device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=007,866,C:\WINDOWS\COMMAND\country.sys
[WTware]
DOS=NOAUTO
В файл msdos.sys в секции [Options] добавить строку:
Эта строка отключит графическую заставку загрузки Windows 9x. На некоторых видеокартах это необходимо сделать для корректного запуска WTware.
Инициатор iSCSI. Настройка iPXE
Строка dhcp net0 данного скрипта указывает, что необходимо получить настройки через DHCP сервер в сети.
Строка set keep-san 1 указывает, что подключение к iSCSI Target-у необходимо сохранить даже если загрузка с данного устройства не удалась (этот параметр необходим, когда нужно устанавливать операционную систему с накопителей CD/DVD).
Последняя строка непосредственно подключает указанный iSCSI Target, инициализирует удаленный диск и передает процесс дальнейшей загрузки на данное устройство. Синтаксис подключения будет таким iscsi:. .
Если мы хотим добавить в загрузочное меню еще один пункт, например, для загрузки ОС Windws 8.1, то создаем в StarWind Virtual SAN новый Target с указанием IQN цели iqn.2014-11.home:windows8.1, добавляем в него новое дисковое устройство iSCSI, а затем в файле pxelinux.cfg/default добавляем к примеру такие строчки:
LABEL Windows 8.1
KERNEL IPXE.KRN
INITRD win8.1.ipxe
Делаем свою микросхему BootROM
Что делать, если производитель нашей карты не встроил в нее микросхему энергонезависимой памяти, но мы все-таки хотим избавить наш компьютер от винчестера и прочих крутящихся устройств, сделать его бездисковым и научить загружаться по сети? Встроить в него эту микросхему самостоятельно!
Наша практика позволяет сделать такой вывод: разбираться в теории BootROM стоит, если надо сделать хотя бы 10-20 бездисковых терминалов. Если терминалов предполагается меньше, то дешевле заменить имеющиеся сетевые карты на карты, которые изначально умеют загружать компьютер, например, упомянутые 3C905C-TX-M от 3com, либо обратиться за помощью к специалистам.
Самыми дешевыми и вполне доступными в любом магазине радиодеталей являются однократно программируемые микросхемы (ПЗУ, EPROM) серии 27C256. 27 означает "однократно программируемая", 256 - размер памяти в килобитах, т.е. 32 килобайта. До и после серии производители могут дописывать дополнительные символы. Например, микросхемы фирмы Atmel, которые используем мы, полностью называются AT27C256R. Микросхемы должны быть в DIP-корпусе (параллелепипед размером примерно 12x36x3 миллиметра с 28 ногами), это важно.
Микросхемы дополнительно характеризуются по классу условий эксплуатации ("коммерческие", "индустриальные", "военные" и другие). Для использования в качестве BootROM подойдут микросхемы любого класса.
Еще один параметр — время доступа. Осмелюсь утверждать, что для использования в качестве BootROM подойдут микросхемы с любым временем доступа. Просто потому, что нам ни разу не встречалось на практике проблем, с этим связанных.
Сетевая карта должна иметь колодку для установки микросхемы. Колодки могут быть на 28, 32 или даже 34 ноги. Нет колодки — нет бездискового терминала.
Далее, необходим программатор. Это специальное устройство, которое умеет прошивать микросхемы. Программаторы заводского изготовления стоят от $100, сделанные радиолюбителями встречаются на радиорынках за треть этой суммы. Нам никогда не встречались программаторы, которые бы не умели прошивать микросхемы 27C256, это наиболее простая из возможных микросхем. Программаторы подключаются к компьютеру через порт COM или LPT. В комплекте с программатором идет программное обеспечение и инструкция по эксплуатации.
Можно обойтись без программатора. Этот вариант пока не до конца проработан, и иногда появляются новые проблемы.
Далее, необходимо выбрать прошивку. Все в точности так же, как описано выше, только получить надо "Binary ROM Image". Если получится файл размером 16 килобайт — надо приклеить файл к нему же самому, чтоб размер увеличился в два раза.
Далее читаем инструкцию про программатор и прошиваем микросхему. Устанавливаем микросхему на сетевую карту. Не забудьте, что метка на микросхеме должна находиться с той же стороны, что и метка на колодке. Если в колодке больше 28 дырок — все пустые дырки должны оставаться со стороны меток на микросхеме и колодке. Устанавливаем карту в компьютер. Включаем.
Не работает? Действуем по списку:
1. Находим на дискете, прилагавшейся к сетевой карте или на сайте производителя, утилиту-конфигуратор. Обычно эта утилита запускается только из-под чистого DOS. Грузимся с загрузочной DOS-дискетки, запускаем конфигуратор, находим опцию, разрешающую использовать BootROM. Разрешаем. Перезагружаемся.
2. Обновляем BIOS материнской платы. Внимательно читаем описание настроек BIOS и ищем, что там отвечает за загрузку с сетевой карты. Иногда попадаются загадочные настройки, например, на одном из моих Fujitsu надо было опцию "Boot" установить в значение "Legal". Перезагружаемся.
3. Достаньте микросхему из карты, засуньте обратно в программатор и попытайтесь прочитать ее содержимое. Должно прочитаться именно то, что вы туда записывали.
4. Возможно, компьютер патологически не умеет грузиться с сетевой карты? Найдите карту 3c905c-tx-m и попробуйте загрузиться с нее. Если компьютер откажется — в морг этот компьютер, придется использовать другой.
5. Все еще не работает? Бывает и такое, особенно с экзотическими картами. Попробуйте с другой картой. Самая хорошая карта для установки BootROM — любая на чипе RTL8139C или RTL8139D. Они всегда работают.
Начальные условия:
- Имеется сервер с операционной системой Windows 2003 Server (также возможна работа с Windows 2000 Server + сервиспак 4 или Windows NT 4.0 Terminal Server + сервиспак 6), на котором работает служба терминалов. Пожалуйста, убедитесь, что подключение к службе терминалов стандартным клиентом от Microsoft проходит успешно.
- Имеется терминал - компьютер, удовлетворяющий требованиям из списка совместимости оборудования.
- Терминал и сервер соединены локальной сетью.
- В сети имеется запущенный и активированный сервис лицензирования служб терминалов. В некоторых случаях без этого сервиса служба терминалов отказывается принимать соединения от терминалов WTware. Настройка сервера лицензирования служб терминалов описана в этой статье (это та служба, по вине которой терминальный сервер перестает принимать подключения от любых клиентов после окончания 90-дневного периода)
Существует множество способов выполнить загрузку по сети. Суть всех способов одна и та же: во время загрузки на терминале должен выполниться некий исполнимый код загрузчика, микропрограммы, дополняющей BIOS компьютера.
В рамках этой статьи мы будем использовать загрузчик Etherboot на дискете. В дальнейшем вы сможете отказаться от дискеты, но для начальной настройки это самый простой вариант.
Загрузка по сети происходит следующим образом:
Настройка программы Tftpd32
Данная программа довольно простая и интуитивно понятная, поэтому приведу просто скриншоты своих настроек:
На вкладке «GLOBAL» у меня отмечены галочкой сервисы TFTP Server, Syslog Server и DHCP Server. На вкладке TFTP в поле Base Directory указана точка, которая означать, что в качестве корневой директорией будет использоваться папка, куда установлена сама программа Tftpd32. На вкладке DHCP в поле Boot File указан название загружаемого файла, которую мы рассмотрим дальше в настройках PXELINUX. На вкладке SYSLOG настройки не требуются.
Введение
Современные операционные системы Windows 7, Windows Server 2008 и всё, что старше, умеют подключаться напрямую на iSCSI target. Проблема только в том, как инициализировать удаленное блочное устройство при включении ПК.
Вспомним, что почти все современные сетевые карты умеют загружаться по технологии PXE. А вот с iSCSI дружат в основном только дорогостоящие серверные сетевые карты, например Intel. Однако, существует как минимум два open source проекта gPXE и iPXE позволяющий при загрузке ПК подключаться iSCSI устройствам. Последний, к слову, форк первого, с немного доработанной системой вывода ошибок и дополнительными опциями.
Есть много способов, как загружаться через gPXE и iPXE. В данном посте мы будем рассматривать загрузку с использованием iPXE и подключением для него необходимых скриптов в процессе загрузки.
Суть такова — при запуске компьютера сетевая карта получает необходимые настройки через DHCP сервер и загружает PXELINUX. Далее загрузчик PXELINUX подключает необходимый скрипт и загружает iPXE, который, в свою очередь, выступает iSCSI инициатором и передает управление диску. До момента инициализации блочного устройства передачу файлов по сети обеспечивает протокол TFTP.
Некоторые могут спросить — а для чего загружать PXELINUX? Во первых, через PXELINUX загрузчик iPXE получает необходимый скрипт для инициализации нужного iSCSI target-а. Во вторых, чтобы можно было построить удобное меню с выбором различных вариантов загрузки. В третьих, если в сети существует несколько бездисковых рабочих станций, то нужно чтобы каждый ПК подключался «к своему» iSCSI-диску и не имел доступа к «чужим» дискам, а значит их нужно как то отделять друг от друга, например, по MAC-адресам. Для этих целей будет использоваться двухстадийная загрузка с использованием PXELINUX.
Читайте также: