Mittwoch, 8. September 2010

Server 2003 R2 als NFS Server

Einrichtung des 2003 Servers als Network File System (NFS) Server. Eigentilch dient das alles als NFS Freigabe für meinen ESX Server.

Installation

Für die Installation gehen wir wie folgt vor:

Systemsteuerung > Software > Windows Komponenten hinzufüge, entfernen > Other Network File and Printe Service > Microsoft Service for NFS > Server for NFS << style="background-color: rgb(255, 255, 0);">NFS Authentication auswähle, also alles.

Konfiguration

  • man besorgt sich 2 Dateien passwd und group von dem ESX Server

jetz muss man die User synchronisieren

Ordner freigeben
  • read-write nicht vergessen
  • Allow root access sollte man auch wählen, wenn man auf die ESX Freigabe auch schreiben will

Dienstag, 7. September 2010

Was ist Robocopy?

Robocopy ist ein mächtiges Kommandozeilen-Kopier-Programm. Es dient dazu, inkrementelle Backups von einem Ort an einem anderen zu erstellen. Die Handhabung mag anhand der unzähligen, teils kryptisch anmutenden Parameter etwas umständlich erscheinen. Ein einfaches Backup Ihrer wichtigsten Daten lässt sich trotzdem in sehr kurzer Zeit bewerkstelligen, da es reicht, einen Bruchteil dieser Parameter zu kennen. Über den Taskplaner bzw. die Aufgabenplanung können die Synchronisationsvorgänge sogar automatisiert werden.
Wie bereits gesagt, arbeitet Robocopy inkrementell. Es werden also nur neue oder geänderte Dateien berücksichtigt, was den Kopiervorgang um ein Vielfaches beschleunigen kann. Als Grundlage für diese Entscheidung dienen Robocopy zum einen der Zeitpunkt der letzten Änderung der Datei und zum anderen die Größe der Datei.

Wo bekomme ich Robocopy?

Robocopy ist in den Windows Server 2003 Resource Kit Tools enthalten. Unter Windows Vista müssen Sie dieses Paket nicht installieren, da Robocopy bereits zum Lieferumfang des Betriebssystems gehört.

Vorteile von Robocopy gegenüber copy und xcopy

Viele Anwender werden sich nun fragen: Wozu brauche ich Robocopy? Ich habe doch copy und xcopy. Diese zwei Tools sind zwar für viele alltägliche Kopiervorgänge die richtigen, wenn es jedoch darum geht, ein inkrementelles Backup anzulegen, versagen beide. Copy kann nur Inhalte der obersten Ebene kopieren und berücksichtigt Unterordner überhaupt nicht. Xcopy kann mit dem Parameter /s zwar auch Unterordner und deren Dateien berücksichtigen, jedoch keine inkrementelle Kopie anfertigen. So dauert ein Kopiervorgang, der mehrere GB an Daten beinhaltet, immer sehr lange, da grundsätzlich alle Dateien erneut kopiert werden. Außerdem werden keinerlei Dateien im Archivordner gelöscht, auch wenn sie im Quellordner nicht mehr vorhanden sind. Hier kommt Robocopy ins Spiel. Robocopy berücksichtigt neue, geänderte und auch gelöschte Dateien. Dabei ist jedoch Vorsicht geboten. Wenn Sie im Quellordner versehentlich eine Datei gelöscht haben und danach Ihr Backup aktualisieren, wird diese Datei auch in Ihrem Backup nicht mehr vorhanden sein, da Robocopy nicht mehr vorhandene Dateien der Quelle ohne Nachfrage auch im Ziel löscht.

Wie lege ich ein Backup an?

Prinzipiell benötigen Sie zum Anlegen eines Backups nur einen einzigen Parameter von Robocopy. Dieser Parameter lautet /MIR (Mirror). /MIR legt eine Spiegelung der Struktur der Quelle in einem von Ihnen vorgegebenen Archiv-Ordner an. /MIR besteht eigentlich aus zwei Parametern von Robocopy. /E und /PURGE. /E kopiert alle vollen und auch leeren Unterverzeichnisse, /PURGE löscht alle Dateien im Zielordner, die in der Quelle nicht mehr vorhanden sind. Die Struktur des Befehls muss aussehen wie folgt:

