sincronizzare e scrivere le autorizzazioni sulla destinazione


8

Mi sono sempre chiesto perché rsynctenta di trasferire un file in una posizione remota in cui ha le autorizzazioni di lettura / esecuzione per la directory di destinazione , ma nessuna autorizzazione di scrittura per creare il file di destinazione effettivo. Questo può essere simulato anche localmente quando si tenta di copiare un file come utente normale in / , rsynctrasferirà l'intero file (impiegando anche un po 'di tempo per file di grandi dimensioni) e alla fine fallisce con

rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)

Quindi sembra già non riuscire all'avvio quando si tenta di creare il file temporaneo (il punto- file) durante il trasferimento. Perché non lo nota e si interrompe presto invece di provare a copiare l'intero file senza disporre di autorizzazioni di scrittura?

E dove copia il file se non riesce a creare il file temporaneo? Non riesco a vedere alcun aumento di memoria dei processi rsync e anche nessun file corrispondente in / tmp . Sembra che scarti direttamente i dati a destinazione ma continua comunque con il trasferimento.

Risposte:


5

Se è necessario copiare in una directory senza autorizzazione di scrittura, aggiungere --inplacealle opzioni di comando. Questo a volte è più economico che non crea una copia temporanea, ma durante l'aggiornamento il file si trova in uno stato incoerente.

Sulla domanda perché non controlla in anticipo i propri diritti: potrebbe mancare alcune specifiche aggiuntive come ACL ad accesso esteso, quindi rsync non crede nello schema standard 3 * 3 + 3. OTOH questa politica intenzionale non fa alcuna differenza nel risultato - comunque il file non viene aggiornato.


Grazie per la tua risposta, ma è solo una vaga ipotesi e non risponde davvero alla mia domanda. Anche con --inplaceesso trasferisce l'intero file fino a notare la mancanza di autorizzazioni di scrittura.
scai,

1
Sebbene ciò non risponda all'aiuto di OP, l'utilizzo --inplaceè molto utile quando si dispone dei diritti per scrivere su un file ma non sulla directory di contenimento.
tokland,

ma quella era la mia soluzione (avevo generato file tmp ma non ribattezzato con il nome originale), quindi grazie e su
roothahn,

4

Questo sembra essere un difetto dell'attuale protocollo rsync, come spiegato nel bug tracker . Il protocollo rsync non può determinare in anticipo se dispone di autorizzazioni di scrittura sulla destinazione. Invece invia e controlla solo per successo o fallimento in seguito.


2

Rsync crea un file temporaneo nella stessa cartella del file di destinazione, quindi in questo caso è necessario copiare alcuni file /, poiché non è stato avviato come root e normalmente /era scrivibile solo da root, quindi non riesce.

Per scoprire quali file vengono copiati, passare il parametro -v


1
So che rsynccrea i suoi file temporanei nella stessa cartella della directory di destinazione. Ma anche se non è in grado di creare quei file temporanei, avvia il trasferimento e successivamente fallisce invece di controllare all'inizio se ha tutti i permessi di scrittura richiesti. Voglio sapere perché si comporta così.
scai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.