Problème de liens symboliques

Bonsoir,
J’ai créé le lien symbolique suivant sur mon serveur :

Tant que je reste en ssh sur ma machine tout va bien, par contre j’ai l’habitude de “monter” mon serveur sur ma machine de bureau avec sshfs qd je suis en local :

Eh là, c’est le drame (enfin il y a pire) : un clic sur mon lien dans thunar me renvoie bien dans /mnt/data, mais dans celui de ma machine de bureau…

J’ai bien pensé à l’astuce de modifier le nom de mon point de montage mais ça ne m’arrange pas car utiliser les mêmes me permet une certaine portabilité de mes scripts entre mes machines…

Avez vous une autre astuce ?

Merci à vous !

qu’affiche ls -l /home/mon_user ? quand tu es connecté avec sshfs et quand tu ne l’es pas ?

Bonjour,
qu’affiche ls -l /home/mon_user ? quand tu es connecté avec sshfs et quand tu ne l’es pas ?

Voilà :
connecté en ssh sur le serveur :

$ ls -l /home/mon_user/ $ ls -l /home/lavilotte-rolle total 108 lrwxrwxrwx 1 root root 10 28 mars 19:38 data -> /mnt/data/

Sur la machine de bureau avec sshfs :

$ ls -l /mnt/mon_serveur/home/mon_user/ total 108 lrwxrwxrwx 1 root root 10 28 mars 19:38 data -> /mnt/data/

Le problème est qu’il pointe toujours vers /mnt/data global au lieu de pointer vers le /mnt/data du serveur qui via sshfs devient /mnt/mon_server/mnt/data… En fait, le lien fait… ce qu’on lui demande :mrgreen:

Salut,
J’avais déjà remarqué ça - et c’est valable avec NFS - sans trouver de solution (à part faire un montage supplémentaire).
Je pense que c’est un comportement normal, c’est un lien “symbolique”.
Je ne me souviens plus, mais j’ai l’impression qu’avec les montages “liés” - dans fstab avec l’option “bind” - le problème ne se pose pas.
C’est peut-être la solution ?

$ ln -s /mnt/data /home/mon_user
Ceci est une adresse absolue
Essayer avec une adresse relative :
$ rm /home/mon_user
$ cd /home
$ ln -s …/mnt/data mon_user

Ainsi même à travers le montage sshfs le lien devrait fonctionner, …/mnt/data se traduira par /mnt/data qui se trouve sous le montage /mnt/ma_machine.
( À en croire la commande $ sshfs mon_user@mon_IP:/ /mnt/ma_machine
tu montes TOUT “/” du serveur distant).

Cela m’évoque un pb que j’avais rencontré il y a longtemps. Le contexte précis oublié, il me semble que le problème était que j’avais créé le lien symbolique avec un nom de chemin relatif

C’est ce nom de chemin ( qui reste relatif ) qui indique au lien vers quel fichier pointer.

Pour indiquer un nom de chemin absolu avec ou sans réseau, sans doute faut-il désigner clairement la machine, et pas seulement le chemin absolu… relatif à une machine.

Par exemple, tu montes sshfs, puis tu recrée le lien symbolique avec son chemin complet.
Bien sur, dés que ta machine distante est “démontée”, le lien est cassé, mais il se recrée dés que tu le montes de nouveau ( à condition que le chemin soit rigoureusement le même )

Si tu dois avoir aussi un lien direct à partir de l’autre machine, il en faudra un autre !

Tu peux aussi faire pointer un lien à partir de sshfs sur un lien créé directement à partir de la machine distante ( un lien symbolique peut pointer sur un autre lien symbolique, si l’ensemble n’est pas récursif. )

Ce que j’ai appris: un lien symbolique se réfère uniquement à un nom de fichier, tel qu’il est fourni, donc variable si le chemin est relatif !

J’espère avoir été clair.

[size=85]Cf un article ( un peu trop verbeux), qu’il faudrait que je retravaille, fait le bilan de mon apprentissage ici: http://www.joseph-tux.fr/Copies-liens-physiques-liens[/size]

Heureusement que je n’ai pas fait :
$ rm /home/mon_user :083

Quant à :

[code]$ cd /home
$ ln -s …/mnt/data mon_user