robocopy /MIR

Falls Ihre Pfade Leerzeichen enthalten, muss der Pfad in Anführungszeichen gesetzt werden. Konkretes Beispiel. Sie wollen den Inhalt des Ordners C:\Meine Musik in den Ordner D:\Backup\Meine Musik spiegeln. Dazu muss der Befehl lauten:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR

Dieser Befehl kann sowohl zum erstmaligen Anlegen eines Backups verwendet werden als auch für die nachfolgenden Aktualisierungen. Standardmäßig ergänzt Robocopy diese Eingabe um weitere Parameter. So wird aus unserer Befehlszeile von Robocopy folgender Befehl generiert:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /S /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30

Eine Erklärung der einzelnen Parameter erhalten Sie im Verlauf des Artikels.

Einige Parameter

Generell können Sie die Parameter von Robocopy abfragen, indem Sie ein Kommandozeilenfenster öffnen (Start -> Ausführen -> cmd) und dort folgende Zeile tippen: robocopy /?

Der Befehl /COPY:copyflag[s]

Wie in unserer Beispielzeile zu sehen, verwendet Robocopy standardmäßig den Befehl /COPY:DAT. Die Parameter von /COPY im Einzelnen lauten:

  • D=Data (Datei-Inhalt)
  • A=Attributes (Attribute wie etwa versteckt, schreibgeschützt etc.)
  • T=Timestamps (Zeitstempel, also Erstellungsdatum, Änderungsdatum und Datum des letzten Zugriffs)

Weitere Parameter von Copy:

  • S=Security=NTFS ACLs. Hier werden die in den NTFS ACLs untergebrachten Zugriffsrechte mit kopiert. Da den heutigen Dateisystemen meist NTFS zugrunde liegt, kann das durchaus sinnvoll sein. Der Parameter /SEC hat die gleiche Funktion.
  • O=Owner info. Zusätzlich zu den Benutzerrechten kann Robocopy auch den Besitzer kopieren. Der Parameter /O erledigt das.
  • U=aUditing info. Dieser Parameter bewirkt, dass auch die Überwachungsoptionen mit kopiert werden.

Statt der Eingabe von COPY:DATSOU kann auch /COPYALL verwendet werden.
Es ist auch möglich, keinerlei Dateiinformationen zu kopieren. Gerade bei der ausschließlichen Verwendung von /PURGE ist das sinnvoll. Der dafür zuständige Parameter lautet /NOCOPY.

Für den Heimanwender wird die von Robocopy ergänzte Default-Einstellung COPY:DAT wohl ausreichen, für Systemadministratoren können sich die weiteren Parameter jedoch als durchaus sinnvoll erweisen.

Die Parameter /R:n und /W:n

Wie an der obigen Beispielzeile zu sehen ist, hat Robocopy auch hier bereits Default-Werte eingetragen. /R:n gibt die Anzahl der Wiederholungen an, die Robocopy unternimmt, falls ein Kopiervorgang nicht erfolgreich war. /W:n gibt die Wartezeit in Sekunden an, die pausiert wird, wenn ein Kopiervorgang nicht erfolgreich war. Mit der Default-Einstellung (/R:1000000 /W:30) wird Robocopy also bis zu 347 Tage lang einen erfolglosen Kopiervorgang fortsetzen.

Die Filterfunktionen /XF /XD

Bisher werden in unserem Beispiel-Backup alle Dateien und Unterordner kopiert. Jedoch kann es auch schon mal nötig sein, Verzeichnisse oder Dateien vom Backup auszuschließen. Auch hier gibt es entsprechende Parameter. /XF exkludiert Dateien oder Dateitypen, die von Ihnen angegeben werden können. Auch Wildcards werden hier unterstützt. Nehmen wir für unser Beispiel an, Sie möchten keine Playlists in Ihr Backup aufnehmen. Die Playlisten haben das Format m3u. Unsere Befehlszeile müsste also lauten wie folgt:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XF *.m3u

