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 /home
está em um disco e /data
em 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 src
pasta montada em um /data
sistema 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 /data
diretó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.
/data
fí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 /data
ou o link físico está funcionando em dispositivos, o que deve ser ilegal, mas funciona de qualquer maneira. o que estou perdendo?