Przejdź do treści

RPi-PXE Server

  • przez

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.

  1. 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ł.

Testkarta SDNFS
ceph SSD
NFS
local SSD
dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync32.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=dsync45.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
Podstawowe testy