Ursprüngliches Problem
Ich habe eine Datei in einem Dateisystem: /data/src/file
und ich möchte es fest verknüpfen mit: /home/user/proj/src/file
aber /homeist auf einer Festplatte und /dataist auf einer anderen, so dass ich eine Fehlermeldung bekomme:
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
Okay, ich habe gelernt, dass ich keine feste Verbindung zwischen Geräten herstellen kann. Macht Sinn.
Problem zur Hand
Also dachte ich, ich würde Lust bekommen und einen srcOrdner binden , der sich im /dataDateisystem befindet:
$ 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
Warum funktioniert das immer noch nicht?
Problemumgehung
Ich weiß, dass ich dieses Setup richtig habe, weil ich den festen Link herstellen kann, solange ich mich im "echten" /dataVerzeichnis anstatt im gebundenen befinde.
$ 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
$
Einige Systeminformationen
$ 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
Hinweis : Ich habe die Datei- und Verzeichnisnamen manuell geändert, um die Situation klarer zu gestalten, sodass die Befehlsanzeigen möglicherweise ein oder zwei Tippfehler enthalten.
/datakann ich über das Bind-Mount-Verzeichnis auf den Inode zugreifen. Daher muss sich entweder der Bind-Mount auf derselben Partition befinden wie /dataoder der Hardlink funktioniert geräteübergreifend, was illegal sein sollte, aber trotzdem funktioniert. Was vermisse ich?