Allgemeines
Linux kann, wie viele andere Systeme übrigends auch, festplattenlos bzw. überhaupt ohne Laufwerke betrieben werden. Dazu bootet der Client über die Netzwerkkarte, holt sich den Kernel von einem Server, lädt ihn, und mountet dann sein DateiSystem per NFS.
Mögliche Verfahren
Zum Booten vom Netzwerk gibt es mehrere Arten, welche man realisieren kann.
Booten mit Kernel auf Diskette
Hintergrund: Die Clients sollen per Bootdiskette über das Netz booten. Folgende Punkte sind zu beachten:
- Bootdiskette? Naja, ned arg professionell würde ich sagen, wenn man so die Zuverlässigkeit von Disketten betrachtet.
Für die ersten Experimente kann man (SYSLINUX) nehmen, dann sollte man sich doch aber bitte schnell von der Diskette trennen und PXELINUX benutzen.
- Ist zwar nicht so sehr proffesionell, hat aber den Vorteil das man jeden Rechner ohne weiteres Nutzen kann, auch wenn er das Booten mit Boot-ROM nicht unterstützt.
- der Kernel startet dann /sbin/init von dem Rootfilesystem, das er über NFS gemountet hat
- der Kernel muss Netzwerkkartentreiber, IP-Autoconfiguration und Root-On-NFS fest im Kernel einkompiliert haben (EIDE-Treiber u.ä. hingegen kannst Dir sparen, kostet nur Zeit)
- ab da bootet alles normal über NFS
- Bootscripts so modifizieren, dass das Netzwerk ohne änderungen übernommen wird (ist ja bereits konfiguriert und am Laufen)
installieren bei Debian z.B. mit debootstrap oder bei anderen eben erstmal auf ne andere Platten und dann nach /nfsroot bzw. an den gewünschten Ort kopieren.
das ganze System, das auf den diskless Clients läuft liegt auf dem Server dann z.B. unter /nfsroot (muss man im DHCP konfigurieren)
- konfigurieren: mit nem Editor, ggf. chroot vor Einsatz irgendwelcher "Tools"
- am einfachsten vielleicht erstmal doch ne Platte an nen Client anklemmen und das gröbste mal vorkonfigurieren und danach dann alles auf den Server kopieren
wenn man sich selbst nen gefallen tun will, bringt man nachdem das Grundsystem vom Netz booten kann als erstes ssh, genauergesagt den sshd auf den Clients zum Laufen, inklusive eines passwortlosen Logins per Key. So kann man auch mehrere Clients bequem administrieren.
- dann kann Du mit ner einfachen "for"-Schleife und ssh / scp alle Clients parallel "bearbeiten" bzw. untersuchen oder beschäftigen
je nachdem, wie sicher das Genze sein muss, kann man sich noch den Einsatz von SNMP überlegen, das erleichtert die Arbeit auch nochmal ungemein, vor allem wenn die Zahl der Clients mal eine Zahl übersteigt, die man nicht mehr mit den Händen abzählen kann!
Booten mit Kernel auf dem Server
- Man braucht ne Netzwerkkarte mit Bootprom / Flashrom, z.B. ne Intel eepro100 mit PXE (die tut erwiesenermaßen).
Die lädt dann per PXE (= DHCP, TFTP) den Kernel oder noch besser nen Loader wie PXELINUX.
- Dieser Loader wiederum lädt den Kernel und ab da geht es wie in voriger Lösung.
warum Diskless oder auch nicht?
Vorteile:
- wenn man nur pure "CPU-Power" braucht, sind Festplatten in größerer Menge eher lästig, denn
- sie produzieren Wärme und Krach
- gehen kaputt und müssen ausgetauscht und neu installiert werden
- vor allem bei Dutzenden oder gar hunderten von PCs in einem Cluster oder in sonst einem großen System kann das echt in Arbeit ausarten, so dass man das nur macht, wenn man wirklich auch im Cluster speichern will (und dann ist Redundanz angesagt, siehe Google)
- deshalb ist es sinnvoll, zentral zu speichern. Diesen zentralen Massenspeicher hat man sehr leicht im Überblick und kann ihn auch ohne viel Aufwand redundand auslegen. Außerdem ist ein Backup leicht möglich, weil alle Daten an einem Ort sind.
Nachteile:
- Es steht kein SWAP zur Verfügung. Man muss also das System mit genug Speicher ausstatten (z.B. soviel wie man eben normalerweise als RAM+SWAP hätte) oder man muss über das Netzwerk swappen. Letzteres zieht allerdings sehr viel Bandbreite vom Netz und ist sehr sehr langsam.
- Man muss sich sehr genau Gedanken darüber machen, welche Infos man für die Clients zentral hält und welche für jeden einzeln.
- Das Installieren neuer Software oder das Updaten ist mitunter recht schwierig.
wie erstellt man root-Filesysteme?
Per diskless in Debian
In Debian gibt es die beiden Pakete diskless und netboot, die dabei helfen können. diskless kann relativ automatisch ein DateiSystem für die Clients anlegen. Dabei ist / bei allen Clients gleich (read-only), während /tmp, /var und /dev für jeden Client einzeln auf dem Server untergebracht sind. Das funktioniert sogar , ich habe das schon mal am Laufen gehabt. -- BennySiegert 2002-09-20 13:40:34
Du kannst einen Client auch im "Master-Modus" (oder so ähnlich) booten. Dabei ist dann entsprechend / schreibbar gemountet. Das Aufspielen der Pakete geht dann wie gewohnt. Wie man das genau einstellt, weiß ich nicht mehr, aber das steht alles in der Doku. Wenn du das Paket installiert hast, gibt es unter /usr/share/doc/diskless ein ausführliches HowTo. -- BennySiegert 2002-10-13 16:56:30
Nun, ich habe mir das Mal angeschaut. Das HowTo ist zwar vielversprechend, läßt dann aber doch einige Fragen offen. Und das ganze System erfordert zusätzlichen Aufwand was die Konfiguration neuer Software angeht. -- JanRoehrich
manuell
so bin ich vorgegangen:
Habe ein Debian-Minimalsystem normal auf Platte installiert und dann das gesamte DateiSystem auf den Server kopiert
- dann habe ich zuerst mit einem Client davon gebootet und ihn nach meinen Wünschen eingerichtet.
anschließend habe ich das System so konfiguriert, dass es das Root-DateiSystem nur noch read-only mounted und alle Verzeichnisse, in das es schreiben muss, separat mountet.
für /var/lock, /var/run und /var/log habe ich eine Ramdisk angelegt.
bei /var/log kann man sich streiten, ob das sinnvoll ist, auf jeden Fall ist es schnell und das hat bei meinem Cluster oberste Prio! Man kann, sofern Fehler auftauchen, immernoch auf dem Server So umkonfigurieren, dass er auf den Server logt. Außerdem könnte man per CronJob die Ramdisk regelmäig packen und dem Server schicken.
/home wir direkt vom Server gemountet
alle Clients haben ein gemeinsames /tmp. Leider habe ich noch keine Erfahrungswerte, ob das in irgendeiner Form Probleme macht.
da bei mir alle Clients eine Minimalkonfiguation haben und keine speziellen Treiber brauchen, habe ich /etc nicht abgetrennt sondern bei allen Clients gleich belassen. Hier ist nur darauf zu achten, dass man /etc/mtab nach /proc/mounts verlinkt weil diese Datei schreibbar sein muss.
weiterführende Links
PXES Linux thin client - Tool zum Erstellen einer micro-Linux-Distribution als Terminal für X11 oder MS TerminalServer.
Im LinuxMagazin 01/2003 ist ein guter Artikel über DisklessLinux
Wenns SuSe sein soll aber auch Grundlagen: http://ldc.goe.net/
Für einen ersten Test ist der KNOPPIX-Terminal Server durchaus geeignet.
Überreste der alten Version
Noch was, was du nicht gefragt hast: Wenn das mit der Diskette tut, kannst du zumindest auf Linuxkisten einfach Kernel und initrd.img auf Platte kopieren und von da booten. Bei Rechnerpools das dann einfach als Default-Bootoption eintragen und die Kisten nach Ladenschluss per CronJob rebooten.
das ist klar! Und natürlich geht das auch mit Windows - alles schon eingeplant. Allerdings bräuchten wir dafür ein neues Netzwerk, das aktuelle wird das wohl nicht überstehen! -- JanRoehrich 2002-10-18 06:46:33
Das mit dem Minimal System installieren sollte einfacher mit debootstrap gehen.
Das mit dem Syslog müsste mit einem Logserver zu lösen sein. Dann braucht der syslog auf dem client nicht mehr auf die Platte zu schreiben. -- AndreasSchockenhoff 2002-10-16 22:48:26
ich glaube das ändert immernoch nicht das Problem mit /dev/log - oder? An einen Server hab ich auch schon gedacht, das erzeugt aber unnötigen Netztraffic und den muss ich eben bei einem Cluster möglichst minimieren! -- JanRoehrich 2002-10-16 23:00:51
Mhhh das /dev Verzeichnis sollte wohl in die RAM disk. (ist ja nicht so groß wenn man nur das nötigste erzeugt.) -- AndreasSchockenhoff 2002-10-17 20:28:52
/dev hat im RAM zu liegen, sonst nirgends.
liegt es jetzt auch! ... und mein Client funktioniert jetzt ohne auch nur eine einzige Fehlermeldung! Siehe hierzu auch JanRoehrich/LogBuch -- JanRoehrich 2002-10-18 06:45:00