Tak, to bardzo możliwe. Typ systemu, który można uruchomić, zależy od tego, jak działa ten system.
Zazwyczaj przekonasz się, że bardzo proste systemy (takie jak DOS lub Win98) i bardzo złożone systemy (takie jak współczesne dystrybucje Linuksa) można łatwo uruchomić przez sieć.
Sposób osiągnięcia tego na dwóch typach systemów jest bardzo różny.
Zobaczmy obie strony bardziej szczegółowo. Zakładam, że masz już konfigurację serwera rozruchowego PXE ; jeśli tego nie zrobisz, zrób to, to całkiem proste.
Zakładam również dnsmasq
konfigurację na serwerze Linux z włączonym tftproot /var/lib/tftpboot
, ale powinieneś być w stanie dostosować instrukcje do dowolnej innej konfiguracji.
Dla prostych systemów
W przypadku prostych systemów wystarczy załadować obraz (ISO) do pamięci RAM i oszukać system, że jest to rzeczywista jednostka. Odbywa się to z niewielką pomocą BIOS-u i modułu oprogramowania o nazwie memdisk .
System, który chcesz załadować przez sieć, to 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
To właściwie tyle. Pierwsze kilka wierszy to płyta menu; ważnymi bitami są ostatnie cztery linie: załaduj pamięć z danym ISO.
Do złożonych systemów
Nowoczesne systemy z fantazyjnymi funkcjami, takimi jak dobre zarządzanie pamięcią i odpowiednie wykrywanie sprzętu, ignorują wszystko, co ma do powiedzenia BIOS.
To sprawia, że memdisk
powyższe podejście jest prawie bezużyteczne, ponieważ jeśli załadowałeś ISO w ten sposób, po odczytaniu jądra z ISO i załadowaniu do pamięci (robi to bootloader w ISO; bootloadery zwracają uwagę na BIOS) , dane ISO zniknęłyby.
Co wtedy robisz Cóż, tak naprawdę nie ładujesz ISO z sieci, ale zamiast tego mów systemowi, że może uzyskać dostęp do wymaganych plików z tego miejsca.
W przypadku systemów Linux rozpakuj zawartość ISO gdzieś w tftproot i załaduj jądro i initrd bezpośrednio, a następnie pozostaw to im, aby znaleźć główny system plików i zamontować go.
Oto przykład użycia niesamowitej płyty CD Rescue System . Właściwie wyodrębniłem cały ISO do katalogu głównego serwera TFTP, ponieważ jest on zgodny z moją strukturą katalogów, więc jądra są włączone /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
Najważniejszy jest tutaj APPEND
wiersz. Widzisz netboot=
na końcu? W ten sposób system operacyjny wie, gdzie jest jego główny system plików. Składnia jest następująca <protocol>://<server>:<path>
.
Dogodnie ustawiłem nazwę DNS pxe
dla mojego serwera. Jeśli go nie masz, użyłbyś adresu IP dla serwera.
Ponadto sysresccd jest jednym z najłatwiejszych, ponieważ wykorzystuje obraz squashfs dla swojego głównego systemu plików, który można łatwo pobrać i załadować do pamięci RAM dowolną metodą. Tutaj używam nbd; możesz także użyć tftp, nfs i http .
W przypadku innych dystrybucji, takich jak Ubuntu, myślę, że możesz używać tylko NFS.
W przypadku systemów Windows jest to nieco bardziej skomplikowane . Zarys jest następujący:
- Zainstaluj system Windows 7 w folderze udostępnionym na serwerze
- Posiadaj pełne środowisko Windows PE na serwerze w swoim katalogu głównym TFTP
- Poproś komputer kliencki, aby załadował WinPE przez sieć i naciśnij, F12aby uzyskać wiersz polecenia
- Zamapuj folder współdzielony z instalacją systemu Windows 7 na literę dysku
- Rozpocznij instalację z zmapowanego folderu
Nigdy tego nie próbowałem i wydaje się, że u niektórych osób to nie działa. Dla wersji NT starszych niż Vista myślę, że to nawet nie jest możliwe. W systemach Windows starszych niż Windows (95, 98, ME itp.) Możesz użyć metody memdisk, ale uruchomienie ich jest szkodliwe dla zdrowia :-p