cd /home/mon_user/data

bash: cd: /home/mon_user/data: Aucun fichier ou dossier de ce type
[/code]
L’idée était bonne mais ça ne marche pas étant donné que la relativité est faite par rapport à /home et non à /home/mon_user, thunar m’affiche qt à lui un lien cassé.

si je laisse mon lien ds /home là ça marche, et même en sshfs je me retrouve bien ds le bon dossier :slightly_smiling: (à condition bien sûr de bien monter la racine)

En fait il me faudrait :

$ cd /home/mon_user $ ln -s .../mnt/data data
mais “…/” ne fonctionne malheureusement pas :115

Bon je ne pense pas que se soit très propre, mais j’ai contourné le problème, avec l’idée de josephtux de faire un lien vers un autre lien :

$ cd /home $ ln -s ../mnt/data /home $ cd /home/mon_user $ ln -s ../data data
Donc je me retrouve avec un lien relatif ds /home/mon_user qui pointe vers un autre lien relatif ds /home qui pointe vers mon dossier, et ça marche en sshfs :033

Merci à vous !

Il ne sera pas dit que je te fais supprimer $HOME comme un sagouin …

La commande
$ ln -s …/mnt/data mon_user
n’a aucun effet si “mon_user” qui est censé être un lien existe d’où la nécessité de le supprimer.
Ce n’était pas un lien ? si je fais fausse route, c’est sur la foi de TA commande :
$ ln -s /mnt/data /home/mon_user

Opération nulle sur les commandes que je t’ai suggérées, tu n’as rien touché … avant d’en arriver à cette HEUREUSE conclusion.

Peut être que je me trompe mais il me semble que :

$ ln -s /mnt/data /home/mon_user

crée un lien symbolique (et absolu relativement à la machine où il se trouve :017 ) de /mnt/data et place ensuite ce même lien dans le dossier /home/mon_user, qui n’a rien d’un lien mais qui est bien mon dossier personnel :mrgreen:

Par contre si je fais :

$ ln -s /mnt/data /home/mon_user/lien

et qu’il n’existe pas de dossier (ou fichier) lien ds mon /home/mon_user alors lien sera le nom… du lien :smiley:

Reprenez moi si je me trompe, et du coup j’allais bien supprimer mon dossier personnel :083
Mais je ne l’ai pas fait, et comme un homme averti en vaut deux j’ai pris soin de faire des backups :023

Merci à vous !

[quote]$ ln -s /mnt/data /home/mon_user

crée un lien symbolique (et absolu relativement à la machine où il se trouve :017 ) de /mnt/data[/quote]
[OUI]*

[quote]
et place ensuite ce même lien dans le dossier /home/mon_user, qui n’a rien d’un lien mais qui est bien mon dossier personnel[/quote] :mrgreen:
Non, le lien est en /home il s’appelle “mon_user”,pas de dossier /home/mon_user ou /mnt/data/mon_user .
Si tu veux t’arracher les cheveux :

$ cd
$ ln -s /mnt/data $HOME/data
Le lien appelé “data” se trouve en $HOME=/mnt/data=/mnt/data/data=/mnt/data/data=/mnt/data/data/data …

[quote]Par contre si je fais :
Code:
$ ln -s /mnt/data /home/mon_user/lien

et qu’il n’existe pas de dossier (ou fichier) lien ds mon /home/mon_user alors lien sera le nom… du lien[/quote]
Non, la commande échouera ou le dossier “mon_user” devra être crée contenant “lien”, sabotant tes efforts précédents

EDIT : erratum sur ce dernier point, si /home/mon_user existe,que ce soit un dossier ou un lien, ça marchera et “lien” se créera. Evidemment on crée toujours “lien” qui n’existe pas. Ça ne planterait que si /home/mon_user n’existait pas, le “lien” n’ayant nulle part où se poser.

Ok, merci pour les éclaircissements(moi qui avait lu le man… :017 )

Bien que ce sujet soit marqué résolu, je découvre ce qui n’a pas été évoqué ici:

une option de sshfs:

-o transform_symlinks
transform absolute symlinks to relative

qui pourrait bien apporter la solution au problème de LAV-FRED

Effectivement ça résoud le problème purement et simplement :023
Merci !