Ich habe mich immer gefragt, warum rsync
versucht wird, eine Datei an einen Remotestandort zu übertragen, an dem sie Lese- / Ausführungsberechtigungen für das Zielverzeichnis hat, aber keine Schreibberechtigungen zum Erstellen der eigentlichen Zieldatei . Dies kann sogar lokal simuliert werden, wenn versucht wird, eine Datei als normaler Benutzer nach / zu kopieren , rsync
die gesamte Datei überträgt (was auch bei großen Dateien ziemlich lange dauert) und schließlich mit fehlschlägt
rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)
So scheint es , schon beim Start zum Scheitern verurteilt , wenn man versucht , die temporäre Datei (die erstellen Punkt -datei) während der Übertragung. Warum merkt es das nicht und bricht es früh ab, anstatt zu versuchen, die gesamte Datei ohne Schreibberechtigung zu kopieren?
Und wohin wird die Datei kopiert, wenn die temporäre Datei nicht erstellt werden kann? Ich kann keine Speichererhöhung der rsync-Prozesse und auch keine entsprechende Datei in / tmp sehen . Scheint, als würde es die Daten am Ziel direkt verwerfen, aber die Übertragung fortsetzen.
quelle
--inplace
wird die gesamte Datei übertragen, bis der Mangel an Schreibberechtigungen festgestellt wird.--inplace
ist jedoch sehr nützlich, wenn Sie Rechte zum Schreiben in eine Datei haben, jedoch nicht in das enthaltende Verzeichnis.Dies scheint ein Mangel des aktuellen rsync-Protokolls zu sein, wie im Bug-Tracker erläutert . Das rsync-Protokoll kann nicht im Voraus feststellen, ob es Schreibberechtigungen für das Ziel hat. Stattdessen sendet es nur und prüft anschließend auf Erfolg oder Misserfolg.
quelle
Rsync erstellt eine temporäre Datei im selben Ordner wie die Zieldatei. In diesem Fall müssen Sie einige Dateien kopieren
/
, da Sie sie nicht als root gestartet haben und normalerweise/
nur von root beschreibbar waren. Daher schlägt dies fehl.Um herauszufinden, welche Dateien kopiert werden, übergeben Sie den Parameter
-v
quelle
rsync
die temporären Dateien im selben Ordner wie das Zielverzeichnis erstellt werden. Aber selbst wenn es diese temporären Dateien nicht erstellen kann, startet es die Übertragung und schlägt danach fehl, anstatt gleich zu Beginn zu prüfen, ob alle erforderlichen Schreibberechtigungen vorhanden sind. Ich möchte wissen, warum es sich so verhält.