Um komplette Ordner aus dem Backup auszuschließen, wird der Parameter /XD benötigt. Für unser Beispiel existiert im Ordner C:\Meine Musik der Unterordner mit dem Namen Dokumente. Die Befehlszeile, um den Ordner Dokumente nicht mit einzuschließen, müsste lauten:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XD „C:\Meine Musik\Dokumente“

Eine Kombination der beiden Parameter ist natürlich auch möglich, damit weder die Playlisten noch der Ordner Dokumente kopiert werden.

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XF *.m3u /XD „C:\Meine Musik\Dokumente“

Bei den Dateifiltern gibt es noch eine Vielzahl anderer Parameter, um die Menge der zu kopierenden Dateien zu minimieren. Diese Parameter sind jedoch meist nicht nötig und werden daher an dieser Stelle vernachlässigt.

Die Logfunktion /LOG

Gerade für automatisierte Backups kann sich eine Logfunktion als nützlich erweisen, da dort nachgesehen werden kann, ob es zu Fehlern kam während des Backups oder was überhaupt gemacht wurde. Natürlich unterstützt Robocopy auch das Anlegen von Logdateien. Mit dem Parameter /LOG: wird an der vorgegebenen Stelle eine Logdatei von Robocopy angelegt. Mit /LOG+: wird eine vorhandene Logdatei fortgeführt. Sollte die Logdatei noch nicht existieren beim erstmaligen Ausführen der Befehlszeile, wird sie auch bei /LOG+: neu angelegt. Wenn wir also unter C:\Logs eine Logdatei des Kopiervorgangs anlegen wollen, muss die Befehlszeile wie folgt ausschauen:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XF *.m3u /XD „C:\Meine Musik\Dokumente“ /LOG+:C:\Logs\musik.log

Die normale Logfunktion von Robocopy schreibt allerdings jegliche Rückmeldung in die Logdatei, was diese sehr unübersichtlich gestaltet. Natürlich gibt es auch hier Parameter, die Abhilfe schaffen. Wenn noch ein /NP ergänzt wird, werden keine Fortschrittsinformationen in der Logdatei protokolliert. Mit /NFL werden Dateinamen nicht protokolliert, mit /NDL werden auch keine Verzeichnisse in die Logdatei eingetragen. Mit dem Parameter /NJH wird kein Auftragsheader in der Protokolldatei erzeugt, mit /NJS auch keine Zusammenfassung. Probieren Sie mit diesen Parametern am besten ein wenig aus.

Mit dem Parameter /TEE werden die Informationen sowohl in die Kommandozeile als auch in die Logdatei geschrieben. Mit /V können auch die Dateien protokolliert werden, die auf beiden Seiten identisch waren und daher übersprungen wurden.

Die Probierfunktion /L

Für alle, die erst einmal sehen möchten, was genau passieren würde, wenn Sie Robocopy mit den von Ihnen angegebenen Befehlen laufen lassen würden, bietet Robocopy eine Probierfunktion. Mit dem Parameter /L wird nur angezeigt, was Robocopy im Fall der Fälle tun würde. Ausgehend von unserem Beispiel müsste die Befehlszeile nun so aussehen:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XF *.m3u /XD „C:\Meine Musik\Dokumente“ /LOG+:C:\Logs\musik.log /L

Natürlich können alle zuvor genannten Parameter auch kombiniert werden. Eine mögliche Befehlszeile könnte also auch so aussehen:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XF *.m3u /XD „C:\Meine Musik\Dokumente“ /LOG+: C:\Logs\musik.log /NP /TEE /V /L

Die Monitor-Funktion /MON:n /MOT:n

Robocopy kann auch dauerhaft im Hintergrund werkeln. Dazu besitzt das Tool eine Monitor-Funktion, die mit zwei verschiedenen Parametern angesprochen werden kann. /MON:n bewirkt, dass Robocopy das Backup nach n Änderungen aktualisiert. Wenn Sie dort also eine 5 eintragen, wird Robocopy nach 5 Änderungen im Quellverzeichnis aktiv und aktualisiert Ihr Backup. /MOT:n lässt Robocopy nach n Minuten wieder aktiv werden. Wenn Sie /MON:n ohne Angabe von /MOT:n verwenden, setzt Robocopy als Zeitspanne eine Minute.

