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 /home
ist auf einer Festplatte und /data
ist 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 src
Ordner binden , der sich im /data
Dateisystem 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" /data
Verzeichnis 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.
/data
kann ich über das Bind-Mount-Verzeichnis auf den Inode zugreifen. Daher muss sich entweder der Bind-Mount auf derselben Partition befinden wie /data
oder der Hardlink funktioniert geräteübergreifend, was illegal sein sollte, aber trotzdem funktioniert. Was vermisse ich?