Johannes' mirroring-Seite


Johannes Franken
<jfranken@jfranken.de>



Auf dieser Seite stelle ich verschiedene Möglichkeiten vor, Kopien einer Verzeichnisstruktur unter Verwendung von Internetprotokollen zu erstellen und aktualisieren.

Inhalt

  1. Übersicht
    1. Anforderungen an Kopierprogramme
    2. Bewertung einiger Kopierprogramme
  2. Details zu den Kopierprogrammen
    1. wget
    2. rsync
    3. tar
    4. cp

Übersicht

Anforderungen an Kopierprogramme

Bewertung einiger Kopierprogramme

Programm Transport Umfang Performance
lokal http(s) ftp pipe delete filedate permissions differentiell partiell Kompression
wget - X X - - X - X X -
cp -duRp X - - - - X X X - -
tar X - - X - X X - - X
rsync X - - X X X X X X X

Zusammenfassung: rsync deckt die meisten Anforderungen ab. Wer mit dem Server über http oder ftp kommunizieren muss, sollte wget verwenden.

Details zu den Kopierprogrammen

wget

Beschreibung

wget kopiert Dateien über http, https oder ftp von entsprechenden Servern. Zusätzlich kann es Wenn der Server das Dateidatum übermittelt, übernimmt wget dieses für die empfangengen Dateien und kann so ein erneutes Downloaden bereits vorhandener Dateien vermeiden.

Die erstellte Kopie weicht in folgenden Punkten vom Original ab:

Aufruf:
wget Optionen URL

Interessante Optionen sind:
Option Auswirkung
-N die Datei nicht downloaden, wenn sie bereits lokal vorliegt und das Dateidatum übereinstimmt.
-nH --cut-dirs=2 Im rekursiven Modus erstellt wget normalerweise Verzeichnisse für den Hostnamen und alle in der URL genannten Unterverzeichnisse. Die Option -nH verhindert das Anlegen der Hostverzeichnisse und --cut-dirs=2 das Anlegen der ersten beiden Verzeichnisse der übergebenen URL. Beispiel: wget -r -nH --cut-dirs=2 http://www.jfranken.de/homepages/johannes/vortraege legt als erstes das Verzeichnis vortraege an.
-k ersetzt in HTML-Dateien enthaltene, absolute URLs durch relative. Vorsicht, das funktioniert nicht in allen Situationen.
-r -np (rekursiv, no-parent): Wenn die übergebene URL eine HTML-Datei liefert, alle von ihr referenzierten Elemente (insb. Verweise und Grafiken) ebenfalls holen und das Verfahren für diese wiederholen. Die Option -np verhindert, dass dabei das übergebene Verzeichnis nach oben hin verlassen wird. Referenzen auf andere Hosts werden ignoriert, es sei denn, man gibt den Parameter -H an.
-p -l 10 Der Parameter -l 10 beschränkt die Rekursionstiefe für -r auf 10 Ebenen. Ohne Angabe der Rekursionstiefe werden maximal 5 Ebenen verfolgt. Die Angabe -l 0 bedeutet unendliche Tiefe, und ebensolche Probleme im Filesystem bei zyklischen Verweisen. Der Parameter -p verhindert, dass die Grafiken der HTML-Dateien der letzten Ebene fehlen.
-H -Djfranken.de,our-isp.org Auch Verweisen auf andere Server folgen, allerdings nur in den Domains jfranken.de und our-isp.org.
-nv Verhindert die Ausgabe von Debugging-Meldungen.
wget wird seine ftp- und http-Zugriffe automatisch an einen Proxyserver richten. wenn die Environmentvariable http_proxy oder ftp_proxy gesetzt sind, z.B. mittels
$ export http_proxy=http://jfranken:secret@proxy.jfranken.de:3128/
$ export ftp_proxy=$http_proxy

Verweise

 

rsync

Beschreibung

