Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:klonen_eines_servers

Klonen eines Servers

Es gibt sicherlich verschiedene Arten und Möglichkeiten einen Server zu „Klonen“. Die hier beschriebene Möglichkeit lehnt sich sehr stark an die Idee von g4u (Ghost 4 you) an.

Da aber aktuell nicht jede Hardware von g4u (Ghost 4 you) unterstützt wird, ist die hier beschriebene Möglichkeit einen Server zu Klonen, unabhängig von den Hardwareanforderungen von g4u (Ghost 4 you), sondern lehnt sich an die Möglichkeit an ein Rettungsystem des „eigenen“ Betriebssystems, hier konkret am Betriebssystem CentOS auszuführen.

Starten des Rettungsystems

Unter CentOS legen Sie bitte die DVD oder die erste CD (CD1) in Ihr CD/DVD-Laufwerk ein und stellen sicher, dass von diesem CD/DVD-Laufwerk der Rechner gestartet werden kann. Evtl. sind hier Einstellungen an der Startreihenfolge im BIOS des Rechners vorzunehmen.

Nach erfolgreichem Start des Rettungssystems von CentOS geben Sie am Boot-Prompt (sobald ein Eingabe-Cursor erscheint) folgende Startoption für das Rettungssystem ein:

linux rescue

Bitte folgen Sie den Anweisungen des Rettungssystems und richten sich Ihr Rettungssystem nach Ihren persönlichen wünschen ein z.B.

  • Sprache (z.B. German)
  • Tastaurlayout (z.B. de-latin-with-nodeadkeys)

Bei der Frage nach der Einrichtung von Netzwerkkarten, beantworten Sie diese bitte unbedingt mit ja, falls der Server per FTP auf einen Rechner oder Speicher im Netzwerk übertragen werden soll. Geben Sie bitte hier die Einstellungen ein, die Ihr Netzwerk erfordert, z.B.:

  • IP-Adresse (z.B. 192.168.0.2)
  • Netzwerkmaske (z.B. 255.255.255.0)
  • Standardgateway (z.B. 192.168.0.1)
  • Namensserver (z.B. 192.168.0.1)

Nach dem erfolgreichem Suchen einer Installation von CentOS auf der Festplatte des Rechners, wird die Frage nach dem mounten des vorhandenen bzw. gefundenen Betriebssystems gestellt. Aktuell wird ein mountpoint unter /mnt/sysimage erstellt.

:!: Es reicht hier völlig aus, das gefundene Betriebssystem read-only zu mounten.

Einbinden von Kernel-Modulen einer Netzwerkkarte

Falls z.B. eine Netzwerkkarte der Firma Realtek im Rechner Verwendung findet, wird aktuell der Treiber nicht standardmäßig nach einer erfolgreichen Installation von CentOS im Betriebssystem vorhanden und eingebunden sein. Hier ist es notwendig die Treiber für diese Netzwerkkarte selbst zu installieren oder sogar selbst zu kompilieren.

Die Kernel-Module liegen dann bei CentOS unter /lib/modules/<kernel-version>/kernel/drivers/net.

Um dieses Kernel-Modul auch im Rettungssystem einzubinden und nutzen zu können, wird die Datei, hier als Beispiel die Treiberdatei für eine Realtek Netzwerkkarte des Typs RTL8110S-32/RTL8110SB(L)/RTL8169SB(L)/RTL8169SC(L)/RTL8169 (Software) r8169.ko für den Kernel 2.6 benötigt, welche wir aus dem gefundenen Betriebssystem in das Dateisystem des Rettungssystems nach /tmp z.B. mit folgendem Befehl kopieren:

cp /mnt/sysimage/lib/modules/2.6.18-53.1.21.el5/kernel/drivers/net/r8169.ko /tmp

Das so im Dateisystem des Rettungssystems vorhandene Kernel-Modul kann nun mit dem folgendem Befehl eingebunden werden:

