Preservare i collegamenti simbolici di destinazione esistenti con rsync


10

Sto usando rsync (1) per mantenere aggiornato un repository debian locale. Di recente, il disco che sto utilizzando per archiviarlo ha iniziato a funzionare in modo insufficiente, quindi ho deciso di utilizzare i collegamenti simbolici per consentirmi di spostare alcune directory su un altro disco di dimensioni simili.

Sfortunatamente, sembra che rsync stia eliminando i collegamenti simbolici e riempia il disco quasi pieno. Dopo alcune ricerche, ho scoperto l' --keep-dirlinksopzione per rsync, che sembra fatta su misura per risolvere il mio problema.

Solo non lo fa. I collegamenti simbolici sulla destinazione vengono ancora eliminati.
Ecco il mio comando rsync:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

Gli EXCLUDE si espandono per eliminare un gran numero di architetture che non mi interessano, sulla falsariga di --exclude binary-alpha/ --exclude disks-alpha .... Prima che rsync venga avviato, la mia directory del pool è simile alla seguente:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

Una volta che rsync entra in gioco, ottengo questo:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

E così via, e i collegamenti simbolici vengono sostituiti con directory piene di file.

Alcune delle altre opzioni di rsync interferiscono --keep-dirlinks? Quali non posso combinare? O è l'ordine delle opzioni che sta causando il mio problema?

Risposte:


7

Le opzioni --deletee --delete-excludedinterferiscono con il tuo piano, poiché notano che il collegamento simbolico non è presente sull'origine e quindi lo eliminano.

Questo succede solo quando dici rsyncdi copiare l'intera directory con la source/ targetnotazione (la barra finale dopo la fonte). Se source/* targetinvece lo usi , la shell espande l'elenco di file e directory da copiare e questo non accadrà (ma prova --dry-runprima).

Tuttavia, invece di questa fragile configurazione, consiglierei di combinare i due dischi con l'aiuto di LVM per formare un volume di grandi dimensioni che non necessiti di questo tipo di inganno.


Grazie! Ho cambiato la sceneggiatura e sembra funzionare. Questo mi darà un po 'di tempo: il disco tenderà ancora a riempirsi, ma ho tempo per spostare le cose. Hai ragione a combinare i due con LVM. Lo avevo già preso in considerazione, ma trascinando i piedi perché significa spostare le cose e poi rimetterle su. Meglio prima che poi, però, immagino.
unkilbeeg,

Ho avuto un problema simile che è stato risolto usando --keep-dirlinks senza l'opzione -a che stavo usando. "Minor" fastidio come per il terzo paragrafo, i file system che sto usando sono "dischi" SAN da 64 T byte. Mentre è possibile che i multipli possano essere combinati in unità ancora più grandi, diciamo unità da 256 terabyte, mi aspetto che le persone dell'amministratore abbiano ragioni per le dimensioni che abbiamo. A volte ciò che sembra "inganno" è solo capire come vivere con quello che hai.
user1683793,

La mia soluzione definitiva era il nuovo hardware. La macchina originale era abbastanza vecchia da supportare solo le unità IDE e l'unità più grande che si poteva ottenere in quei giorni era 512G.
unkilbeeg
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.