Sie können die Monitor-Funktion auch nur zu einer bestimmten Uhrzeit laufen lassen, dafür ist der Parameter /RH zuständig. Die Eingabe erfolgt im Format /RH:hhmm-hhmm. Um die Monitor-Funktion bspw. nur zwischen 18 und 20 Uhr laufen zu lassen, könnte eine Befehlszeile aussehen wie folgt:

robocopy „C:\Meine Musik“ „D:\Backup\Meine Musik“ /MIR /XF *.m3u /XD „C:\Meine Musik\Dokumente“ /LOG+: C:\Logs\musik.log /NP /TEE /V /MON:2 /RH:1800-2000

Ausgewählte Parameter im Überblick

/COPY:copyflag[s] Standard-Einstellung: /COPY:DAT
D: Datei-Inhalte S:NTFS ACLs
A: Attribute O: Besitzer
T: Zeitstempel U: Überwachungsinfo
/SEC äquivalent zu /COPY:DATS
/COPYALL kopiert alle Datei-Informationen – äquivalent zu COPY:DATSOU
/NOCOPY keinerlei Datei-Informationen werden kopiert
/E kopiert Unterverzeichnisse, auch die leeren
/PURGE löscht Dateien und Verzeichnisse im Ziel, die in der Quelle nicht mehr existieren
/MIR Spiegelung anlegen - Zusammenfassung von /E und /PURGE
/MON:n nach n Änderungen wird Robocopy automatisch wieder aktiv
/MOT:n nach n Minuten wird Robocopy automatisch wieder aktiv.
/RH:hhmm-hhmm Zeitraum, in dem Robocopy aktiv wird
/XF bestimmte Dateitypen von der Spiegelung ausschließen
/XD bestimmte Verzeichnisse von der Spiegelung ausschließen
/R:n Es werden n Versuche unternommen, den Vorgang erfolgreich abzuschließen (Standard: 1000000).
/W:n die Wartezeit nach einem erfolglosen Kopiervorgang (Standard 30)
/L den Probiermodus von Robocopy aktivieren
/LOG: bei jedem Syncvorgang eine neue Logdatei anlegen lassen
/LOG+: eine bestehende Logdatei fortführen
/NP keine Fortschrittsinformationen anzeigen
/TEE Informationen sowohl auf dem Bildschirm als auch in der Logdatei ausgeben

Robocopy im Netzwerk

