Betriebssystemabbilder über Netzwerk Verteilen

Dieser Artikel beschreibt, wie Tiny Core Linux (TCL) verwendet werden kann, um Festplattenabbilder effizient über das Netzwerk zu verteilen.

Dieser Artikel geht davon aus, dass bereits vorkonfiguriertes TCL über Netzwerk gestartet werden kann. Ferner finden alle Eingaben an einem separaten "Kontrollrechner" statt.

Denselben Befehl auf mehreren Rechnern ausführen

Falls der SSH-Agent noch nicht läuft, kann er mit eval $(ssh-agent) gestartet werden. Danach muss unter Umständen explizit der private Schlüssel mit ssh-add geladen werden. Der öffentliche Schlüssel wurde vorab in TCL hinterlegt.

Nun kann mit clusterssh -l root hostname-{1..41} eine Verbindung zu den Zielrechnern hergestellt werden.

Falls clusterssh nicht genutzt werden kann, kann mit mussh -H <(echo hostname-{1..41}) -s sh -c … ein einzelner Befehl auf mehreren Rechnern gleichzeitig ausgeführt werden.

Unter Umständen ist es notwendig, den absoluten Pfad zum aufgerufenen Programm anzugeben.

Partitionstabelle Klonen

Für GPT hat sich sgdisk als nützlich erwiesen:

$ sgdisk --backup gpt.sgdisk quellplatte
$ sgdisk --load-backup gpt.sgdisk zielplatte

Wie genau gpt.sgdisk zu den Zielrechnern kommt, wird dem Leser zur Übung überlassen. Ich habe sowohl eine NFS, Samba, scp, sshfs und rsync verwendet. Auch sgdisk --load-backup /dev/stdin zielplatte ist möglich (als Ziel für udpcast), jedoch muss --backup eine echte Datei als Ziel haben.

NTFS Dateisystem Klonen

udp-sender und udp-receiver sind Teil von udpcast.

Auf dem Quellsystem wird ausgeführt:

$ ntfsclone --save-image --overwrite - quelle | gzip -2 | udp-sender -i eth0

Wobei eth0 die Netzwerkschnittstelle ist, auf der gesendet werden soll (muss angegeben werden, falls mehrere Schnittstellen vorhanden sind). quelle kann eine Partition sein, z.B. /dev/disk/by-label/WINDOWS. Falls die Quelle ein (bereits gepacktes) Abbild ist, kann etwas wie udp-sender --file quelle.ntfsclone.gz verwendet werden.

Auf allen Zielsystemen wird (mittels clusterssh oder mussh) ausgeführt:

$ udp-receiver - | gzip -d | ntfsclone --restore-image --overwrite ziel - 2>&1 > /dev/tty1

Wobei ziel eine Partition angeben sollte, z.B. /dev/disk/by-label/WINDOWS oder /dev/sdxn.

Falls letzteres verwendet wird, sollte vorher mit lsblk, blkid oder fdisk -l geprüft werden, ob das Platten- und Partitionslayout auf allen Zielrechnern gleich ist.

2>&1 > /dev/tty1 lenkt die Ausgabe von ntfsclone in die Bildschirme der Rechner um. So ist der Fortschritt bei jedem einzelnen Rechner direkt sichtbar. Auch 2>&1 | tee /dev/tty1 oder gar keine Umlenkung sind nutzbare Varianten.

Das Quellsystem zeigt die Verbindungen an und meldet die Bereitschaft zur Übertragung. Der Start der Übertragung muss dort einmal bestätigt werden.

ext4 Dateisystem Klonen

Vorher resize2fs -M und dd bs=… count=…, hinterher resize2fs. Optional gzip -d.

Erfahrungen

Mit dieser Methode kann ich Problemlos Windows 10 und Ubuntu 18.04 auf acht Rechner gleichzeitig verteilen – bei achtfacher Parallelität! 😮

Einmal war der Verteilungsvorgang sehr langsam: An einem Rechner war ein schlechtes Netzwerkkabel angeschlossen, sodass die Verbindung von 1000 Base-T auf 100 Base-T heruntergehandelt wurde.

Windows 10 benötigt ein bestimmtes Partitionslayout. Es muss zwar nur das Dateisystem übertragen werden, in welchem Windows installiert ist, die anderen Partitionen müssen aber ebenfalls erstellt werden – auch wenn sie leer sind. Sonst startet Windows nicht.