Przedstawiam bardzo udany projekt RPi-PXE Server. Został opracowany przez inżyniera Jorge Pabon z Puerto Rico. Projekt ten umożliwia prostą konfigurację serwera PXE, który udostępnia system plików dla minikomputera Raspberry PI. Raspbery PI, po odpowiedniej konfiguracji uruchamia system operacyjny, który jest udostępniany w sieci LAN z udziału NFS przy wykorzystaniu DNSMASQ oraz TFTP.
# Start DNSMasq service configuration
port=0
dhcp-range=192.168.0.255,proxy
log-dhcp
enable-tftp
tftp-root=/PXE/boot
pxe-service=0,"Raspberry Pi Boot"
# End DNSMasq
Domyślnie projekt zakłada, że serwer PXE jest uruchomiony na innym Raspbery PI. W moim przypadku uruchomiłem to rozwiązanie na Debianie w kontenerze na Proxmox. Wymagane były jednak niewielkie modyfikacje konfiguracji.
- Właściwe wskazanie serwera TFTP w konfiguracji głównego serwera DHCP.
host server-rpi4_tv { hardware ethernet DC:A6:32:01:86:5D; fixed-address 192.168.0.31;
option tftp-server-name "192.168.0.234";
next-server 192.168.0.234;
}
2. Modyfikacja pliku cmdline.txt dla właściwego rozruchu. Usunięto parametr vers=4.1 oraz zmieniono proto=tcp na tcp. Na tej konkretnej instalacji Debiana chyba nie działa NFS w wersji 4.1.
console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.0.234:/PXE/filesystems/009ae823,tcp rw ip=dhcp rootwait elevator=deadline
Przy tym rozwiązaniu Rapsbery PI nie potrzebuje do rozruchu ani karty SD, ani pendriva, ani dysku USB. System startuje bezpośrednio z sieci lan. Jest to rozwiązanie ekonomiczne, bardzo wygodne i bezpieczne. Kopię całego systemu plików RPI wykonuje Proxmox Backup Server.
Przy okazji zrobiłem kilka podstawowy testów. Spodziewałem się, że sieć będzie szybsza od karty SD i w zasadzie tak jest. Trochę zdziwiły mnie wyniki testu, gdy kontener z serwerem PXE pracuje tylko na lokalnym dysku, myślałem, że będzie szybciej w stosunku do ceph. Będę to jeszcze testował.
Test | karta SD | NFS ceph SSD | NFS local SSD | |
dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync | 32.3 MB/s 26.3 MB/s 21.8 MB/s | 50.8 MB/s 48.9 MB/s 48.5 MB/s | 31.9 MB/s 30.1 MB/s 33.2 MB/s | |
dd if=/dev/zero of=/tmp/test2.img bs=512 count=1000 oflag=dsync | 45.8 kB/s 39.4 kB/s 50.0 kB/s | 43.2 kB/s 42.2 kB/s 35.6 kB/s | 24.8 kB/s 21.6 kB/s 29.0 kB/s |