insmod /tmp/r8169.ko

Zur Überprüfung ob das Kernel-Modul auch geladen wurde dient folgender Befehl:

# lsmod | grep r8169
r8169                  35476  0

Falls die Ausgabe r8169 35476 0 erscheint (Zahlen 35476 0 können differieren) wurde das Kernel-Modul eingebunden!

Die Netzwerkkarte sollte nun ersichtlich sein, was mit folgendem Befehl überprüft werden kann:

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:30:18:00:00:00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0)  TX bytes:0 (0.0)
          Interrupt:185 Base address:0x2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2171 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2171 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2926810 (2.7 MiB)  TX bytes:2926810 (2.7 MiB)

Zum Abschluss ist es noch erforderlich der Netzwerkkarte eine IP-Adresse und Netzwerkmaske zu geben, was mit folgendem Befehl durchgeführt werden kann:

# ifconfig eth0 192.168.0.1/24
eth0      Link encap:Ethernet  HWaddr 00:30:18:00:00:00  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0)  TX bytes:0 (0.0)
          Interrupt:193 Base address:0x4000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2175 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2175 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2927566 (2.7 MiB)  TX bytes:2927566 (2.7 MiB)

Klonen auf eine interne Festplatte

Die einfachste und schnellste Möglichkeit einen Rechner zu klonen, ist die Übertragung der Daten einer gesamten Festplatte, oder einer Partition einer Festplatte auf eine weitere interne (im Rechner enthaltenen) Festplatte.

Dies kann mit folgendem Befehl durchgeführt werden:

# dd if=/dev/sda ibs=1M of=/dev/sdb obs=1M

Der Befehl bewirkt, dass eine SCSI/S-ATA-Festplatte /dev/sda auf eine SCSI/S-ATA-Festplatte /dev/sdb „bit für bit“ kopiert wird.

Um nur eine Partition zu kopieren, kann folgender Befehl verwendet werden:

# dd if=/dev/hda1 ibs=1M of=/dev/hdb1 obs=1M

Der Befehl bewirkt, dass die Partition 1 einer IDE-Festplatte /dev/hda1 auf die Partition 2 einer IDE-Festplatte /dev/hdb1 „bit für bit“ kopiert wird.

Klonen auf einen entfernten Rechner via FTP

Die hier dargestellte Möglichkeit einen Rechner zu klonen beinhaltet im einzelnen, das

  • Klonen auf einen anderen Rechner im Netzwerk und das
  • Erstellen einer gepackten Datei mit dem Inhalt des zu klonenden Laufwerks

:!: Aus Sicherheitsgründen sollte diese Methode nur im Netzwerk angewannt werden und nicht zur Übertragung über das Internet, da die Daten via FTP unverschlüsselt übertragen werden!

Voraussetzungen

Folgende Voraussetzungen, zusätzlich zum bereits beschriebenen Starten (Booten) eines Rechners mit Hilfe eines Rettungssystems müssen noch erfüllt sein:

  1. Ein erreichbarer, laufender FTP-Server im Netzwerk (z.B. FileZilla Server (Windows), vsftpd (Linux))
  2. Schreibender Zugriff mittels Benutzername (und optionalem Kennwort) auf diesen FTP-Server im Netzwerk

Vorbereitung

Zur Vorbereitung legen Sie im /tmp-Verzeichnis des aktuell mit dem Rettungssystem gestarteten Rechners eine Datei mit dem Namen ftptmp mit folgendem Befehl an:

# touch /tmp/ftptmp

Der Inhalt der Datei sollte wie folgt aussehen, welcher z.B. mit dem Editor vi erstellt werden kann (vi /tmp/ftptmp, i für Editieren des Inhalts, speichern des Inhalts mit [Esc]-Taste, :wq):

# vi /tmp/ftptmp
open <IP-Adresse des entfernten Rechners>          z.B. 192.168.0.3
user <Benutzername> <Passwort>                     z.B. install passwort
binary
put - <Name der gepackten Zieldatei)               z.B. clone.sda1.gz
bye

