2009-08-28 6 views
2

Je sais que c'est une condition des liens durs qu'ils ne peuvent pas traverser les systèmes de fichiers. Cela s'applique-t-il aux montages NFS? Compte tenu de la structure de répertoire suivante, serais-je capable de créer un lien physique dans le répertoire A qui pointe vers un fichier dans le répertoire B?NFS + Hard Links?

/root 
    /A 
    /B <-NFS mount 

Par exemple, je voudrais courir ln /root/B/file.txt /root/A/linkedfile.txt

Répondre

6

Eh bien, puisque /B est un système de fichiers séparé (un système de fichiers NFS monté) vous ne pouvez pas faire un lien fort entre elle et /A, parce qu'ils ne sont pas sur le même système de fichiers.

C'est parce qu'un hardlink ne fait pas une copie des données mis seulement une copie du pointeur à ces données, de sorte qu'ils doivent être dans le même « espace d'adressage ».

+7

Les liens physiques et les liens logiques sont tous les deux * des pointeurs *, dans un sens. La différence est qu'un lien logiciel stocke une représentation textuelle du chemin du système de fichiers vers la cible, tandis qu'un lien physique (puisqu'il ne s'agit que d'une entrée de répertoire) stocke simplement l'inode nubmer de la cible, qui doit donc être sur le même système de fichiers le répertoire dans lequel se trouve le lien. –

+0

Le pendentif en moi se sent obligé de souligner que l'alternative à un lien physique est un lien * symbolique *. –

+4

J'ajouterais que les noms de fichiers dans un répertoire ne sont que des pointeurs. Il n'y a pas de concept du "fichier original" et un "lien physique vers ce fichier" - ils sont deux noms pour un objet, et aucun nom n'est spécial. et @JesseHallett, je suis un peu en désaccord avec l'idée que ce sont des alternatives; Je pense que c'est mieux de dire que ce sont des choses différentes. –

6

Ce serait une bonne idée de comprendre d'abord exactement ce qu'est un lien physique.

Habituellement sur un système de type unix, un nom de fichier dans un répertoire pointe vers un numéro d'inode - essentiellement un nombre pour un fichier. Un "lien dur" crée juste un autre nom de fichier avec ce même numéro d'inode. Maintenant, vous avez différents noms qui pointent vers le même fichier numéroté.

Mais remarquez qu'il n'y a pas vraiment de connexion directe entre ces deux noms. La relation est que Name1 et Name2 ont tous les deux leur numéro d'inode réglé à 12756 - mais il n'y a rien que vous pouvez supporter et dire "cette chose dans ma main est le lien entre deux fichiers". Ils sont juste deux entrées de base de données qui partagent un numéro d'identification. Vous pouvez faire une requête (lente, puisque vous parcourez chaque entrée de fichier sur le système) pour les noms de fichiers partageant un numéro d'identification, mais c'est tout. Cela ne signifie rien de créer un "lien dur entre deux systèmes de fichiers" - puisque deux systèmes de fichiers ont des schémas de numérotation différents (inode 1234 sur le système un, et 1234 sur le système deux, pointent vers des fichiers complètement différents), et la seule chose que vous devez stocker est un nom + inodeNumber, il n'y a rien à faire.

Questions connexes