/home
내 디렉토리에 하드링크를 만들고 싶을 때뿌리모드에서 Linux는 다음 오류 메시지를 표시합니다.
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
위의 오류 메시지는 아래와 같습니다.
# cd /home/user/
# ln /dev/sda1 my_sdb
하지만 다른 디렉토리가 아닌 해당 디렉토리에만 하드 링크를 생성할 수 있습니다 /dev
.
sdb1
이제 디렉터리(또는 다른 디렉터리)에 있는 기존 장치 파일(예:)에서 하드 링크를 만드는 방법이 궁금합니다 ./home
답변1
하지만 /dev 디렉토리에만 하드링크를 생성할 수 있고 다른 디렉토리에서는 생성이 불가능합니다.
오류 메시지에서 알 수 있듯이 다른 파일 시스템에서는 하드 링크를 만들 수 없습니다. 소프트(심볼릭) 링크만 만들 수 있습니다.
예를 들어 /home
파티션이 루트 파티션과 다른 /tmp/foo
경우 /home/user/
.
이제 @RichardNeumann이 지적했듯이 /dev
이는 일반적으로 devtmpfs 파일 시스템으로 마운트됩니다. 이 예를 보세요:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
따라서 /dev
내 파일에 대한 하드 링크 만 생성할 수 있습니다 /dev
.
답변2
하드 링크는 파일 시스템 간에 작동하지 않기 때문에 원하는 것을 달성하는 데 사용할 수 없습니다.
그러나 명령을 사용하면 원하는 것을 얻을 수 있습니다 mknod
.
달리다
ls -l /dev/devicefile
. 다음과 같은 출력이 표시됩니다.crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- 측정기준 열의 숫자( )를 확인하세요
1, 9
. - 명령을 실행하십시오
mknod /path/to/destination c 1 9
(원하는 값을 바꾸십시오).
이것이 작동하는 이유는 무엇입니까?
장치 파일은 실제로 커널이나 커널 드라이버에 의해 구현된 추상 파일에 대한 하드 링크입니다. 다른 파일 시스템에서 파일 시스템 개체에 대한 하드 링크를 만들 수는 없지만 파일 시스템 개체는 아니므로 해당 주 및 부 참조 번호를 알면 모든 파일 시스템에서 해당 개체에 대한 참조를 만들 수 있습니다.
답변3
하드 링크는 단순히 파일을 가리키는 또 다른 항목을 디렉토리에 생성합니다(여기서 file은 디렉토리와 같은 파일과 유사합니다). 따라서 하드 링크는 다른 파일 시스템의 파일을 참조할 수 없습니다.
이 경우 소프트 링크는 당신의 친구입니다. 사용 ln -s
. 소프트 링크는 파일 시스템에 걸쳐 있을 수 있으며 심지어 존재하지 않는 항목을 가리킬 수도 있습니다.