Hier noch einmal OHNE Kommentare:

# vi /tmp/ftptmp
open 192.168.0.3
user install passwort
binary
put - clone.sda1.gz
bye

Durchführung

Der Befehl zum durchführen des Klonens lautet wie folgt:

# dd if=/dev/sda1 ibs=1M | `( cat /tmp/ftptmp ; dd bs=1M | gzip ) | ftp -n `

Das Zeichen ` vor der Klammer zu dem Befehl cat und am Ende wird mit der Tastenkobination (z.B. Tastaturlayout de-with-nodeadkeys) [Shift/Hochstellen]+[´] ([´]-Taste = rechts neben der [ß]-Taste) erzeugt.

Der Befehl sollte in etwa eine ähnliche Ausgabe wie folgende erzeugen:

KERBEROS_V4 rejected as an authentication type

Dann wird der Kopiervorgang ausgeführt und Sie sehen für die Dauer des Kopierens keine Ausgabe (auch keine Fortschrittsanzeige). Dies kann Minuten oder sogar Stunden dauern, je nach Netzwerkverbindung und Grösse der zu kopierenden Dateien. Am Ende sollte eine ähnliche Ausgabe in etwa wie folgende erscheinen:

101+1 records in
208845+0 records out
106928640 bytes (107 MB) copied, 7.84612 seconds, 13.6 MB/s
101+1 records in
101+1 records out
106928640 bytes (107 MB) copied, 7.84635 seconds, 13.6 MB/s
-bash: Please: command not found

:!: Die Fehlermeldung -bash: Please: command not found am Ende der Ausgabe kann ignoriert werden, da diese nur ein Hinweis für eine fehlende Eingabedatei für den Befehl put innerhalb der Datei /tmp/ftptmp ist.

Ergebnis

Im obigem Beispiel wurde die SCSI/S-ATA-Festplatte /dev/sda1 auf einen entfernten Rechner im Netzwerk via FTP (mit Anweisungen für den FTP-Client in der Datei /tmp/ftptmp) geklont.

Die Partition /dev/sda1 hat folgende Grösse, was mit folgendem Befehl ermittelt werden kann:

# df -h /dev/sda1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              99M   18M   77M  19% /boot

Die mit gzip gepackte Datei clone.sda1.gz auf dem entfernten Rechner im home-Verzeichnis (ist gleichzeitig auch im FTP-Server definiertes home-Verzeichnis des Benutzers install) hat folgende Grösse, was mit folgendem Befehl ermittelt werden kann:

]# du -h /home/install/clone.sda1.gz 
15M     clone.sda1.gz

Erklärung

Hier die Erklärung, was bei folgendem Befehl passiert:

# dd if=/dev/sda1 ibs=1M | `( cat /tmp/ftptmp ; dd bs=1M | gzip ) | ftp -n `

Der erste Teil:

# dd if=/dev/sda1 ibs=1M 
liesst den Inhalt der ersten Partition der SCSI/S-ATA-Festplattte /dev/sda1 in der Grösse von einem MegaByte (1M) blöcken und sendet das Ergebnis in eine pipe | .

Der zweite Teil:

`( cat /tmp/ftptmp ; 
führt zuerst den Befehl cat (ausschneiden) der Datei /tmp/ftptmp aus. Der Inhalt wird dann an den FTP-Server gesendet.

Der dritte Teil:

dd bs=1M | gzip )
schickt die durch den ersten Teil erhaltenen Daten in der Grösse von einem MegaByte (1M) ebenfalls über eine pipe | an das Programm gzip, welches die Daten packt.

