J'essaie de comprendre la différence entre utiliser ln -s
et mount --bind
. Dans un scénario de base, je peux utiliser les deux pour accéder à un répertoire ailleurs. Dans quels scénarios ces deux-là se comporteront-ils différemment?
command-line
mount
symbolic-link
Łukasz
la source
la source
rm -r
unmount --bind
. Avec aln
, il supprime le lien, alors que pour a--bind
, cela a le même effet que d'exécuter lerm -r
sur la cible. Pas bien, comme je l'ai trouvé peu de temps avant de reconstruire l'un de mes serveurs ...Réponses:
Ils se comporteront différemment dans au moins deux cas:
A
) sur lequel estB
monté autre chose ( ). Le lien affichera le contenu de mount target (B
) au lieu de l'original (A
).En outre, vous pouvez lier le montage d’un répertoire ou d’un fichier sur un répertoire ou un fichier existant en masquant le contenu original (rendant le contenu original inaccessible à moins que l’original ait été lié ailleurs). Un lien symbolique nécessite que l'original soit déplacé ou supprimé.
la source
Eh bien,
ln -s
crée un lien symbolique, alors quemount --bind
crée une monture.Un lien symbolique est un type spécial de fichier. Si vous le faites
ln -s /var/target /var/link
, alors ce/var/link
sera un fichier contenant le chemin "/var/target
". La seule différence entre un lien symbolique et un fichier ordinaire réside dans le fait que lorsqu'un programme tente d'effectuer une opération sur un lien symbolique, l'opération est généralement effectuée sur la cible plutôt que sur le fichier. Alors maintenant, si vous le faitesls /var/link
, lels
programme essaiera d’obtenir une liste de répertoires pour/var/link
, mais obtiendra en fait une liste de répertoires pour la/var/target
place.Les liens symboliques ne sont toujours que des fichiers. Ils peuvent être renommés et supprimés et tout ce jazz. Notez que vous ne pouvez pas créer un lien symbolique (ou un fichier ordinaire, d'ailleurs) appelé
/var/link
s'il existe déjà un fichier appelé/var/link
; vous devez d'abord vous en débarrasser.Un montage n'est pas un fichier; c'est un enregistrement que le noyau garde en mémoire. Si tu fais
mount --bind /var/target /var/mount
, le noyau enregistrera le fait qu'il/var/mount
s'agit maintenant d'un nouveau nom/var/target
. (Je ne connais pas les détails; en particulier, je ne sais pas si monter quelque chose dans un sous-répertoire de/var/target
le fera apparaître/var/mount
aussi, ou pourquoi ou pourquoi pas. Des modifications de cette réponse seraient appréciées.) Alors maintenant Si vous le faitesls /var/mount
, la même chose se passera comme si vous le faisiezls /var/target
, car/var/mount
et/var/target
sont le même répertoire.Les montages ne sont pas des fichiers. Je ne sais pas ce qui se passerait si vous tentiez de renommer ou de supprimer
/var/mount
. Notez que vous ne pouvez rien monter sur/var/mount
moins qu'il y ait déjà un répertoire dans/var/mount
.la source
ln -s ../../myfile .
. Si vous déplacez cela dans un autre répertoire, il sera pointé ailleurs car il s'agit d'un lien relatif. Cela peut être utile si vous devez sauvegarder une sous-arborescence tout en maintenant les liens actifs dans la sauvegarde.De plus, ln -s survivrait à un redémarrage; alors que mount --bind ne le ferait pas, sauf si vous éditez / etc / fstab pour le rendre persistant.
la source
En plus des autres réponses. Le système n'autorise pas les liens physiques vers les répertoires:
Le montage vous permet de créer un lien dur, c'est-à-dire deux noms ou plus pour le même inode :
(On peut trouver que cela aide pour la sauvegarde d'instantané avec l'ancienne version de rsync.)
Notez également que ce montage n'est pas complet:
Donc, le montage est toujours en lecture et en écriture, même si je demandais l’option ro (en lecture seule).
la source