C'è una differenza tra hardlinking con cp -l o ln?


15

Sto implementando uno schema di backup usando rsync e hardlink. So che posso usare link-dest con rsync per fare i collegamenti fisici, ma ho visto menzionare l'uso di "cp -l" prima che "link-dest" fosse implementato in rsync. Un altro metodo di hardlinking che conosco è "ln".

Quindi la mia domanda è, per curiosità: c'è differenza nel creare hardlink usando "cp -l" rispetto all'utilizzo di "ln"?


I collegamenti sono indistinguibili.
rici,

Intendi dire che non c'è differenza? Potrebbero essere usati in modo intercambiabile?
twan163,

Ho fatto un piccolo test da solo, ma a prima vista non ho notato alcuna differenza tra i due.
twan163,

cp: illegal option -- lsei sicuro che cp abbia un'opzione l?
Tom,

Risposte:


16

I risultati di entrambi devono essere gli stessi, in quanto viene creato un collegamento reale al file originale.

La differenza sta nell'uso previsto e quindi nelle opzioni disponibili per ciascun comando. Ad esempio, cppuò usare la ricorsione mentre lnnon può:

cp -lr <src> <target>

creerà collegamenti reali <target>a tutti i file in <src>. (crea nuove directory; non collegamenti) Il risultato sarà che la struttura ad albero delle directory sotto <target>apparirà identica a quella sotto <src>. Differirà dal fatto cp -r <src> <target>che l'uso di quest'ultimo copierà ogni file e cartella e darà a ciascuno di essi un nuovo inodementre il primo utilizza solo hard link sui file e quindi semplicemente ne aumenta il Linksconteggio.

Se utilizzato per copiare un singolo file, come nell'esempio, i risultati saranno identici.


se ho capito bene, "cp -lr" creerà hardlink per tutti i file, ma se ci sono directory mancanti in <target>, queste saranno create come nuove (cioè nessun hardlink alle directory in <target>)?
twan163,

Sì, è corretto. Non è possibile creare collegamenti fisici alle directory. Pertanto, al fine di mantenere la struttura di file / directory, diventa hard-link per i file all'interno di directory 'reali'.
GarethTheRed

riguardo al comportamento di "cp -lr": hardlink per file ... nuove directory per directory. sembra un po 'strano ma immagino che questo comportamento "strano" sia un effetto collaterale dei vincoli (non si possono avere hardlink di directory). ||| anche FYI per riferimento ecco alcuni link a informazioni su hardlink non consentiti per directoreis ref1 da askubuntu e ref2 da unix.stackexchange .
Trevor Boyd Smith,

2

link utilizza il minor numero di chiamate di sistema, seguito da ln e infine cp :

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410
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.