Pit: rsync auf mehrere Verzeichnisse sichern?

Hallo,

ich möchte meinen lokalen Änderungen auf 3 Zielverzeichnisse sichern. Bisher mache ich das mit 3 aufeinanderfolgenden rsync-Befehlen.

Frage: Kann man das auch in einem Befehl machen?

Hintergrund: In diesem Fall habe ich kein Schlüsselpaar erzeugt und muß 3 mal das Passwort per Hand eintragen. Ginge es in einem Befehl, müßte ich das nur 1 mal machen.

Pit

  1. Tach!

    Frage: Kann man das auch in einem Befehl machen?

    Fragen erkennt man sehr gut am Satzbau und dem Fragezeichen, eine weitere Einleitung ist in schriftlicher Kommunikation nicht nötig. Abgesehen davon kann man alls Befehle in einem Shellscript zusammenfassen. Das Passwort könnte man als Parameter übergeben, aber das ist keine so gute Idee, weil es auf diese Weise auch in der .bash_history landet. Besser mit read als Nutzereingabe abfordern und den rsyncs als Parameter übergeben.

    Hintergrund: In diesem Fall habe ich kein Schlüsselpaar erzeugt

    Am besten ist es, dieses Problem durch Erstellung oder Verwendung eines vorhandenen Schlüsselpaares zu beheben.

    dedlfix.

    1. Hallo,

      Abgesehen davon kann man alls Befehle in einem Shellscript zusammenfassen.

      Das habe ich ja gemacht. Alle 3 Befehle durch ein Semikolon getrennt und erhalte 3 x Passwortabfrage.

      Am besten ist es, dieses Problem durch Erstellung oder Verwendung eines vorhandenen Schlüsselpaares zu beheben.

      Das wollte ich in diesem Fall nicht, in einem anderen Fall mache ich es so, aber hier nicht. Daher meine Frage. Geht das denn nicht (3 Verzeichnisse in einem Befehl angeben)?

      Pit

      1. Tach!

        Abgesehen davon kann man alls Befehle in einem Shellscript zusammenfassen.

        Das habe ich ja gemacht. Alle 3 Befehle durch ein Semikolon getrennt und erhalte 3 x Passwortabfrage.

        Ich schrieb doch, wie man das lösen kann. Frag das Passwort zuvor ab, leg es in eine Variable, übergibt diesen Variableninhalt an den Passwort-Parameter von rsync.

        Daher meine Frage. Geht das denn nicht (3 Verzeichnisse in einem Befehl angeben)?

        Eine Suche nach "rsync multiple destinations" gibt ein paar Ergebnisse, aber die sehen nicht gerade einfach aus. Wie wäre es, wenn du anschließend an den rsync von der Quelle zum ersten Ziel die anderen beiden Ziele mit dem ersten Ziel als Quelle befüllst. Vorausgesetzt, dass diese Zielverzeichnisse alle lokal sind. Dann spart man auch noch den zusätzlichen Netzwerkverkehr.

        dedlfix.

        1. Hi,

          Eine Suche nach "rsync multiple destinations" gibt ein paar Ergebnisse, aber die sehen nicht gerade einfach aus. Wie wäre es, wenn du anschließend an den rsync von der Quelle zum ersten Ziel die anderen beiden Ziele mit dem ersten Ziel als Quelle befüllst.

          Na die Idee finde ich klasse, das werde ich versuchen. Danke.

          Pit

          1. Hi,

            Eine Suche nach "rsync multiple destinations" gibt ein paar Ergebnisse, aber die sehen nicht gerade einfach aus. Wie wäre es, wenn du anschließend an den rsync von der Quelle zum ersten Ziel die anderen beiden Ziele mit dem ersten Ziel als Quelle befüllst.

            Na die Idee finde ich klasse, das werde ich versuchen. Danke.

            Hallo,

            da ich rsync hierfür wohl nicht nutzen kann, gibt es in cp eine Option, verzeichnisse auszuschließen?

            Pit

            1. Tach!

              da ich rsync hierfür wohl nicht nutzen kann, gibt es in cp eine Option, verzeichnisse auszuschließen?

              rsync arbeitet auch im lokalen Dateisystem.

              dedlfix.

              1. Hallo,

                rsync arbeitet auch im lokalen Dateisystem.

                Ich hatte eine Fehlermeldung bekommen… "The source and destination cannot both be remote." Wie ist denn die Syntax, wenn ich auf demselben Server rsync anwenden möchte?

                Pit

                1. Tach!

                  Wie ist denn die Syntax, wenn ich auf demselben Server rsync anwenden möchte?

                  Man-Pages existieren. Ansonsten fast genauso wie bei cp: rsync -a quellverzeichnis zielverzeichnis ohne irgendwelche Hostnamen.

                  dedlfix.

                  1. rsync -a quellverzeichnis zielverzeichnis ohne irgendwelche Hostnamen.

                    Und woher weiß dann rsync, ob er das verzeichnis lokal oder auf dem Server suchen soll?

                    Pit

                    1. Tach!

                      rsync -a quellverzeichnis zielverzeichnis ohne irgendwelche Hostnamen.

                      Und woher weiß dann rsync, ob er das verzeichnis lokal oder auf dem Server suchen soll?

                      Ohne Host-Angabe ist ein lokales Verzeichnis gemeint. Das hast du doch bereits bei deinen drei bisherigen rsync-Aufrufen. Da gibst du doch auch einen Verzeichnisnamen ohne Host an, das sich dann auf ein loakles Verzeichnis bezieht. (Ansonsten gäbs ja die Fehlermeldung mit den zwei remote-Zielen/-Quellen.)

                      dedlfix.

                      1. Hi,

                        Ohne Host-Angabe ist ein lokales Verzeichnis gemeint. Das hast du doch bereits bei deinen drei bisherigen rsync-Aufrufen. Da gibst du doch auch einen Verzeichnisnamen ohne Host an, das sich dann auf ein loakles Verzeichnis bezieht. (Ansonsten gäbs ja die Fehlermeldung mit den zwei remote-Zielen/-Quellen.)

                        Klar. Aber mein jetziges Ziel ist doch folgendes:

                        1. rsync dir1 local auf remote:dir1

                        2. rsync von remote:dir1 auf remote:dir2

                        3. rsync von remote:dir1 auf remote:dir3

                        Pit

                          1. rsync dir1 local auf remote:dir1
                          2. rsync von remote:dir1 auf remote:dir2
                          3. rsync von remote:dir1 auf remote:dir3

                          Starte rsync auf dem remote-server. Der ist dann lokal (und dein bisheriger lokaler nunmehr host1) und der Spaß sieht ergo so aus:

                          1. rsync host1:/dir1/* auf /dir1
                          2. rsync /dir1 auf /dir2
                          3. rsync /dir1 auf /dir3

                          Leg Dir dazu ein Skript an und starte es per ssh. Du kannst soweit gehen, einen Benutzer (z.B. excecBackupUser) anzulegen, der genau dieses Skript als shell hat und mit visudo sogar benötigte Rechte ohne Passworteingabe eingeräumt bekommt (man 5 sudoers oder das Studium der Kommentare in /etc/sudoers hilft).

                          Dann reicht ssh excecBackupUser@remote.

                        1. Tach!

                          Aber mein jetziges Ziel ist doch folgendes:

                          1. rsync dir1 local auf remote:dir1

                          2. rsync von remote:dir1 auf remote:dir2

                          3. rsync von remote:dir1 auf remote:dir3

                          "Vorausgesetzt, dass diese Zielverzeichnisse alle lokal sind. Dann spart man auch noch den zusätzlichen Netzwerkverkehr."

                          Geht also nicht in deinem Fall. Jedenfalls nicht so. Man kann aber auch auf einem Remote-Ziel ein Kommando ausführen. ssh kann das beispielsweise so: ssh user@host "echo foo". Allerdings gibts da wieder ein Problem mit dem Password. Man kann es nicht als Parameter übergeben. Nimm mal doch lieber einen Key.

                          dedlfix.

                2. Wie ist denn die Syntax, wenn ich auf demselben Server rsync anwenden möchte?

                  Wenn rsync läuft, dann geht auch ssh:

                  ssh userName@einServer rsync /sourceDir userName@andererServer:/targetDir
                  

                  ich möchte meinen lokalen Änderungen auf 3 Zielverzeichnisse sichern. Bisher mache ich das mit 3 aufeinanderfolgenden rsync-Befehlen.

                  Frage: Kann man das auch in einem Befehl machen?

                  Wieso das denn? rsync ist super! Man sollte mal das Manual lesen und daran denken, dass es a) den mount-Befehl und b) immer ein root-Verzeichnis gibt. Und dann auf Ideen kommen:

                  1. Lösung:

                  mkdir /tmp/mutter;
                  mkdir /tmp/mutter/kind1;
                  mkdir /tmp/mutter/kind2;
                  mkdir /tmp/mutter/kind3;
                  
                  mount -B /was1 /tmp/mutter/kind1;
                  mount -B /was2 /tmp/mutter/kind2;
                  mount -B /was3 /tmp/mutter/kind3;
                  
                  rsync [OPTIONEN] /tmp/mutter/* userName@andererServer:/targetDir/;
                  
                  if (umount /tmp/mutter/kind1 && umount /tmp/mutter/kind2 && umount /tmp/mutter/kind3 ); then
                     rm -r /tmp/mutter/;
                  fi
                  
                  

                  Das kann aber auch zu viel oder zu kompliziert sein, denn es geht viel einfacher:

                  2. (wohl bessere) Lösung:

                  Datei: rsync.excludes: (Schließt erst einmal alles aus)

                  /*
                  /.*
                  

                  Datei rsync.includes: (Diese Dateien und Ordner werden dennoch gesichert/Übertragen)

                  /home
                  /var/spool/mail
                  /var/lib/mysql
                  

                  … und dann ganz einfach:

                  rsync  -avu  --exclude-from="/path/to/rsync.excludes" --include-from="/path/to/rsync.excludes" / userName@andererServer:/targetDir/;
                  

                  Beides geht auch via ssh. Zudem sollte Dich man 5 crontab oder crontab -e auf Ideen bringen...

                  1. Hi,

                    da ich Deine Lösung nicht verstehe, frage ich mal, ob wir ggf. aneinander vorbei reden? Ich hab in der Antwort auf dedlfix nochmal genau gepostet, was ich brauche. Was crontab angeht, das ist in diesem Fall nicht nötig.

                    Pit

                    1. ob wir ggf. aneinander vorbei reden?

                      Du hast um 13:15, also erst nach meinem Beitrag (von 12:52) Dein Problem konkretisiert, genauer ganz anders dargestellt. Die Antwort auf diese Konkretisierung/Richtigstellung steht schon da. Wenn es das auch nicht ist, dann poste Deine wirkliche Zielsetzung ohne fehlleitende Abstrahierung.

                      Und wenn ich schon dabei bin: Ich verstehe absolut nicht, warum die Nutzung von Keys verweigerst. Würdest Du uns bitte Deine Gründe dafür mitteilen?

                      Was crontab angeht, das ist in diesem Fall nicht nötig.

                      Aber womöglich eine verdammt gute Idee. Das spart nämlich Gefummel mit ssh und Rechten ...

                      Eine weitere Idee wäre übrigens nfs. (Auf remote Verzeichnisse exportieren, auf lokal mounten, dann rsync). Verwaltest Du beide Server als root?

                      1. sshfs käme auch in Frage.

                  2. rsync  -avu  --exclude-from="/path/to/rsync.excludes" --include-from="/path/to/rsync.excludes" / userName@andererServer:/targetDir/;
                    

                    Da hat sich ein Fehler eingeschlichen. Es muss natürlich --include-from="/path/to/rsync.includes" heißen.

  2. Hi,

    ich möchte meinen lokalen Änderungen auf 3 Zielverzeichnisse sichern. Bisher mache ich das mit 3 aufeinanderfolgenden rsync-Befehlen.

    Bisher scheint ja etwas Unklarheit zu herrschen, was die genaue Aufgabe ist.

    Welche Variante hast Du denn?

    A)
    local/dir1 -> server1/dir1
    local/dir2 -> server2/dir2
    local/dir3 -> server3/dir3
    

    oder

    B)
    local/dir1 -> server1/dir1
    local/dir1 -> server2/dir1
    local/dir1 -> server3/dir1
    

    oder

    C)
    local/dir1 -> server1/dir1
    local/dir2 -> server1/dir2
    local/dir3 -> server1/dir3
    

    oder

    D)
    local/dir1 -> server1/dir1
    local/dir1 -> server1/dir2
    local/dir1 -> server1/dir3
    

    bei A) oder B) wird wohl nix anderes übrigbleiben, als 3mal das Paßwort zu übergeben.

    bei C) wäre die Lösung

    rsync local/dir1 local/dir2 local/dir3 server1
    

    bei D) wüßt ich spontan keine Lösung.

    cu,
    Andreas a/k/a MudGuard

    1. Hallo,

      Welche Variante hast Du denn?

      D)
      local/dir1 -> server1/dir1
      local/dir1 -> server1/dir2
      local/dir1 -> server1/dir3
      

      bei D) wüßt ich spontan keine Lösung.

      Es ist Variante D…

      Pit

      1. Tach!

        Welche Variante hast Du denn?

        D)
        local/dir1 -> server1/dir1
        local/dir1 -> server1/dir2
        local/dir1 -> server1/dir3
        

        bei D) wüßt ich spontan keine Lösung.

        Es ist Variante D…

        Einmal rsync nach dir1 und einen Cronjob auf server1 einrichten, der regelmäßig dir1 nach dir2 und dir3 synchronisiert. Backups macht man sowieso ungern per Hand, so dass eigentlich auch der erste Schritt automatisiert werden müsste.

        dedlfix.

        1. Hi,

          Einmal rsync nach dir1 und einen Cronjob auf server1 einrichten, der regelmäßig dir1 nach dir2 und dir3 synchronisiert. Backups macht man sowieso ungern per Hand, so dass eigentlich auch der erste Schritt automatisiert werden müsste.

          Das ist in disem Fall aber nicht sinnvoll. Es geht hier darum, eine lokale Entwicklung auf 3 Nutzer zu übertragen. Da bringts mir nichts, wenn das nachts um 3 geschieht, wenn ichs um 15 Uhr nachmittags schon benötige.

          Wenn server1 abraucht, sind alle drei Sicherungsverzeichnisse weg.

          Das ist Unsinn, denn die Sicherung des servers läuft natürlich nachts per Cron, dann aber auf einen Backupserver, der hier in der Aufgabenstellung völlig unberücksichtigt bleibt (was für diese Aufgabenstellung auch gerne so bleiben darf).

          Pit

          1. Hi,

            Es geht hier darum, eine lokale Entwicklung auf 3 Nutzer zu übertragen.

            bearbeiten diese 3 Nutzer die Sachen, oder brauchen die das nur zum Angucken?

            Wenn letzteres: genau diese 3 User in eine Gruppe packen, nur einmal nach server1/dir1 schieben, und dir1 genau für diese Gruppe freigeben.

            cu,
            Andreas a/k/a MudGuard

            1. Hallo,

              bearbeiten diese 3 Nutzer die Sachen, oder brauchen die das nur zum Angucken?

              Nein, die bearbeiten das auch und brauchen alle ihre eigenständige Kopie.

              Ich versuche gerade einen zweiten ssk-key hierfür anzulegen, aber es gelingt mir nicht. Der erste war unproblematisch, aber der zweite will nicht, das scheint ein Rechteproblem des Serverbetreibers zu sein. Als User1 darf und kann ich, als User2 aber nicht. Blöd nur, dass die 3 Dirs alle unter User2 laufen und das soll auch so bleiben, da ich nicht zuviele Rechte für diese 3 Dirs freigeben möchte. Irgendwie beißt sich das wohl die Katze in ...

              Pit

              1. bearbeiten diese 3 Nutzer die Sachen, oder brauchen die das nur zum Angucken? Nein, die bearbeiten das auch und brauchen alle ihre eigenständige Kopie.

                Falls es um Softwareentwicklung geht:

                Git, SVN sind für sowas gedacht.

                1. Falls es um Softwareentwicklung geht:

                  Git, SVN sind für sowas gedacht.

                  Da nutze ich Mercurial, aber dennoch gehts mir jetzt in diesem Fall wirklich um rsync.

                  Pit

                  1. Ich schließe mich jetzt Mudguards implizierter Frage nach der genauen Aufgabe ("Bisher scheint ja etwas Unklarheit zu herrschen, was die genaue Aufgabe ist.") an und warte auf deren Beantwortung.

                    Es ist nämlich nicht erbauend auf Grund falscher Beschreibungen falschen Vermutungen zu erliegen und sich ohne Erfolg einen Haufen Arbeit zu machen.

                    Und bitte nenne und auch einschränkende Nebenbedingungen, z.B. wenn Du auf einem oder mehreren der Hosts keine Root-Rechte hast oder wenn einer oder mehrere derselben nicht erreichbar sind (z.B. weil diese in einem lokalen Netz mit privater IP stehen wie es bei einem DSL-Anschluss aber auch in Firmennetzen absolut üblich ist.

      2. Hallo,

        D)
        local/dir1 -> server1/dir1
        local/dir1 -> server1/dir2
        local/dir1 -> server1/dir3
        

        bei D) wüßt ich spontan keine Lösung.

        Es ist Variante D…

        Und ich wüßte spontan keine sinnvolle Anwendung für Variante D…

        Wenn server1 abraucht, sind alle drei Sicherungsverzeichnisse weg.

        Gruß
        Kalk

        1. Tach!

          Und ich wüßte spontan keine sinnvolle Anwendung für Variante D…

          Wenn server1 abraucht, sind alle drei Sicherungsverzeichnisse weg.

          Wenn der "Server abraucht" sind möglicherweise nicht gleich alle Platten gleichsam betroffen, und die Verzeichnisse könnten auf unterschiedlichen Platten oder auch externen Laufwerken liegen.

          dedlfix.

          1. Hallo,

            Wenn der "Server abraucht" sind möglicherweise nicht gleich alle Platten gleichsam betroffen, und die Verzeichnisse könnten auf unterschiedlichen Platten oder auch externen Laufwerken liegen.

            Für backups erscheint mir der Konjunktiv irgendwie ungeeignet. Aber dem Pit gehts offenbar gar nicht um eine Sicherung.

            Gruß
            Kalk

            1. Aber dem Pit gehts offenbar gar nicht um eine Sicherung.

              Hi,

              nein, absolut nicht. Die läuft zwar auch, aber von diesem Vorgnag völlig unabhängig.

              Pit

              1. Hallo,

                So ein bisschen wundert man sich schon über den threadtitel…

                Gruß
                Kalk

                1. Hallo,

                  So ein bisschen wundert man sich schon über den threadtitel…

                  Inwiefern?

                  Pit

                  1. So ein bisschen wundert man sich schon über den threadtitel…

                    Inwiefern?

                    Es fehlt vorn ein "Mit", in der Mitte steht "auf" und hinten steht "sichern".

                    Du willst nämlich gar nicht "rsync auf mehrere Verzeichnisse sichern" sondern "Mit rsync in mehrere Verzeichnisse kopieren und unterschiedliche Rechte gewähren". Probleme richtig zu beschreiben hilft den Helfern und ist zielführend. Die Lösung eines nicht richtig beschriebenen Problems ist allenfalls zufällig richtig. Selbst wenn sie irgendwie funktionieren sollte dann gäbe es bessere.

                    Irgendjemand hat hier schon Jahren mal geschrieben, dass die korrekte Beschreibung eines Problems oft selbst zur Lösung führt.

                  2. Hallo Pit,

                    Threadtitel: rsync auf mehrere Verzeichnisse sichern?

                    und in https://forum.selfhtml.org/self/2018/feb/2/rsync-auf-mehrere-verzeichnisse-sichern/1713153#m1713153

                    dem Pit gehts offenbar gar nicht um eine Sicherung.

                    nein, absolut nicht. Die läuft zwar auch, aber von diesem Vorgnag völlig unabhängig.

                    Gruß
                    Jürgen

                  3. Hallo,

                    Inwiefern?

                    Weil du dort „sichern“ schreibst, jetzt aber zugibst, dass es gar nicht ums sichern geht.

                    Gruß
                    Kalk

                    1. hallo,

                      ich habs jetzt über ein simples php-script gelöst, welches die (ausschlielich modifizierten) Dateien kopiert. Da es sich nur um knapp über 1000 Dateien (insgesamt) handelt und die veränderten Dateien sich im Bruchteilbereich hiervon befinden, geht das (trotz filemtime + touch) sehr flott. Insofern passt das für mich.

                      Danke dennoch für die Hilfe, Pit