Robocopy kann natürlich auch im Netzwerk verwendet werden. Es unterstützt dabei auch UNC-Pfade. Ein großer Vorteil, da man einem Netzlaufwerk nicht erst einen Laufwerksbuchstaben zuweisen muss, damit Robocopy eingesetzt werden kann. Um jedoch im Netzwerk ein Backup anlegen zu können, muss sichergestellt sein, dass das Benutzerkonto, welches Robocopy ausführt, Zugriff auf die Freigabe hat, ohne sich anmelden zu müssen. Robocopy selbst bietet keine Option, Benutzerdaten mit zu übertragen. Es gibt verschiedene Möglichkeiten, dies zu gewährleisten:

  1. Auf dem freigebenden PC existiert ein identisches Benutzerkonto. Hier ist keine Eingabe von Benutzerdaten notwendig. Wenn die Rechner in derselben Domain stehen, gilt dies auch.
  2. Wenn kein identisches Konto existiert, ist es ab XP aufwärts die einfachste Lösung, sich einmalig manuell am freigebenden PC anzumelden und die Anmeldedaten speichern zu lassen. Im Grundsatz muss eine Befehlszeile zum Anlegen eines Backups auf einer Freigabe aussehen wie folgt:
    robocopy /MIR /Z
    Das /Z, welches nur im Netzwerk funktioniert, kopiert die Dateien im „restartable mode“. Sollte eine Übertragung scheitern, aus welchem Grund auch immer, kann Robocopy die Datei bei der nächsten Ausführung fortsetzen, ohne nochmals die komplette Datei kopieren zu müssen.

    Robocopy hat natürlich auch einen Parameter, um Bandbreite im Netzwerk zu sparen. Dieser lautet: /IPG:n. Nach jedem erfolgreich übertragenen Paket pausiert Robocopy hier für die in Millisekunden angegebene Zeit.
  3. Eine Ausnahme bildet Windows 2000, da hier die Anmeldedaten nicht dauerhaft gespeichert werden können. Es gibt eine alternative Lösung über eine Batchdatei und die Verwendung von net use. Mittels net use müssen Sie sich zunächst am freigebenden PC anmelden, dann Robocopy ausführen und hinterher mit net use die Verbindung wieder trennen. Der Quelltext der Batchdatei müsste dabei aussehen wie folgt:
    net use \\Servername\Freigabe
    robocopy
    net use \\Servername\Freigabe /del


    Voraussetzung: Man darf auf die Freigabe zugreifen, ansonsten kann man den Schalter /USER benutzen.
    net use \\Servername\Freigabe /USER:
    robocopy
    net use \\Servername\Freigabe /del


    Wer auch noch das Passwort übergeben möchte, kann das auch tun, muss dabei aber in Kauf nehmen, dass das Passwort im Klartext in der Batchdatei steht.
    net use \\Servername\Freigabe /USER:
    robocopy
    net use \\Servername\Freigabe /del

Praktische Beispiele

Nachfolgend möchte ich Ihnen ein paar konkrete Anwendungsbeispiele zeigen, wie ich sie selber benutze. Ich erstelle regelmäßig Kopien meiner wichtigsten Daten, unter anderem auch vom Thunderbird-, Firefox- und Opera-Profil. Zwar habe ich meine Profile schon auf andere Partitionen verschoben, dennoch habe ich gerne ein Backup, falls man durch Änderungen am Profil selbiges mal zerstört.

Backup des Thunderbird-Profils

Um das Profil von Thunderbird zu sichern, welches unter L:\Profiles\Thunderbird liegt, verwende ich folgende Befehlszeile:

robocopy "L:\Profiles\Thunderbird" %bckdrv%%bckdir%\Thunderbird_Profil /MIR /LOG+:backup.log /NP

Diese Befehlszeile bewirkt, dass das komplette Thunderbird-Profil nach J:\Backup\Thunderbird_Profil gespiegelt wird. Da diese Befehlszeile innerhalb einer Batchdatei steht und ich gerne mit variablen Pfadangaben arbeite, habe ich zu Beginn der Batch die Variablen %bckdrv% und %bckdir% deklariert.

set bckdrv=J:
set bckdir=Backup

Backup des Firefox-Profils

Mein Firefox-Profil liegt unter L:\Profiles\Firefox. Um dieses Profil zu sichern, verwende ich folgende Befehlszeile:

robocopy "L:\Profiles\Firefox\profile" %bckdrv%%bckdir%\Firefox\profile /MIR /LOG+:backup.log /NP /XD "L:\Profiles\Firefox\profile\cache" "L:\Profiles\Firefox\profile\Cache.Trash"

Im Einzelnen bedeutet obige Befehlszeile: Spiegele das Verzeichnis L:\Profiles\Firefox\profile nach J:\Backup\Firefox\profile. Überspringe dabei die Ordner "L:\Profiles\Firefox\profile\cache" und "L:\Profiles\Firefox\profile\Cache.Trash". Außerdem führe die Datei backup.log fort.

Backup des Opera-Profils

Das Opera-Profil befindet sich unter L:\Profiles\Opera. Die dazugehörige Befehlszeile muss also lauten:

robocopy "L:\Profiles\Opera\profile" %bckdrv%%bckdir%\Opera\profile /MIR /LOG+:backup.log /XD "L:\Profiles\Opera\profile\cache4"

Wiederum lasse ich den Cache nicht kopieren, da dieser nicht wirklich für ein funktionierendes Profil vonnöten ist.

