/ dev 디렉토리 이외의 장치 파일에서 하드 링크를 만들 수없는 이유는 무엇입니까?


11

루트 모드로 /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디렉토리 (또는 다른 디렉토리)?

답변:


21

그러나 / 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.


3
파티션이 문제가 아닙니다. 파일 시스템 간 제한을 언급 한 것과 같습니다. /dev일반적으로 devtmpfs파일 시스템 으로 마운트됩니다 . 따라서 /dev안에있는 파일에 대한 하드 링크 만 만들 수 있습니다 /dev. 예를 들어 다른 파일 시스템으로 마운트되어 있기 때문에 /dev/nullwithin에 대한 하드 링크를 만들 수도 없습니다 . /dev/ptsdevpts
Richard Neumann

1
@RichardNeumann 좋은 지적입니다. 부분적으로 만 정확한 답변을 수정했습니다.
dr_

11

하드 링크는 파일 시스템간에 작동하지 않기 때문에 원하는 것을 달성하기 위해 하드 링크를 사용할 수 없습니다.

그러나 mknod명령으로 원하는 것을 얻을 수 있습니다 .

  1. 를 실행하십시오 ls -l /dev/devicefile. 다음과 같은 결과가 나타납니다.

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. 크기 열 ( 1, 9) 의 숫자를 기록해 두십시오 .
  3. mknod /path/to/destination c 1 9원하는 값을 대체 하여 명령을 실행하십시오 .

왜 이것이 작동합니까?

장치 파일은 효과적으로 커널 또는 커널 드라이버로 구현 된 추상 파일에 대한 하드 링크입니다. 다른 파일 시스템에서 파일 시스템 객체에 대한 하드 링크를 만들 수는 없지만 파일 시스템 객체는 아니므로 주 및 부 참조 번호를 알면 파일 시스템에서 해당 파일에 대한 참조를 만들 수 있습니다.



2

하드 링크는 파일을 가리키는 디렉토리에 다른 항목을 작성합니다 (여기서 파일은 디렉토리와 같은 파일입니다). 따라서 하드 링크는 다른 파일 시스템의 파일을 참조 할 수 없습니다.

이 경우 소프트 링크는 친구입니다. 사용하십시오 ln -s. 소프트 링크는 파일 시스템을 가로 질러있을 수 있으며, 존재하지 않는 것을 가리킬 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.