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.