원래 문제
하나의 파일 시스템에 파일이 있습니다. /data/src/file
그리고 그것을 열심히 연결하고 싶습니다 : /home/user/proj/src/file
그러나 /home
한 디스크에 있고 /data
다른 디스크 에 있으므로 오류가 발생합니다.
$ cd /home/user/proj/src
$ ln /data/src/file .
ln: failed to create hard link './file' => '/data/src/file': Invalid cross-device link
좋아, 그래서 나는 장치간에 하드 링크 할 수 없다는 것을 배웠다. 맞는 말이다.
손에 문제
그래서 파일 시스템 src
에 있는 폴더를 멋지게 바인드 마운트 할 것이라고 생각했습니다 /data
.
$ 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
왜 여전히 작동하지 않습니까?
해결 방법
/data
바인딩 된 디렉토리 대신 "실제" 디렉토리 에있는 한 하드 링크를 만들 수 있기 때문에이 설정이 올바른 것입니다.
$ 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
$
일부 시스템 정보
$ 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
참고 : 상황을보다 명확하게하기 위해 파일과 디렉토리 이름을 수동으로 변경 했으므로 명령 판독 값에 오타가있을 수 있습니다.
/data
바인드 마운트 디렉토리에서 inode에 액세스 할 수 있으므로 바인드 마운트가와 동일한 파티션에 있어야 /data
하거나 하드 링크가 장치에서 작동하므로 불법이어야하지만 어쨌든 작동합니다. 내가 무엇을 놓치고 있습니까?