Betriebssystem-Images kopieren

Um mehrere Rechner mit identischer Hardware aufzusetzen, ist es verlockend, einfach einen komplett aufzusetzen und dann diese Installation einfach byteweise auf die Platten der anderen zu kopieren. Man muß dann nur noch 2-3 Parameter wie Rechnername ändern.

Erst einmal ist die Frage, wie das überhaupt geht. Ich würde empfehlen, den Rechner mit einem USB-Stick oder einer DVD mit einem Linux zu booten, das komplett im Memory läuft und nichts auf die Festplatten des gebooteten Rechners schreibt. Knoppix ist ein bekanntes und schon seit vielen Jahren verfügbares System für diesen Zweck, aber grundsätzlich eignen sich viele Linux-Varianten dafür und die Mechanismen sind auch etwa dieselben.

Die Installation befindet sich oft auf einem der ersten Laufwerke (Festplatte oder SSD), läßt sich also typischerweise mit /dev/sda oder /dev/sdb ansprechen. Mit fdisk -l /dev/sda und fdisk -l /dev/sdb kann man die Partitionierungen und die Partitionstypen und -größen erkennen, eventuell kann man auch eine Partition mounten, wenn es unklar ist. Nehmen wir also an, daß /dev/sda die gesamte Installation enthält. Nun braucht man Platz, um das Image abzulegen. Vielleicht ist ein USB-Stick oder eine externe USB_Festplatte groß genug, aber man kann das auch direkt über das Netz auf einem geeigneten Server ablegen, wenn man nur die Verbindung und die Zugriffsrechte hat.
Das Image läßt sich nun mit so etwas

dd if=/dev/sda of=- |gzip -9 > /directory/of/mounted/device/image-name-date.gz

oder sogar so etwas

dd if=/dev/sda of=- |gzip -9 |ssh user@server "cat > /directory/of/server/image-name-date.gz"

gewinnen und speichern.

Umgekehrt läßt es sich mit

zcat /directory/of/mounted/device/image-name-date.gz |dd if=- of=/dev/sda

oder

ssh user@server "cat /directory/of/server/image-name-date.gz" | zcat |dd if=- of=/dev/sda

einspielen. Es wird nicht gefragt, sondern eiskalt alles überschrieben, was vorher dort war, einschließlich Partitionstablle. Die Festplatten oder SSDs sollten also gleich groß sein, sonst gibt es böse Überraschungen.

Zunächst fällt einmal auf, daß das Image jede Menge Datenmüll von längst gelöschten Dateien oder von ungenutzten Partitionen enthält. Man kann diese Bereiche aber weitgehend mit nullen ausfüllen, um das zu verhindern. Dazu muß man jede der Partitionen einmal mounten und mit so etwa wie

dd if=/dev/zero of=/mnt/mounted_partition/zero

eine große Datei anlegen, die die jeweils leeren Bereiche ausnullt. Einige alte Dateisysteme kennen relevante Größenbeschränkungen für Dateien. Dann muß man mehrere Dateien anlegen. Und einige Dateisysteme komprimieren ihre Inhalte, da sollte man schauen, ob sich diese zero-Datei davon ausnehmen läßt, sonst bringt die Aktion nichts und man kann sie sich sparen. Bei verschlüsselten Dateisystemen bringt diese Null-Datei auch nichts. Ist das Image eine MS-Windows-Installation, dann kann man das mit cygwin machen oder von Linux aus die NTFS-Partitionen mounten, um diese zero-Datei anzulegen.
dd bricht ab, sobald der freie Platz verbraucht ist. Dann muß man die zero-Datei gleich wieder löschen. Das Komprimieren mit gzip funktioniert danach viel besser.

Die grundsätzlichere Frage ist aber, ob dieser brutale Ansatz überhaupt funktionieren kann. Erstaunlicherweise funktioniert das recht gut, sowohl für Linux als auch für MS-Windows und wenn man einmal etwas Übung oder eine gute Checkliste oder gute Skripten zur Automatisierung dieser Vorgänge hat, geht es auch recht flott. Nur gibt es für MS-Windows eine Einschränkung, die dieses Verfahren für typische Desktopumgebungen in Organisationen praktisch verbietet. Wenn die MS-Windows-Rechner an eine „Domain“ teilnehmen sollen, dann wird ein interner Rechnername relevant. Im Gegensatz zu dem leicht änderbaren „hostname“ oder „Computername“ ist dieser leider an so vielen Stellen in der Registry eingetragen, daß es nicht einfach ist, diese internen Namen zu ändern. Vielleicht gibt es auch inzwischen Werkzeuge, die diese Aufgabe zuverlässig bewältigen können? Sonst sollte man in diesem Fall andere Mechanimsen benutzen.

Share Button

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


*