Quelle est la différence entre ln -s et mount --rbind?

8

Quelle est la différence entre:

ln -s /mnt/extra/home /

et

mkdir /home
mount --rbind /mnt/extra/home /home
NerdOfLinux
la source
1
lnfait des liens; en particulier, ln -sfait des liens symboliques. mountmonte un système de fichiers sur un répertoire. Il n'ont rien en commun.
AlexP
Mais mount --rbind /mnt/extra/homeest déjà un répertoire monté
NerdOfLinux
Mettez cela comme réponse et je marquerai cette question comme résolue :)
NerdOfLinux

Réponses:

13

mount --rbindcrée un montage de liaison récursif; c'est-à-dire que la hiérarchie du système de fichiers montée sur /mnt/extra/homesera également accessible via /home.

Dans la pratique, la principale différence entre la ln -ssolution et la mount --rbindsolution est que with ln -s /homeest un lien symbolique tandis que with mount --rbindest un répertoire; cela affecte des outils tels que find, df, test/ [etc

En outre, le ln -séchouera s'il /homeexiste, tandis que mount --rbindéchouera s'il n'existe pas ou s'il ne s'agit pas d'un répertoire vide.

Le commentaire de Mark ci-dessous est également important: ln -snécessite un système de fichiers accessible en écriture sur lequel créer le lien symbolique.

AlexP
la source
7
La grande différence est que cela ln -smodifie le système de fichiers, mais mount --rbindpas. Cela signifie que vous pouvez monter le répertoire personnel sur une racine en lecture seule (par exemple, un CD de démarrage), mais vous ne pouvez pas créer de lien symbolique dessus.
Mark
3
--bindet --rbindne se soucient pas si mes répertoires cibles sont vides, ils se montent simplement "au-dessus" de tous les fichiers qui s'y trouvent, les
rendant
7

Dans ce cas, un montage de liaison et un lien symbolique fonctionneront de la même manière dans la plupart des cas, mais ils présentent des différences importantes.

Un lien symbolique est un peu plus léger. Vous pouvez avoir des centaines ou des milliers de liens symboliques sans que cela ne soit un gros problème de gestion. Ils se trouvent dans le système de fichiers plutôt que d'exiger une configuration spéciale au niveau du système.

Les liens symboliques peuvent être sauvegardés et copiés correctement par des outils comme cp et rsync. Autrement dit, les outils peuvent reconnaître et copier le lien symbolique, garantissant qu'à la restauration ailleurs, le lien est restauré et pointe vers la bonne destination. Tout fonctionnera "correctement" par défaut. En revanche, lors de la sauvegarde ou de la copie d'un montage de liaison, le montage sera traité de manière transparente, ce qui entraînera la copie des fichiers eux-mêmes, ce qui peut entraîner une duplication si vous obtenez également les mêmes fichiers à leur autre emplacement, et nécessitant un travail supplémentaire si vous le souhaitez pour répliquer le montage de liaison à la destination.

Les liens symboliques peuvent être modifiés ou supprimés par tout utilisateur ayant accès au lien, il est donc facile de le rendre superutilisateur uniquement ou de l'ouvrir à un utilisateur particulier. Les montures de liaison ne peuvent être configurées ou modifiées que par le superutilisateur.

Si cela ressemble à une approbation éclatante de liens symboliques, c'est le cas. Ils constituent un moyen plus simple de relier les fichiers et les répertoires. Vous utiliseriez des montures de liaison uniquement pour les situations où un lien symbolique ne fonctionnerait pas, ce qui peut être moins de situations que vous ne le pensez. La plupart des outils, y compris les outils de sauvegarde et de synchronisation, ont un comportement par défaut raisonnable pour les liens symboliques et leur traitement des liens symboliques peut être configurable. Les montages de liaison sont transparents pour ces outils, vous perdez donc cette flexibilité et vous risquez de perdre le comportement raisonnable (par exemple, comme mentionné ci-dessus, duplication de répertoires dans vos sauvegardes).

thomasrutter
la source
0

Une autre différence est que le lien symbolique est symbolique , c'est-à-dire qu'il fait simplement référence à un chemin - une chaîne de caractères, et il est déréférencé chaque fois que vous ouvrez un sous-répertoire / fichier dans le chemin cible. En revanche, mount --rbindse comporte plutôt comme un lien dur, pour lequel le chemin n'est pas réévalué à chaque déréférence.

Cela fait une différence dans certains scénarios comme chroot. Par exemple, vsftpd chroot s dans le répertoire personnel du compte utilisateur FTP auquel vous vous connectez. Ainsi, si vous placez un lien symbolique dans ce répertoire, vous vsftpdne pourrez pas le déréférencer, et donc la cible ne sera pas accessible via FTP. Si vous le faites à la place mount --rbind, vous vsftpdaccéderez simplement à ce sous-arbre comme s'il était vraiment là, de la même manière que lorsque vous y avez lié un fichier en dur.

Ruslan
la source