Vấn đề ban đầu
Tôi có một tệp trên một hệ thống tệp: /data/src/file
và tôi muốn liên kết nó với: /home/user/proj/src/file
nhưng /home
trên một đĩa và trên đĩa /data
khác nên tôi gặp lỗi:
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
Được rồi, vì vậy tôi đã học được rằng tôi không thể liên kết cứng trên các thiết bị. Có ý nghĩa.
Vấn đề trong tầm tay
Vì vậy, tôi nghĩ rằng tôi sẽ thích và gắn kết một src
thư mục trên /data
hệ thống tệp của:
$ 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
Tại sao điều này vẫn không hoạt động?
Giải pháp thay thế
Tôi biết tôi có thiết lập này ngay vì tôi có thể tạo liên kết cứng miễn là tôi đang ở trong thư mục "thực" /data
thay vì liên kết.
$ 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
$
Một số thông tin hệ thống
$ 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
Lưu ý : Tôi đã thay đổi thủ công tên tệp và thư mục để làm cho tình huống rõ ràng hơn, do đó có thể có một hoặc hai lỗi đánh máy trong phần đọc lệnh.
/data
tôi có thể truy cập vào nút từ thư mục gắn kết liên kết, do đó, liên kết gắn kết phải nằm trên cùng một phân vùng /data
, hoặc liên kết cứng đang hoạt động trên các thiết bị, dù là bất hợp pháp, nhưng dù sao cũng hoạt động. Tôi đang thiếu gì?