web-dev-qa-db-fra.com

Y a-t-il une différence entre HardLinking avec CP -L ou LN?

Je mettez en place un schéma de sauvegarde à l'aide de RSYNC et de HardLinks. Je sais que je peux utiliser Link-Dest avec RSYNC pour faire les hardlinks, mais j'ai vu une mention d'utiliser "CP -L" avant que "link -est" a été mise en œuvre dans RSYNC. Une autre méthode de hardlinking je sais est "ln".

Donc, ma question est de savoir la curiosité: y a-t-il une différence dans la fabrication de lignes hardlinks utilisant "CP -L" par rapport à "ln"?

15
twan163

Les résultats des deux doivent être identiques, dans la mesure où une liaison matérielle est créée dans le fichier d'origine.

La différence est dans l'utilisation prévue et donc les options disponibles pour chaque commande. Par exemple, cp peut utiliser la récursion tandis que ln ne peut pas:

cp -lr <src> <target>

va créer des liens durs dans <target> à tous les fichiers de <src>. (Il crée de nouveaux répertoires; pas des liens) Le résultat sera que la structure de l'arborescence de répertoire sous <target> aura l'air identique à celui sous <src>. Il va différer de cp -r <src> <target> En ce que l'utilisation de ce dernier copiera chaque fichier et dossier et donner à chacun un nouveau inode _ ATTENDU QUE le premier utilise simplement des liens difficiles sur les fichiers et augmente donc simplement leur compte Links.

Lorsqu'il est utilisé pour copier un fichier unique, comme dans votre exemple, les résultats seront identiques.

17
garethTheRed

Link utilise les autres appels système, suivi de ln et enfin 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
3
Steven Penny