rsync e collegamenti simbolici


69

Voglio fare il backup della mia directory home su un'unità esterna ogni notte usando un cronlavoro da eseguire rsync. Non sono sicuro dell'esatto comportamento delle rsyncbandiere simboliche di collegamento.

  1. rsyncLa -abandiera include la -lbandiera (cioè "copia i collegamenti simbolici come collegamenti simbolici"). Questo significa semplicemente che copierà il link o che seguirà il link e copierà tutto nella directory link-to? Voglio evitarlo perché ho collegamenti a directory piene di file multimediali che implicherebbero la copia di centinaia di gigabyte di cui non ho bisogno per il backup.
  2. Temendo (ma non certo) che rsync -aavrebbe copiato tutti quei file multimediali, invece ho aggiunto la --no-linksbandiera. Questo non sembra essere il comportamento che desidero. Ignora semplicemente la copia di qualsiasi collegamento che è problematico perché ho collegamenti che voglio copiare (ad esempio collegamenti a file di intestazione comuni da diverse directory di progetto).
  3. Supponendo che il numero 1 sopra (senza la --no-linksbandiera) sia quello che voglio davvero e copia semplicemente il collegamento senza copiare i file collegati, i collegamenti si interromperanno quando viene eseguito il backup? Ad esempio, posso rsyncsorgente directory /home/me/projects/misca /media/extdrive/backup/home/me/projects/misc. In questo caso suppongo che rsyncnon sia abbastanza intelligente né cerca di correggere il contenuto dei collegamenti simbolici per le relative modifiche alla directory. È corretto? Questo va bene, non importa se i collegamenti vengono interrotti nelle directory di backup a condizione che vengano corretti e funzionanti se arriva il momento in cui devono essere ripristinati.

3
Il flag -L è probabilmente quello che vuoi. Dalla pagina man di rsync su Centos Linux: "-L, --copy-links trasforma il symlink in file / dir referente". Ti consiglio di testarlo con alcune directory e collegamenti di esempio per assicurarti di non sovrascrivere i dati che non intendi. Modificato per includere un avviso sulla possibile perdita di dati. ;)
Mick T

Risposte:


90
  1. "Copia i collegamenti simbolici come collegamenti simbolici" significa esattamente ciò che dice: se rsync vede un collegamento simbolico nella directory di origine, creerà un collegamento simbolico identico nella destinazione. Niente di più.

    (Alcune righe nella pagina del manuale, un'opzione diversa--copy-links , descrivono il comportamento opposto (copiando sempre i dati) che hai descritto come indesiderabile.)

    Vedi anche la sezione "Link simbolici":

    Se --linksspecificato, i collegamenti simbolici vengono ricreati con lo stesso target sulla destinazione.

  2. Non è il comportamento che desideri perché stai interpretando male ciò che --linksfa e quindi stai chiedendo un comportamento sbagliato (vedi risposta n. 1).

  3. Per impostazione predefinita, copia esattamente la destinazione .

    Cioè, se il collegamento punta a un percorso assoluto (ad esempio /home/me/projects), continuerà a puntare allo stesso percorso; non si romperà , continuerà semplicemente a puntare a un file nella tua home directory piuttosto che a quello nel tuo backup.

    Nel frattempo, se il collegamento puntava a un percorso relativo (ad esempio ../../projects), continuerà anche a puntare allo stesso percorso, ma poiché è relativo alla posizione del collegamento simbolico, anche il collegamento simbolico nel backup punterà a un file nel backup.

    Sfortunatamente non sembra esserci alcuna opzione per tradurre i symlink assoluti per la loro nuova base (solo un'opzione per romperli del tutto). Per evitare problemi, è necessario modificare i collegamenti simbolici esistenti a quelli relativi (che è una buona idea in generale, per i collegamenti all'interno di $ HOME).


2
ummm quindi qual è la differenza tra --copy-linkse --links?
Alexander Mills,

--copy-links= -Le --links= -l. Vedi la descrizione dalla documentazione nella mia risposta qui: superuser.com/a/1388910/425838
Gabriel Staples

12

@grawity ha un'ottima risposta, ma ecco uno screenshot di alcune informazioni rilevanti dalla documentazione. Ecco la formulazione esatta delle opzioni -le -L, ad esempio, che sembrano essere le più rilevanti in questione:

inserisci qui la descrizione dell'immagine

Fonte: https://linux.die.net/man/1/rsync o man rsyncpagine di manuale su Linux.

Nota anche che l' opzione -a( --archive) include anche l' -lopzione al suo interno, il che è fantastico, dal momento che mi piace molto usare l' -lopzione per preservare i miei collegamenti simbolici dalla fonte come collegamenti simbolici sulla destinazione. Dalle pagine man:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Nota, per i miei rsynccomandi e istruzioni preferiti , tra cui la copia, il mirroring, che mostra l'avanzamento totale ...

... eseguendo corse a secco, registrando stderr e stdout in file (separati), mostrando statistiche, usando un file di percorso di inclusione e un file di esclusione , ecc., vedere la mia risposta completa qui nella seconda sezione, intitolata " 2. Riga di comando rsync strumento (Linux, Windows con Cygwin) ": https://superuser.com/a/1464264/425838

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.