Masalah Asli
Saya punya file di satu sistem file: /data/src/file
dan saya ingin menghubungkannya dengan keras: /home/user/proj/src/file
tetapi /home
pada satu disk, dan /data
pada yang lain jadi saya mendapatkan kesalahan:
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
Oke, jadi saya belajar bahwa saya tidak bisa menautkan keras lintas perangkat. Masuk akal.
Masalah yang dihadapi
Jadi saya pikir saya akan suka dan mengikat mount src
folder yang ada /data
di sistem file:
$ 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
Mengapa ini masih tidak berhasil?
Penanganan masalah
Saya tahu saya memiliki pengaturan ini dengan benar karena saya dapat membuat tautan keras selama saya berada di /data
direktori "asli" daripada yang terikat.
$ 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
$
Beberapa Info Sistem
$ 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
Catatan : Saya secara manual mengubah nama file dan direktori untuk membuat situasi lebih jelas, sehingga mungkin ada salah ketik atau dua dalam pembacaan perintah.
/data
saya dapat mengakses inode dari direktori bind mount, jadi bind mount harus berada di partisi yang sama dengan /data
, atau tautan keras bekerja di seluruh perangkat, yang seharusnya ilegal, tetapi tetap berfungsi. Apa yang saya lewatkan?