Eine kleine Beispieldatei

Hier können Sie eine kleine Batchdatei sehen, die die eben erwähnten Profile per Knopfdruck sichern kann. Diese Batchdatei habe ich in den Taskplaner eingebunden und eben aufgrund dieser Tatsache muss ich zunächst auf das Laufwerk und den Pfad wechseln, in dem dieses Script steht. In diesem Ordner wird auch die entsprechende Logdatei angelegt.

@echo off
set bckdrv=J:
set bckdir=Backup
set scriptdrv=L:
set scriptdir=Backupscripts
%scriptdrv%
cd %scriptdir%
REM Thunderbird
robocopy "L:\Profiles\Thunderbird" %bckdrv%%bckdir%\Thunderbird_Profil /MIR /LOG+:backup.log /NP
REM Firefox
robocopy "L:\Profiles\Firefox\profile" %bckdrv%%bckdir%\Firefox\profile /MIR /LOG+:backup.log /XD "L:\Profiles\Firefox\profile\cache" "L:\Profiles\Firefox\profile\Cache.Trash"
REM Opera
robocopy "L:\Profiles\Opera\profile" %bckdrv%%bckdir%\Opera\profile /MIR /LOG+:backup.log /XD "L:\Profiles\Opera\profile\cache4"

Automatisierung über den Taskplaner

Wenn Sie die Batchdatei in den Taskplaner einbinden, kann das Backup regelmäßig automatisiert aktualisiert werden. Beachten Sie bitte, dass Ihr Benutzerkonto unter Windows über ein Passwort verfügen muss, damit der Taskplaner verwendet werden kann.

Freigaben mitnehmen

Wer kennt es nicht? Eine bestehender Fileserver soll abgelöst oder auf eine neue Betriebssystemversion aktualisiert werden. Ein in-place Upgrade? Nein, lieber nicht – Altlasten möchte man vermeiden.

So ist es notwendig die bestehenden Netbios Shares zu sichern, um diese auch in das neue System importieren zu können. Denn bei einer Neuinstallation gehen die Einstellungen der Shares, sowie die Berechtigungen der Freigaben, die standardmäßig in der Registry hinterlegt sind, verloren. Wichtig ist es daher die benötigten Registry-Strukturen vor der Neuinstallation zu sichern.

Wichtig:
Die Informationen die in der Registry hinterlget sind, beziehen sich lediglich auf die Freigabe und die Berechtigungen. Dort werden keine Dateien, Homes oder Profile abgelegt!

So geht’s (Export):

  • Registry Editor öffnen (Regedit32.exe)
  • Zum Subtree “HKEY_LOCAL_MACHINE” wechseln
  • Dort mit der rechten Maustatse den Subtree “SYSTEM\CurrentControlSet\Services\LanmanServer\Shares” exportieren
  • die Registry-File auf einem separaten Laufwerk sichern

Export der Shares:

Import der Shares:

Wenn die Dateien und Ordner verschoben sind bzw. das neue Betriebssystem läuft, können die Shares importiert werden. Einfach innerhalb vom Registry Editor unter Import die Registry-Datei auswählen. Fertig! Nun ist noch ein Neustart notwendig um die Registry zu aktualisieren.

Der beschriebene Weg funktioniert sowohl unter Windows Server 2003, als auch unter Windows Server 2008 und 2008 R2.

Links:
http://support.microsoft.com/kb/125996

Dienstag, 17. August 2010

zwei ssh Jobs auf ESX definieren

Um ESX Server miteinander kommunizieren lassen zu können, müssen als erstes die Firewalls dahingehend geöffnet werden. Dies geschieht mit dem folgenden Befehl:

# esxcfg-firewall -e sshClient

Sonntag, 15. August 2010

netcat, dd und ganz viel Spaß

Die Problemstellung

