Да, это очень возможно. Тип системы, которую вы можете загрузить, будет зависеть от того, как работает эта система.
Обычно вы обнаружите, что очень простые системы (такие как DOS или Win98) и очень сложные системы (такие как современные дистрибутивы Linux) легко загружаются по сети.
Способ достижения этого в двух типах систем очень различен.
Давайте рассмотрим оба способа более подробно. Я предполагаю, что вы уже настроили загрузочный сервер PXE ; если вы этого не сделаете, сделайте это, это довольно легко.
Я также предполагаю dnsmasq
установку на сервере Linux с включенным tftproot /var/lib/tftpboot
, но вы должны быть в состоянии адаптировать инструкции к любой другой настройке.
Для простых систем
Для простых систем вы просто загружаете образ (ISO) в ОЗУ и обманываете систему, полагая, что это фактическая единица. Это делается с помощью небольшой помощи BIOS и программного модуля memdisk .
Система, которую вы хотите загрузить по сети, это:
# /var/lib/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
PROMPT 0
TIMEOUT 0
MENU DEFAULT freedos
LABEL freedos
MENU LABEL FreeDOS
KERNEL /syslinux/memdisk
INITRD /freedos.iso iso
Вот и все. Первые несколько строк - это шаблон меню; важными битами являются последние четыре строки: загрузить memdisk с заданным ISO.
Для сложных систем
Современные системы с такими интересными вещами, как хорошее управление памятью и правильное обнаружение аппаратного обеспечения, в значительной степени игнорируют все, что говорит BIOS.
Это делает memdisk
использованный выше подход в значительной степени бесполезным, потому что если вы загрузили ISO таким образом, как только ядро было прочитано из ISO и загружено в память (это выполняется загрузчиком в ISO; загрузчики обращают внимание на BIOS) данные ISO исчезли бы.
Что вы делаете тогда? Ну, на самом деле вы не загружаете ISO из сети, а вместо этого говорите системе, что она может получить доступ к требуемым файлам оттуда.
Для систем Linux извлеките содержимое ISO где-нибудь в tftproot и загрузите ядро и initrd напрямую, а затем предоставьте им возможность найти корневую файловую систему и смонтировать ее.
Вот пример использования удивительного компакт-диска System Rescue . Я фактически извлек весь ISO в корень TFTP-сервера, потому что он вписывается в мою структуру каталогов, поэтому ядра находятся в нем /syslinux
.
# /var/lib/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
PROMPT 0
TIMEOUT 0
MENU DEFAULT sysrescd64
LABEL sysrescd64
MENU LABEL 1) SysResCD 4.2.0 (x64)
KERNEL /syslinux/rescue64
APPEND setkmap=us nomodeset netboot=nbd://pxe:sysrcd.dat
INITRD /syslinux/initram.igz
Самый важный бит здесь - APPEND
линия. Видите netboot=
в конце? Так ОС знает, где находится ее корневая файловая система. Синтаксис есть <protocol>://<server>:<path>
.
Я удобно установил DNS-имя pxe
для своего сервера. Если у вас его нет, вы бы использовали IP-адрес для сервера.
Кроме того, sysresccd является одним из самых простых, потому что он использует образ squashfs для своей корневой файловой системы, который может быть легко загружен и загружен в ОЗУ любым способом. Здесь я использую nbd; Вы также можете использовать tftp, nfs и http .
Для других дистрибутивов, таких как Ubuntu, я думаю, что вы можете использовать только nfs.
Для систем Windows это немного сложнее сделать . Схема:
- Установить Windows 7 в общую папку на сервере
- Иметь полноценную среду Windows PE на сервере в корне TFTP
- Пусть клиентский компьютер загрузит WinPE по сети и нажмите, F12чтобы получить командную строку
- Сопоставить общую папку с установкой Windows 7 с буквой диска
- Начать установку из сопоставленной папки
Я никогда не пробовал это, и кажется, что это не работает для некоторых людей. Для версий NT старше Vista я думаю, что это даже невозможно. Для Windows, предшествующей NT (95, 98, ME и т. Д.), Вы можете использовать подход с использованием memdisk, но их загрузка вредна для вашего здоровья :-p