내가 사용 사이의 차이를 이해하려고 노력하고 ln -s
와 mount --bind
. 기본 시나리오에서는 둘 다를 사용하여 다른 곳에서 하나의 디렉토리에 액세스 할 수 있습니다. 어떤 시나리오에서이 두 가지가 다르게 작동합니까?
내가 사용 사이의 차이를 이해하려고 노력하고 ln -s
와 mount --bind
. 기본 시나리오에서는 둘 다를 사용하여 다른 곳에서 하나의 디렉토리에 액세스 할 수 있습니다. 어떤 시나리오에서이 두 가지가 다르게 작동합니까?
답변:
적어도 두 가지 경우에 다르게 작동합니다.
A
)가 B
장착 된 무언가 ( )에 대한 심볼릭 링크로 확장됩니다 . 링크 B
에는 원본 ( A
) 대신 마운트 대상 ( ) 의 내용이 표시됩니다 .또한 기존 디렉토리 또는 파일에 디렉토리 또는 파일을 바인드 마운트하여 원래 컨텐츠를 마스킹합니다 (원본이 다른 곳에 바인드 마운트되어 있지 않으면 원래 컨텐츠에 액세스 할 수 없음). 심볼릭 링크를 사용하려면 원본을 이동하거나 삭제해야합니다.
글쎄, ln -s
심볼릭 링크를 mount --bind
만드는 반면 마운트를 만듭니다.
심볼릭 링크는 특수한 유형의 파일입니다. 당신이 할 경우 ln -s /var/target /var/link
, 다음 /var/link
의 경로 "를 포함하는 파일 될 것 /var/target
"그것에. 심볼릭 링크와 일반 파일의 유일한 차이점은 프로그램이 심볼릭 링크에서 작업을 수행하려고 할 때 일반적으로 파일 대신 대상에서 작업이 수행된다는 것입니다. 그래서 지금 당신이 할 경우 ls /var/link
는 ls
프로그램에 대한 디렉토리 목록을 얻을 것을 시도 할 것이다 /var/link
, 그러나 실제로에 대한 디렉토리 목록을 얻을 것이다 /var/target
대신.
하지만 심볼릭 링크는 여전히 파일 일뿐입니다. 이름을 바꾸고 삭제할 수 있으며 모든 재즈가 가능합니다. /var/link
이미 호출 된 파일이 있으면 호출 된 기호 링크 (또는 그 문제에 대한 일반 파일)를 작성할 수 없습니다 /var/link
. 먼저 제거해야합니다.
마운트는 파일이 아닙니다. 커널이 메모리에 보관하는 기록입니다. 그렇게 mount --bind /var/target /var/mount
하면 커널 /var/mount
은 이제 새로운 이름 인 사실을 기록합니다 /var/target
. (필자는 세부 사항을 알고하지 않습니다 특히, 내가의 하위 디렉토리에 뭔가를 설치하는 경우 모르는 /var/target
이에 표시 할 것입니다 /var/mount
. 물론, 또는 왜 또는 왜이 대답에 편집을 감상 할 수 없습니다.) 그래서 지금 당신이 경우에 ls /var/mount
, 같은 것은 당신이했던 것처럼 일어날 것 ls /var/target
때문에 /var/mount
와 /var/target
같은 디렉토리입니다.
마운트는 파일이 아닙니다. 이름을 바꾸거나 삭제하려고하면 어떻게 될지 모르겠습니다 /var/mount
. 당신이에 아무것도를 마운트 할 수 없습니다 /var/mount
하지 않는 한 이미에서 디렉토리있다 /var/mount
.
ln -s ../../myfile .
. 이 디렉토리를 다른 디렉토리로 옮기면 상대 링크이므로 다른 곳을 가리 킵니다. 하위 트리를 백업해야하지만 여전히 백업에서 링크가 작동하는 경우 유용 할 수 있습니다.
다른 답변 외에도. 시스템은 디렉토리에 대한 하드 링크를 허용하지 않습니다.
# ln mydir mpoint
ln: `mydir': hard link not allowed for directory
마운트를 사용하면 하나의 inode에 대해 두 개 이상의 이름을 하드 링크처럼 만들 수 있습니다 .
# mount -B mydir/ mpoint/
# ls -d -i *
807175 mpoint/ 807175 mydir/
(이전 버전의 rsync를 사용하면 스냅 샷 백업에 도움이됩니다.)
또한이 마운트가 완료되지 않았습니다.
# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)
따라서 옵션 ro (읽기 전용)를 요청한 경우에도 마운트를 계속 읽고 씁니다.
rm -r
합니다mount --bind
. 를 사용ln
하면 링크가 제거되는 반면 에는 대상에서--bind
실행하는 것과 동일한 효과가rm -r
있습니다. 안 좋아, 내 서버 중 하나를 다시 작성 직전에 발견 ...