Der letzte Teil:

 | ftp -n `
sendet die so erhaltenen Daten an den FTP-Server weiter, ohne erneute authentifizierung zu verlangen, Option -n.

Klonen von einem entfernten Rechner via FTP

Falls alle bereits oben beschriebenen Voraussetzungen auch weiterhin gegeben sind, kann auch das Klonen von einem entferten Rechner via FTP durchgeführt werden. Es sind hier jedoch noch einmal alle Schritte beschrieben.

Voraussetzungen

Folgende Voraussetzungen, zusätzlich zum bereits beschriebenen Starten (Booten) eines Rechners mit Hilfe eines Rettungssystems müssen noch erfüllt sein:

  1. Ein erreichbarer, laufender FTP-Server im Netzwerk (z.B. FileZilla Server (Windows), vsftpd (Linux))
  2. Lesender Zugriff mittels Benutzername (und optionalem Kennwort) auf diesen FTP-Server im Netzwerk

Vorbereitung

Zur Vorbereitung legen Sie im /tmp-Verzeichnis des aktuell mit dem Rettungssystem gestarteten Rechners eine Datei mit dem Namen ftptmp mit folgendem Befehl an:

# touch /tmp/ftptmp

Der Inhalt der Datei sollte wie folgt aussehen, welcher z.B. mit dem Editor vi erstellt werden kann (vi /tmp/ftptmp, i für Editieren des Inhalts, speichern des Inhalts mit [Esc]-Taste, :wq):

# vi /tmp/ftptmp
open <IP-Adresse des entfernten Rechners>          z.B. 192.168.0.3
user <Benutzername> <Passwort>                     z.B. install passwort
binary
get <Name der gepackten Zieldatei) |gunzip -cd -   z.B. clone.sda1.gz
bye

:!: Wichtig ist, dass die Zeile mit dem Befehl get exakt, ohne zusätzliche oder auch fehlende Leerzeichen, so wie hier beschrieben angewannt wird, da sonst der Dateitransfer fehlschlägt!

Hier noch einmal OHNE Kommentare:

# vi /tmp/ftptmp
open 192.168.0.3
user install passwort
binary
get clone.sda1.gz |gunzip -cd -
bye

Durchführung

Der Befehl zum durchführen des Zurückkopierens lautet wie folgt:

# `cat /tmp/test/ftptmp | ftp -nu | dd of=/dev/sda1 obs=1M `

Das Zeichen ` vor der Klammer zu dem Befehl cat und am Ende wird mit der Tastenkobination (z.B. Tastaturlayout de-with-nodeadkeys) [Shift/Hochstellen]+[´] ([´]-Taste = rechts neben der [ß]-Taste) erzeugt.

Dann wird der Kopiervorgang ausgeführt und Sie sehen für die Dauer des Kopierens keine Ausgabe (auch keine Fortschrittsanzeige). Dies kann Minuten oder sogar Stunden dauern, je nach Netzwerkverbindung und Grösse der zu kopierenden Dateien. Am Ende sollte eine ähnliche Ausgabe in etwa wie folgende erscheinen:

208845+0 records in
208845+0 records out
106928640 bytes (107 MB) copied, 3.87708 seconds, 27.6 MB/s

Erklärung

Hier die Erklärung, was bei folgendem Befehl passiert:

# `cat /tmp/test/ftptmp | ftp -nu | dd of=/dev/sda1 obs=1M `

Der erste Teil:

# `cat /tmp/test/ftptmp | ftp -nu 
führt zuerst den Befehl cat (ausschneiden) der Datei /tmp/ftptmp aus. Der Inhalt wird dann an den FTP-Server gesendet.

Der letzte Teil:

dd of=/dev/sda1 obs=1M `
schreibt die vom FTP-Server enthaltenen Daten aus der pipe | auf die SCSI/S-ATA-Festplatte /dev/sda1 in der Grösse von einem MegaByte (1M) Blöcken.

  • g4u (Ghost 4 you)
  • g4l (Ghost 4 linux)
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/klonen_eines_servers.txt · Zuletzt geändert: 2012/08/29 12:24 von klaus