Problema original
Tengo un archivo en un sistema de archivos: /data/src/file
y quiero vincularlo a: /home/user/proj/src/file
pero /home
está en un disco y /data
está en otro, así que recibo un error:
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
Bien, entonces aprendí que no puedo vincular a través de dispositivos. Tiene sentido.
Problema a mano
Así que pensé en ponerme elegante y montar una src
carpeta que está en /data
el sistema de archivos:
$ 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 qué esto todavía no funciona?
Solución alterna
Sé que tengo esta configuración correcta porque puedo hacer el enlace duro siempre que esté en el /data
directorio "real" en lugar del enlazado.
$ 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
$
Alguna información del 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 : Cambié manualmente los nombres de archivo y directorio para aclarar la situación, por lo que puede haber un error tipográfico o dos en las lecturas de comandos.
/data
puedo acceder al inodo desde el directorio de montaje de enlace, por lo que el montaje de enlace debe estar en la misma partición /data
o el enlace duro funciona en todos los dispositivos, lo que debería ser ilegal, pero funciona de todos modos. ¿Qué me estoy perdiendo?