rsync kann Dateien oder Verzeichnisse synchronisieren über Bei Verwendung mit einer remote shell oder eines rsyncd muss die andere Seite lokal sein.
Mit den passenden Parametern aufgerufen, überträgt rsync nur die Veränderungen innerhalb der Dateien, bewahrt Dateiattribute und löscht alle Dateien aus dem Zielverzeichnis, die in der Quelle gelöscht worden sind.

Aufruf:
rsync Optionen Quelle(n) Ziel

Interessante Optionen sind:
Option Auswirkung
-a (archive mode): Kopiert alle Unterverzeichnisse, allerhand Attribute (Symlinks, Rechte, Dateidatum, Gruppe, Devices) und (wenn man root ist) den Eigentümer der Dateien.
-v --progress (verbose): -v gibt während der Übertragung eine Liste der übertragenen Dateien aus. Wenn man zusätzlich --progress setzt, zeigt rsync dabei laufend die Zahl der übertragenen Bytes und den Fortschritt in Prozent an.
-n (dry-run): Nichts schreiben, sondern den Vorgang nur simulieren.
-z -e Programm Wenn in der Quelle oder dem Ziel ein Doppelpunkt enthalten ist, interpretiert rsync den Teil vor dem Doppelpunkt als Hostnamen und kommuniziert über das mit -e spezifizierte Programm, dem es folgende Parameter übergibt:
  • als Quelle: hostname rsync --server --sender . Quellpfad
  • als Ziel: hostname rsync --server . Zielpfad
Als Programm bietet sich insbesondere ssh an. Wenn man dem Programm weitere Parameter voranstellen möchte, sind diese mit dem Programm in Anführungszeichen zu fassen.
Der Parameter -z bewirkt, dass rsync die Daten komprimiert überträgt.
--delete --force --delete-excluded löscht alle Einträge aus dem Zielverzeichnis, die in der Quelle nicht (mehr) vorhanden sind.
--partial Nach einem Verbindungsabbruch die unvollständig empfangenen Dateien nicht löschen. So kann die Übertragung der Datei bei einem folgenden rsync-Aufruf fortgesetzt werden.
--exclude=Pattern Die Dateien ignorieren, die dem übergebenen Pattern entsprechen, z.B. --exclude *~ . Den umfangreichen Exclude-Möglichkeiten widmet sich ein ganzes Kapitel in der rsync(1) manpage.
-x Schließt alle Dateien auf Filesystemen aus, die in das Quellverzeichnis hineingemountet sind.
Zur Notation von Quelle und Ziel:

Verweise

 

tar

tar war usprünglich zur Datensicherung auf Magnetbänder entwickelt worden. Es wandelt ganze Verzeichnisse in einen Strom um und zurück. Indem man diesen Strom durch pipes auf andere Rechner leitet, kann man Kopien ganzer Verzeichnisse durch ein Internet übertragen.

Die erstellte Kopie weicht in folgendem Punkt vom Original ab: Die folgende Befehlsfolge kopiert das Verzeichnis mydir in das /tmp-Verzeichnis des Rechners gate
$ tar cf - mydir/ | ssh gate 'cd /tmp && tar xpvf -'


In meinem Vortrag über netcat zeige ich, wie man tar ohne remote shell über beliebige TCP-Verbindungen tunnelt.

cp

cp ist das Standardwerkzeug zum Kopieren von Dateien. Mit den Parametern -duRp kopiert es auch Verweise, Dateirechte, Zeitstempel sowie Unterverzeichnisse und zwar nur für die Dateien, die seit der letzten Kopie hinzugekommen oder verändert worden sind.

Mehr dazu findet sich in der cp(1) manpage

$Id: mirroring.wml,v 1.7 2006/01/06 19:54:46 jfranken Exp $ [ChangeLog]
$Id: template.inc,v 1.82 2010-09-04 12:58:17 jfranken Exp $ [ChangeLog]
© Johannes Franken. Impressum und Haftungsausschluß
Valid XHTML 1.0!