Problema original
Eu tenho um arquivo em um sistema de arquivos: /data/src/file
e quero vinculá-lo a: /home/user/proj/src/file
mas /homeestá em um disco e /dataem outro, então eu recebo um erro:
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
Tudo bem, então aprendi que não consigo estabelecer uma ligação direta entre dispositivos. Faz sentido.
Problema em questão
Por isso, pensei em criar uma srcpasta montada em um /datasistema de arquivos:
$ 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
Por que isso ainda não funciona?
Gambiarra
Eu sei que tenho essa configuração correta, porque posso criar o link físico desde que eu esteja no /datadiretório "real" em vez do diretório vinculado.
$ 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
$
Algumas informações do sistema
$ 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
Nota : Alterei manualmente os nomes de arquivos e diretórios para tornar a situação mais clara, para que possa haver um erro de digitação ou dois nas leituras de comando.
/datafísico, posso acessar o inode a partir do diretório de montagem de ligação, portanto, a montagem de ligação deve estar na mesma partição /dataou o link físico está funcionando em dispositivos, o que deve ser ilegal, mas funciona de qualquer maneira. o que estou perdendo?