Problème d'origine
J'ai un fichier sur un système de fichiers: /data/src/file
et je veux le lier à: /home/user/proj/src/file
mais /home
est sur un disque et /data
sur un autre donc j'obtiens une erreur:
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
D'accord, j'ai donc appris que je ne peux pas établir de lien dur entre les appareils. Logique.
Problème à portée de main
J'ai donc pensé que j'aurais envie de créer un src
dossier sur /data
le système de fichiers de:
$ mkdir -p /data/other/src
$ cd /home/user/proj
$ sudo mount --bind /data/other/src src/
$ cd src
$ # (now we're technically on `/data`'s file system, right?)
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
Pourquoi cela ne fonctionne toujours pas?
solution de contournement
Je sais que cette configuration est correcte car je peux créer le lien dur tant que je suis dans le "vrai" /data
répertoire au lieu du lien lié.
$ cd /data/other/src
$ ln /data/src/file .
$ # OK
$ cd /home/user/proj/src
$ ls -lh
total 35M
-rw------- 2 user user 35M Jul 17 22:22 file
$
Quelques informations système
$ uname -a
Linux <host> 4.10.0-24-generic #28-Ubuntu SMP Wed Jun 14 08:14:34 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ findmnt
.
.
.
├─/home /dev/sdb8 ext4 rw,relatime,data=ordered
│ └─/home/usr/proj/src /dev/sda2[/other/src]
│ ext4 rw,relatime,data=ordered
└─/data /dev/sda2 ext4 rw,relatime,data=ordered
$ mountpoint -d /data
8:2
$ mountpoint -d /home/usr/proj/src/
8:2
Remarque : J'ai modifié manuellement les noms de fichier et de répertoire pour rendre la situation plus claire, il peut donc y avoir une faute de frappe ou deux dans les affichages de commande.
/data
je peux accéder à l'inode à partir du répertoire de montage de liaison, donc soit le montage de liaison doit être sur la même partition que /data
, soit le lien dur fonctionne sur plusieurs appareils, ce qui devrait être illégal, mais fonctionne quand même. Qu'est-ce que je rate?