Symlinks ont des limites dans la façon dont fonctionne comme ls
, mv
et cp
peuvent fonctionner sur eux parce que shell contrairement à commandes initiés aiment cd
, ces fonctions ne sont pas d' informations sur la façon dont l'utilisateur a accédé au répertoire par rapport au chemin logique (voir lié après ). Il semble que l'utilisation de l' mount --bind
option à la place permette de contourner ce problème, offrant une fonctionnalité accrue et une compatibilité avec samba et d'autres serveurs de fichiers, car le répertoire monté aura alors deux chemins physiques indépendants, au lieu d'un lien.
J'aimerais remplacer tous mes liens symboliques par des références à l'aide de l' mount --bind
option, mais cela impliquerait de monter plus de 150 points dans fstab. Existe-t-il des problèmes de performances pouvant potentiellement découler de cet inconvénient ou de tout autre inconvénient que je devrais envisager?
Réponses:
Avec
mount --bind
, une arborescence de répertoires existe à deux endroits (ou plus) dans la hiérarchie des répertoires. Cela peut causer un certain nombre de problèmes. Les sauvegardes et autres copies de fichiers prendront toutes les copies. Il devient difficile de spécifier que vous voulez copier un système de fichiers: vous finirez par copier les fichiers montés par la liaison deux fois. Recherches avecfind
,grep -r
,locate
, etc., traverseront toutes les copies, et ainsi de suite.Vous ne gagnerez aucune «fonctionnalité et compatibilité accrues» avec les montages liés. Ils ressemblent à n’importe quel autre répertoire, comportement qui n’est généralement pas souhaitable. Par exemple, Samba expose les liens symboliques en tant que répertoires par défaut. il n'y a rien à gagner à utiliser un montage lié. D'un autre côté, les montages de liaison peuvent être utiles pour exposer les hiérarchies de répertoires sur NFS.
Vous n'aurez aucun problème de performances avec les montages liés. Vous aurez des maux de tête d'administration. Les montages de liaison ont des utilisations, telles que rendre une arborescence de répertoires accessible à partir d'un chroot ou exposer un répertoire caché par un point de montage (il s'agit généralement d'une utilisation transitoire lors du remodelage d'une structure de répertoires). Ne les utilisez pas si vous n'en avez pas besoin.
Seule la racine peut manipuler les montages liés. Ils ne peuvent pas être déplacés par des moyens ordinaires; ils verrouillent leur emplacement et les répertoires des ancêtres.
En règle générale, si vous transmettez un lien symbolique à une commande, celle-ci agit sur le lien lui-même si elle opère sur des fichiers et sur la cible du lien si elle opère sur le contenu du fichier. Cela vaut aussi pour les annuaires. C'est généralement la bonne chose. Certaines commandes ont des options de liens symboliques traiter différemment, par exemple
ls -L
,cp -d
,rsync -l
. Quoi que vous essayiez de faire, il est beaucoup plus probable que les liens symboliques soient le bon outil que les montages liés, le bon outil.la source
En plus de ce que @Gilles a écrit précédemment, il convient de noter que certains utilitaires peuvent considérer un répertoire monté par liaisons comme un système de fichiers séparé. Cela peut avoir des conséquences sur les performances ou la fonctionnalité si le programme ne peut plus supposer que le même numéro d’inode fait référence au même fichier (ce qui n’est pas le cas, s’ils se trouvent sur des systèmes de fichiers différents), un déplacement ne peut pas être optimisé en tant que lien target-then-unlink-source, etc.
la source
df
sur mon système ne considère même pas les répertoires montés par la liaison, mais si on le lui demande spécifiquement, il est traité comme un autre montage du même système de fichiers. (Ce qui, si vous me le demandez, est un comportement attendu pour un outil ayant le but de df.)Vous devriez également vouloir utiliser des montages de liens au lieu de liens symboliques lorsque vous vous basez sur un support qui n’est pas toujours en place (par exemple, un disque externe) et que vous voulez être sûr que la structure de répertoire originale est en place, même si le support échoue ou est supprimé.
Par exemple, si je veux conserver / var / tmp dans une carte sd, je vais utiliser le montage bind, car certains programmes s’attendent à ce que / var / tmp soit un répertoire valide même si la carte est retirée.
la source
J'ai essayé de lier mount pour résoudre un problème d'installation de paquets avec
pacman
(archlinux, pour en savoir plus ici ) sur un système où/var
(de même que/home
et/usr/local
) étaient des liens symboliques (sur plusieurs systèmes de fichiers: SSD à SATA).Cela avait l'air bien au début, mais, comme Gilles l'a fait remarquer,
locate
toujours plusieurs résultats pour un seul fichier, malgré laPRUNE_BIND_MOUNTS = "yes"
file d'attente/etc/updatedb.conf
.En creusant un peu plus loin, j'ai constaté que les montages de reliure plus complexes peuvent être élagués correctement:
Sans l'option PRUNE_BIND_MOUNT, j'aurais eu 3 résultats:
Un autre problème avec les montages liés:
Bien sûr, on peut ajouter manuellement des montages de liaison (mounpoint ou target) à
PRUNEPATHS
in/etc/updatedb.conf
.De plus,
mountpoint
diversesstat
commandes ou fonctions peuvent être utilisées dans des outils pour améliorer la traversée du système de fichiers, comme proposé ici.la source
En ce qui concerne les montages de liens de fichiers, ils se comportent plus près des liens concrets que des liens symboliques. Cela peut avoir des conséquences quelque peu subtiles, par exemple:
Jusqu'ici tout va bien, mais considérons maintenant combien de programmes (éditeurs, scripts correctement écrits, etc.) modifient réellement les fichiers:
Si cela
2.txt
avait été un lien symbolique,1.txt
la dernière commande aurait une sortie1new
, ce à quoi on pourrait probablement s'attendre.Cela peut poser quelques problèmes subtils: dans systemd, j’utilisais
BindReadOnlyPaths=
pour faire en sorte qu’un service utilise unresolv.conf
fichier différent de celui du reste du système, mais cela s’est avéré délicatement étrange et difficile à diagnostiquer carresolvconf
il remplacerait le fichier source situé derrière le fichier. le service est de retour.la source