Da ist ein Server, der einen kritischen Dienst bedient; leider ist dieser Server restlos veraltet (sowohl aus Hard- als auch aus Software-Sicht), und ein Update des kritischen Dienstes nicht so ohne weiteres möglich. Sie möchten den Datenbestand am liebsten 1:1 auf eine andere Maschine ziehen und auf dieser, ganz in Ruhe, einige Testläufe starten, Dinge probieren und einen Workflow zur Lösung dieses Problems entwickeln. Allerdings ist auf dem laufenden Server viel zu wenig Platz, als daß Sie ein Image des Systems machen und anschließend auf die neue Maschine übertragen könnten.

Ein möglicher Lösungsansatz


Ein guter Einsatzzweck für virtuelle Maschinen. Das zugrundeliegende System ist hier ein MacOS 10.6.3 mit Parallels 5; natürlich läßt sich das jedoch auf nahezu jedes beliebige Hostsystem und nahezu jede beliebige Virtualisierungssoftware übertragen. Der erste Schritt besteht darin, eine Standardinstallation eines Betriebssystems Ihrer Wahl durchzuführen – im folgenden Ubuntu genannt. Diese Prozedur ist in keiner Form außergewöhnlich und wird deshalb an dieser Stelle auch nicht weiter erläutert. Dieser virtuellen Maschine wird eine zweite virtuelle Festplatte untergeschoben — deren Größe orientiert sich an der Größe Quellsystems, in meinem Fall 10GB. Übers Netz wird aus dem virtuellen Ubuntu heraus ein vollständiger Dump des laufenden Quellsystems auf die zweite virtuelle Platte heraus vorgenommen. Schlußendlich wird über einen grub-Eintrag sichergestellt, daß das virtuelle System Dual-Boot-fähig ist und wahlweise nun entweder das ursprünglich installierte (Ziel-)Ubuntu oder aber der virtuelle (Quell-)Server gestartet werden kann. In diesem virtuellen Server können nun die benötigten Testläufe initiiert werden, und wenn man etwas schrottet, ist das gar nicht schlimm – die virtuelle Maschine läßt sich leicht wiederherstellen.

1. Die zweite virtuelle Platte einrichten

Nachdem dem Sytsem in der Parallels-Konfiguration eine zweite virtuelle Platte definiert wurde (vgl. Screenshot) und das virtualisierte Ubuntu gestartet ist, muß diese zweite Platte eingerichtet werden; wurde sie nachträglich definiert, wird sie naturgemäß beim Booten des Systems natürlich nicht erkannt. Also ersteinmal schauen, ob er sie überhaupt hat:

$ dmesg | grep sd
[ 0.936360] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 0.936780] sd 1:0:1:0: Attached scsi generic sg1 type 0
[ 0.936837] sd 0:0:0:0: [sda] 20972448 512-byte logical blocks: (10.7 GB/10.0 GiB)
...
[ 0.936946] sd 1:0:1:0: [sdb] 20972448 512-byte logical blocks: (10.7 GB/10.0 GiB)

...

Sieht schwer danach aus; sda ist ja unsere erste Festplatte, also die, auf der das Ubuntu liegt; sdb ist noch jungfräulich und leer, da wird nun das Serversystem draufgezogen…

2. Das System portieren

a) Auf dem Zielsystem

Auf dem Zielrechner, also in der Ubuntu-VM, wird ein Port geöffnet, über den die Daten hereinmarschieren und direkt auf die Platte /dev/sdb geschrieben werden:

root@ziel$ netcat -l 443 | dd of=/dev/sdb

In diesem Fall läuft der Transfer über Port 443, da die restriktiven Firewall-Regeln einen Extra-Eintrag für einen anderen Port erfordern würden. Nun kann der Transfer gestartet werden.

b) Auf dem Quellsystem

Vom Quellsystem aus wollen wir den gesamten Inhalt der Platte (in diesem Falle heißt sie /dev/sda1) übertragen; dies initiieren wir mit folgendem Befehl:

root@quelle$ dd if=/dev/sda1 | netcat ziel 443

Nun werden die Daten übertragen.

c) Den Fortschritt beobachten

Während der Übertragung, die — je nach Netzaustattung und Datenmenge — durchaus eine ganze Weile dauern kann, lungern nun zwei offene Shells auf dem Desktop herum, doch eine Statusanzeige gibt keine von beiden. Es gibt jedoch eine Möglichkeit, nämlich dem dd-Prozeß auf dem Zielhost ein USR1 zu schicken:

