J'ai des disques différents avec des images
/media/drive1/pictures/
/media/drive2/pictures/
/media/drive3/pictures/
/media/drive4/pictures/
# ...
J'ai un dossier appelé Partager qui a des symboles de symboles pour Tous Sous-fromager de chaque images Répertoire de chaque lecteur. Je fusionne chaque sous-dossier avec un script comme celui-ci:
# I do this for every drive
for item in "/media/drive1/pictures/"*
do
target=/media/share/pictures/`basename "$item"`
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi
done
J'ai partagé cela avec succès avec Samba pour un coup d'œil maintenant.
[global]
# ...
follow symlinks = yes
Comme il s'agit d'un réseau privé pur et la part est réadaptée, la sécurité n'est pas une grosse affaire.
### /etc/exports
/media/share *(ro,async)
Quand je mène ma part mount 1.2.3.4:/ foo
Les liens symboliques essaient de suivre l'hôte local.
Ma question : Comment puis-je partager un dossier qui suit Symlinks On L'hôte qui partage le mont?
NOTE : le bind bind
solution dans /etc/fstab
ne fonctionnera pas ici, puisque chaque sous-dossier de /media/share/
pointe vers différents emplacements/disques.
Cette approche ne fonctionnera pas avec les actions montées NFS. Les liens symboliques contiennent uniquement un chemin d'accès à un autre fichier ou répertoire sur le système d'origine où ils sont partagés. À moins que vous ne preniez soin de créer les liens relatifs ou de dupliquer les mêmes structures de répertoires sur des systèmes distants comme l'initiateur de la part, ils ne fonctionnent tout simplement pas.
Je ne peux penser à aucune méthode qui permettra la structure de répertoire comme vous l'avez décrite via NFS et vous donnera la fonctionnalité que vous recherchez.
Vous voudrez peut-être examiner les fonctionnalités avancées de l'automobile, en particulier cette page intitulée: Définition des options de carte automobile avancées .
Pourquoi ne pouvez-vous pas faire tous les liens symboliques? Cela ferait l'affaire.
En supposant que sur le serveur NFS (1.2.3.4), vous avez le suivi suivant (différents lecteurs physiques possibles)
/media/drive1/pictures/
/media/drive2/pictures/
/media/drive3/pictures/
/media/drive4/pictures/
# ...
Dans le script, changez votre ligne LN de
ln -s "$item" "$target"
lire
ln -s "../${item#/media/}" "$target"
Cela créerait vos liens symboliques dans le format de
../drive1/pictures/...
Depuis que vous mentionnez que c'est un réseau privé et une sécurité n'est pas une préoccupation, vous pouvez définir les exportations vers
### /etc/exports
/media *(ro,async)
Puis sur les boîtes client qui montent le NFS
mkdir -p foo; mount 1.2.3.4:/media foo
Dans Foo, vous allez maintenant voir partager, conduire1, drive2, drive3, drive4, ...
Donc, en effet, vous avez monté l'ensemble du répertoire multimédia sur votre client et que les symboles sont relatifs afin qu'ils fonctionnent bien. La quantité de changement nécessaire est assez minimale, la ${item#/media/}
Syntaxe peut être supportée ou non être prise en charge par votre version de Bash, tout équivalent ferait (vous pouvez utiliser des commandes SED, AWK ou tout ce que vous connaissez bien pour couper le/le support /).
Le seul problème à gauche est des noms uniques, si vous avez le dossier ou le fichier suivant
/media/drive1/pictures/same_name1
/media/drive2/pictures/same_name1
Le code actuel
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi
Sauter la création d'un lien symbolique après la première cible est rencontrée. Vous pouvez donc avoir des fichiers qui manquent des liens sympathiques purement parce que le nom est déjà utilisé dans un autre lecteur.
Vous auriez besoin de modifier votre nom symbolique pour apporter une sorte d'identifiant unique pour ces cas.
if [ -d "$target" ]; then
#extract out the "drive1" part from $item and prepend it to target
target="$(echo item | sed -e 's!/media/\([^/]*\)/pictures.*!\1!g')_${target}"
fi
if [ ! -d "$target" ]; then
ln -s "$item" "$target"
chown -h lsc:lsc "$target"
fi
Vous pouvez faire un montage de type de liaison, c'est mieux que des liens dans de nombreuses situations, dans le fichier FSTAB que vous pouvez mettre:
/source /dest none defaults,bind 0 0
Il fonctionne avec les options d'exportation NFS 'Nohide, Crossmnt'