Sí, es muy posible. El tipo de sistema que puede iniciar dependerá de cómo funcione dicho sistema.
Por lo general, encontrará que sistemas muy simples (como DOS o Win98) y sistemas muy complejos (como las distribuciones modernas de Linux) se pueden arrancar fácilmente a través de la red.
La forma de lograr esto en los dos tipos de sistemas es muy diferente.
Veamos ambas formas con más detalle. Supongo que ya tiene una configuración de servidor de arranque PXE ; si no lo haces, adelante y hazlo, es bastante fácil.
También estoy asumiendo una dnsmasq
configuración en un servidor Linux con el tftproot /var/lib/tftpboot
, pero debería poder adaptar las instrucciones a cualquier otra configuración.
Para sistemas simples
Para sistemas simples, simplemente carga la imagen (ISO) en la RAM y engaña al sistema para que crea que es una unidad real. Esto se hace con un poco de ayuda del BIOS y un módulo de software llamado memdisk .
El sistema que desea cargar a través de la red es freedos:
# /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
Eso es practicamente todo. Las primeras líneas son menú repetitivo; los bits importantes son las últimas cuatro líneas: cargar memdisk con el ISO dado.
Para sistemas complejos
Los sistemas modernos con elementos sofisticados como una buena administración de memoria y una detección de hardware adecuada ignoran prácticamente todo lo que el BIOS tiene que decir.
Esto hace que el memdisk
enfoque utilizado anteriormente sea bastante inútil, porque si cargó el ISO de esa manera, una vez que el núcleo se leyó del ISO y se cargó en la memoria (el gestor de arranque lo hace en el ISO; los gestores de arranque prestan atención al BIOS) , los datos ISO se habrían ido.
¿Que haces entonces? Bueno, en realidad no carga el ISO desde la red, sino que le dice al sistema que puede acceder a los archivos requeridos desde allí.
Para sistemas Linux, extraiga el contenido ISO en algún lugar de tftproot y cargue el kernel y el initrd directamente, luego deje que ellos encuentren el sistema de archivos raíz y lo monten.
Aquí hay un ejemplo usando el sorprendente CD de System Rescue . De hecho, extraje todo el ISO en la raíz del servidor TFTP, porque encaja perfectamente con la estructura de mi directorio, por lo que los núcleos están dentro /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
Lo más importante aquí es la APPEND
línea. Ver netboot=
al final? Así es como el sistema operativo sabe dónde está su sistema de archivos raíz. La sintaxis es la siguiente <protocol>://<server>:<path>
.
Había configurado convenientemente un nombre DNS pxe
para mi servidor. Si no tiene eso, usaría una dirección IP para el servidor.
Además, sysresccd es uno de los más fáciles porque utiliza una imagen squashfs para su sistema de archivos raíz, que se puede descargar y cargar fácilmente en la RAM con cualquier método. Aquí uso nbd; También puede usar tftp, nfs y http .
Para otras distribuciones, como Ubuntu, creo que solo puedes usar nfs.
Para los sistemas Windows es un poco más complejo de hacer . El esquema es:
- Tener una instalación de Windows 7 en una carpeta compartida en el servidor
- Tenga un entorno completo de Windows PE en el servidor en su raíz TFTP
- Haga que la máquina cliente cargue el WinPE a través de la red y presione F12para obtener un símbolo del sistema
- Asigne la carpeta compartida con la instalación de Windows 7 a una letra de unidad
- Inicie la instalación desde la carpeta asignada
Nunca he intentado esto, y parece que no funciona para algunas personas. Para las versiones de NT anteriores a Vista, creo que ni siquiera es posible. Para Windows anterior a NT (95, 98, ME, etc.) puede usar el enfoque memdisk, pero arrancarlos es malo para su salud :-p