root@ziel$ ps aux | grep dd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
root 1563 0.0 0.0 3396 772 pts/0 S+ 15:38 0:00 dd of=/dev/sdb
...
root@ziel$ kill -USR1 1563

Das ergibt in der Shell des Zielsystems (in der der dd-Aufruf aktiv ist) eine Ausgabe in der Form:

2+1 records in
2+0 records out
1024 bytes (1.0kB) copied, 54.0942s, 24.2 kB/s

Entweder man entwirft sich einen Aufruf, der das automatisch alle paar Sekunden ausführt, oder man führt es manuell von Zeit zu Zeit aus — so sieht man jedenfalls, wieviele Daten bereits übertragen wurden. Die Übertragung ist beendet, wenn auch auf dem Quellrechner eine Ausgabe der Form »1196 bytes transferred in 0.000089 seconds (13431951 bytes/sec)« erscheint.

3. grub installieren

In meinem Fall war das mit einem simplen Aufruf erledigt:

root@zielrechner$ grub-install --force /dev/sdb

Hierdurch wurde meine grub-Konfig um folgende Zeilen erweitert:

## /boot/grub/grub.cfg
menuentry "Debian GNU/Linux, kernel 2.6.x (on /dev/sdb)" {
recordfail
insmod xfs
set root='(hd1,1)'
search --no-floppy --fs-uuid --set fb0a4e3a-0457-454d-8650-0bf853d17530
linux /boot/vmlinuz-2.6.x root=/dev/sdb
root=/dev/hdd ro

Damit funktioniert das Booten noch nicht wirklich: schauen Sie nochmal auf den Parallels-Screenshot. Die zweite Platte wurde als »Location IDE 1:1« definiert, sprich: als zweites Gerät am zweiten Controller, also hdd (die erste Platte ist auf »Location IDE 0:0« definiert und somit das erste Gerät am ersten Controller, also hda). Es muß also das oben stehende root=/dev/sdb durch root=/dev/hdd ersetzt werden.

Und das ist auch schon alles — nun kann das portierte System virtuell gestartet werden

4. Vorsicht!

Vor dem ersten Start des portierten Systems sollten sie sicherstellen, daß beim Booten nichts getötet werden kann; prüfen Sie beispielsweise sorgfältig, daß es nicht zu IP- oder DNS-Konflikten kommen kann, wenn Sie den ursprünglichen Server und Ihre virtualisierte Version parallel ins Netz hängen! Sorgen Sie weiterhin dafür, daß Dienste, die alle User im Netz betreffen können — DHCP beispielsweise — nicht das gesamte Netzwerk verwirren oder gar lahmlegen! Überlegen Sie sorgfältig, um welche Dienste es sich in Ihrem Falle konkret handeln könnte, und handeln Sie mit Bedacht.

Im laufenden Ubuntu-System können Sie die zweite Platte leicht mounten:

root@ziel$ mount /dev/sdb /mnt

Wenn nötig, führen Sie noch ein chroot /mnt aus; durchforsten Sie nun das System vor dem ersten Booten auf Dinge, die den laufenden Betrieb stören könnten. Starten Sie das System nur dann, wenn Sie sich sicher sind, daß es funktionieren wird. Starten Sie es sonst ausschließlich ohne Netzwerkinterface.

Dienstag, 29. Juni 2010

Zeitzone neu setzen

Verändern der Zeitzone in Linux
Wenn die Zeitzone nicht stimmt, wird ntp zwar ordnungsgemäß arbeiten,
aber man wundert sich dass
die Uhrzeit nicht stimmt.

Mit diesem Befehl kann man die Zeitzone neu setzen
$ sudo dpkg-reconfigure tzdata

Mit diesem Befehl bekommt man die Zeitzone herau
$ cat /etc/timezone
Europe/Berlin

Mittwoch, 21. April 2010

cmds

wuauclt /detectnow
wuauclt /reportnow