Wenn dies Dein erster Besuch hier ist, musst Du dich kostenlos anmelden, bevor Du Beiträge verfassen und Fragen stellen kannst.
Klicke auf nachfolgenden Link, um die Anmeldung zu starten. - Anmeldung jetzt starten.

Windows RoboCopy durch MacOS RSync ersetzen

  1. vor 2 Jahren

    Hallo
    Ich möchte mit einer Terminal-Datei (damit meine ich also das, was beim Mac anstelle von BAT-Dateien beim PC ausgeführt wird, keine Ahnung, welchen Dateityp eine solche Datei haben muss) Datensicherung machen wie man das beim PC zum Beispiel mit RoboCopy machen kann. Bitte hier keine Diskussionen über TimeMachine oder sonstwas anderes.
    Die Hilfe zu rsync habe ich mir schon in eine Textdatei kopiert. Die ist leider komplett in englisch. Gibts die auch in deutsch ?
    Hat jemand schon Erfahrungen mit rsync und kann hier konkret beschreiben, wie man es zum exakten Spiegeln von Datenstrukturen verwenden kann ?
    Schappi

  2. Alex

    10 Aug 2017 Administrator 10.13 (High Sierra) MacBook Air iMac iPhone 6

    Hallo Schappi,

    unter macOS kannst du diverse Programmiersprachen nutzen. Zum einen ist das, was du meinst wohl eine .sh-Datei (Shell) du kannst aber auch bspw. in Python oder Perl programmieren.

    Der Vorteil von Time Machine ist die automatisierte Rücksicherung. Also die Möglichkeit auch über die internen Funktionen von macOS das System aus einem Backup wiederherstellen zu können. Außerdem würdest du mit rsync nur einen Stand (den letzten) sichern und nicht wie bei Time Machine alle Änderungen ab einen bestimmten Datum.

  3. Hallo
    Das ist genau das, was ich will: genau eine Kopie. Ich möchte eine absolut identische Kopie meiner Datendateien. Von rsync erhoffe ich mir das. Leider habe ich weder von der MacOS-Shell noch von Python oder Perl eine Ahnung.
    Bisher habe ich mich mangels Zeit noch nicht damit beschäftigt. Es ist eines der Dinge, die mein virtueller PC machen darf.
    Schappi

  4. Mac OS 10.12.5
    Hallo
    Im MacUser-Forum habe ich den Beitrag
    https://www.macuser.de/threads/automatische-backups-und-syncs-unter-os-x.210626/
    gefunden. Der hat mir geholfen herauszufinden, wie man grundsätzlich Sicherungen mit RSYNC machen kann. Das Prinzip der Verwendung von rsync ist darin gut zu sehen. Allerdings fehlen in den Sicherungen immer wieder Verzeichnisse und Dateien. RSYNC scheint nicht zuverlässig zu arbeiten oder die Befehle müssen anders lauten.
    Ich habe ganz gezielt nach dem Sichern neue Dateien in zu sichernde Verzeichnisse kopiert und wieder eine Sicherung gemacht. Die werden nie kopiert. Es wird nur eine Erstkopie vom Festplattenstand gemacht, danach geht das nicht mehr. So in der Form ist rsync nutzlos für mich.
    Meine Hoffnung ist, dass jemand mit Ahnung mitliest und hier mal alle meine Fehler korrigiert.

    Allgemeines:
    Werden Ausgaben (zum Beispiel die Ausgabe auf den Bildschirm) umgeleitet, so erzeugt > eine neue Datei und >> hängt die Informationen an die Datei an.
    Die Verzeichnisse müssen auf dem Zieldatenträger nicht angelegt werden entgegen den Informationen im Originalbeitrag (vielleicht liegt das ja an dem rsync von Mac OS 10.12.5).
    Wenn ich hier von Linux schreibe, meine ich natürlich das Mac-OS-Programm Terminal.app. Sieht für mich wie Linux aus, ist sicher auch welches, was da drin gemacht wird.
    Die für die Sicherung benötigten Dateien (selbstgeschriebenes Programm, Dateien mit zu sichernden/auszuschließenden Dateien/Verzeichnissen) müssen alle als einfache Textdateien (mit TextEdit.app) gespeichert werden.

    So geht´s:
    Eine Datei mit Inhalt in der folgenden Form mit dem TextEdit schreiben und speichern.

    #!/bin/sh
    cd /Volumes/Fotos/das_nicht
    
    #Variablen für das Protokoll und die Verzeichnisse
    declare PROTOKOLL="Sicherung.TXT"
    
    #Log schreiben (Anfangszeit)
    /bin/echo "Sicherung begonnen um:" > $PROTOKOLL
    /bin/date >> $PROTOKOLL
    
    declare QUELLE="/Volumes/Fotos"
    declare ZIEL="/Volumes/S_Fotos"
    /bin/echo "sichern ...: " $QUELLE
    /usr/bin/time /usr/bin/rsync -avE --delete --exclude-from Fotos-ohne.TXT --modify-window=1 -r $* $QUELLE/ $ZIEL/ >> $PROTOKOLL
    
    declare QUELLE="/Volumes/Musik"
    declare ZIEL="/Volumes/S_Musik"
    /bin/echo "sichern ...: " $QUELLE
    /usr/bin/time /usr/bin/rsync -avE --delete --exclude-from Musik-ohne.TXT -r $* $QUELLE/ $ZIEL/ >> $PROTOKOLL
    
    #Log schreiben (Endzeit)
    /bin/echo "Sicherung beendet um:" >> $PROTOKOLL
    /bin/date >> $PROTOKOLL
    /bin/echo "--------------------------------------" >> $PROTOKOLL

    Diese Datei ausführbar machen (muss nur einmal gemacht werden, der Paramater "x" bleibt in den Dateieigenschaften auch bei Änderungen drin). Dazu das Programm Terminal.app starten (unter PROGRAMME-Dienstprogramme) und folgenden Befehl eintippen:

    cd /Volumes/<PFAD MIT DER DATEI>
    chmod +x <SICHERUNGSDATEINAME>

    Die Angaben in <> müssen durch die entsprechenden Werte für das Verzeichnis und den Name der Datei ersetzt werden.
    Da ich mich mit Linux/Terminal.app nicht auskenne, wäre es schön, wenn jemand mit Ahnung das alles mal ganz genau beschreibt.

    So in etwa funktionieren die einzelnen Programmzeilen:
    #!/bin/sh
    Keine Ahnung, wofür das ist.
    cd /Volumes/Fotos/das_nicht
    Mit CD wechselt Linux in ein Verzeichnis, in dem Fall in das Verzeichnis "das_nicht" auf der Partition (=Festplatte/SSD) mit dem Name "Fotos". Alle Datenträgerangaben müssen mit /Volumes anfangen.
    #...
    Alle Zeilen mit einem Doppelkreuz (#) am Anfang sind nur Kommentare, die machen nichts.
    declare PROTOKOLL="Sicherung.TXT"
    Mit DECLARE wird eine Variable angelegt und mit einem Wert gefüllt. Die Variable PROTOKOLL erhält hier den Wert "Sicherung.TXT". Da hier kein Pfad drin steckt, wird diese Datei in dem Verzeichnis angelegt und weitergeschrieben, in dem sich das Programm zur Ausführungszeit befindet. Das ist das Verzeichnis "das_nicht".
    /bin/echo "Sicherung begonnen um:" > $PROTOKOLL
    /bin/date >> $PROTOKOLL

    Der Befehl ECHO schreibt die Angabe dahinter auf die Standardausgabe (Bildschirm) oder mit dem Umleitungszeichen > in diesem Fall in die Datei, die in der Variable PROTOKOLL angegeben ist. DATE schreibt Datum und Uhrzeit.
    Weil vermutlich Linux keine Ahnung hat, wo die eigenen Befehle stecken, muß man immer noch den Pfad dahin mit schreiben, dafür stehen /bin/ und /usr/bin/.
    /usr/bin/time /usr/bin/rsync -avE --delete --exclude-from LW_E-ohne.TXT -r $* $QUELLE/ $ZIEL/ >> $PROTOKOLL
    Wofür /usr/bin/time vorne dran steht, kann ich nicht sagen. RSYNC kopiert die Dateien. Dafür werden Parameter übergeben:
    - leitet Parameterangaben ein
    a Archiv-Parameter: Vorhandensein sowie Datum/Uhrzeit/Eigenschaften werden verglichen.
    v Datenmenge für Anzeige/Protokollierung
    E erweiterte Dateieigenschaften
    Leerzeichen trennen die einzelnen Angaben (Parameter, Variablen, direkte Verzeichnis-/Dateiangeben)
    --delete gelöschte Dateien der Quelle auch im Ziel gelöscht
    --exclude-from Datei angeben, in der steht, was NICHT gesichert werden soll.
    --modify-window=1 muss angegeben werden wenn FAT-Partitionen beteiligt sind, damit korrekte Zeitangaben verglichen werden
    -r auch in Unterverzeichnissen
    $* alle Dateien
    $QUELLE Variable mit der Angabe der zu sichernden Festplatte/des zu sichernden Verzeichnisses.
    $ZIEL Variable mit der Angabe des Ziellaufwerks.
    >> Hinzufügen zu ...
    $PROTOKOLL ... der in dieser Variable angegebenen Datei.

    Nun muss noch die Datei mit den auszuschließenden Verzeichnissen und Dateien geschrieben werden. Am Mac sieht man im Finder nicht, was MacOS so für Müll auf die Platte schreibt. Aber auch Windows legt Dinge an, die besser nicht gesichert werden (Papierkorb, Systemvolume-Information). Diese Datei sollte in etwa so aussehen:

    */.Trash
    .*
    Recycled
    ServicePacks
    System Volume Information

    Damit werden die durch MacOS angelegten Verzeichnisse mit PUNKT am Anfang nicht mit gesichert und ein paar Windows-Verzeichnisse (bei mir teilen sich Windows und MacOS die Festplatte mit den Fotos).
    Nun kann das Sicherungsprogramm gestartet werden mit (an der Eingabeaufforderung von Terminal.app):

    sudo ./<SICHERUNGSDATEINAME>

    Wenn bis jetzt alles richtig gemacht wurde, wird nun die Sicherung erstellt. Man braucht bei ganzen Festplatten Geduld und sollte während der Sicherung keine Änderung an den zu sichernden Daten vornehmen.
    Wer keine Variablen mag, kann das auch alles ohne machen:

    /bin/date > Sicherung.TXT
    /usr/bin/time /usr/bin/rsync -avE --delete --exclude-from Fotos-ohne.TXT -r $* /Volumes/Fotos/ /Volumes/S_Fotos/ >> Sicherung.TXT
    /usr/bin/time /usr/bin/rsync -avE --delete --exclude-from Musik-ohne.TXT -r $* /Volumes/Musik/ /Volumes/S_Musik/ >> Sicherung.TXT

    Die Option -r muss eigentlich nicht angegeben werden.
    Bestimmt läßt sich das ganze noch optimieren. Wenn jemand sich auskennt und hier nette Tipps gibt, wäre das sehr schön.
    Schappi

 

oder registriere Dich, um zu antworten!