ls
기호 링크에는 , 등의 셸 시작 명령과 달리 , mv
, 등의 기능이 cp
작동하는 방식에 제한이 있습니다 cd
. 이러한 기능에는 사용자가 논리 경로를 기준으로 디렉터리에 액세스하는 방법에 대한 정보가 없기 때문입니다(관련 항목 참조). 콘텐츠)우편 엽서). 이 mount --bind
옵션을 사용하면 마운트된 디렉토리가 하나의 링크 대신 두 개의 별도의 물리적 경로를 가지게 되므로 삼바 및 기타 파일 서버와의 향상된 기능 및 호환성을 제공하여 이 문제를 해결할 것으로 보입니다 .
이 옵션을 사용하여 모든 심볼릭 링크를 참조로 바꾸고 싶지만 mount --bind
이는 fstab에 150개 이상의 포인트를 마운트하는 것을 의미합니다. 이로 인해 발생할 수 있는 성능 문제나 고려해야 할 다른 단점이 있습니까?
답변1
의 경우 mount --bind
디렉터리 트리는 디렉터리 계층 구조의 두 개 이상의 위치에 존재합니다. 이로 인해 많은 문제가 발생할 수 있습니다. 백업 및 기타 파일 복사본에서는 모든 복사본이 선택됩니다. 파일 시스템을 복사하도록 지정하는 것은 어려워집니다. 결국 바인드 마운트된 파일을 두 번 복사하게 됩니다. find
, grep -r
등을 사용하여 검색하면 locate
모든 복사본 등이 순회됩니다.
번들 설치에서는 "향상된 기능 및 호환성"을 얻을 수 없습니다. 대부분의 경우 바람직하지 않은 동작인 다른 디렉터리처럼 보입니다. 예를 들어 Samba는 기본적으로 심볼릭 링크를 디렉터리로 노출합니다. 바인드 마운트를 사용해도 이점이 없습니다. 반면 바인드 마운트는 NFS를 통해 디렉터리 계층을 노출하는 데 유용합니다.
번들 설치에는 성능 문제가 발생하지 않습니다. 관리상의 어려움을 겪게 됩니다. 바인드 마운트에는 chroot에서 액세스할 수 있는 디렉토리 트리를 만들거나 마운트 지점에 의해 숨겨진 디렉토리를 노출하는 등의 용도가 있습니다(이는 일반적으로 디렉토리 구조가 재구성되는 동안 임시로 사용됩니다). 필요하지 않다면 사용하지 마세요.
루트만 바인드 설치 작업을 수행할 수 있습니다. 일반적인 방법으로는 이동할 수 없으며 해당 위치와 조상 디렉터리에 잠겨 있습니다.
일반적으로 기호 링크를 명령에 전달하면 명령이 파일에서 작동하는 경우 해당 명령이 링크 자체에 작동하고, 파일 내용에 작동하는 경우 명령은 링크 대상에서 작동합니다. 이는 디렉토리에도 적용됩니다. 이것은 일반적으로 옳은 일입니다. 일부 명령에는 기호 링크를 다르게 처리하는 옵션이 있습니다(예 ls -L
: cp -d
, , ) rsync -l
. 무엇을 하든, 바인드 마운트보다 심볼릭 링크가 올바른 도구가 될 가능성이 더 높습니다.
답변2
또한@Gilles가 쓴 내용이전에는 일부 유틸리티가가능한바인드 마운트된 디렉토리를 별도의 파일 시스템으로 취급하십시오. 프로그램이 더 이상 동일한 inode 번호가 동일한 파일을 참조한다고 가정할 수 없는 경우(다른 파일 시스템에 있는 경우에는 그렇지 않음), 이는 링크에서 링크로 이동이 최적화되지 못하게 하는 성능 또는 기능적 영향을 미칠 수 있습니다. 대상을 선택한 다음 소스 연결 해제 등을 수행합니다.
답변3
항상 제공되지 않는 지원(예: 외부 디스크)에 의존하고 해당 지원이 실패하거나 제거되는 경우에도 원래 디렉터리 구조가 그대로 유지되도록 하려는 경우에도 바인드 마운트를 사용해야 합니다.
예를 들어, SD 카드에 /var/tmp를 유지하려면 바인드 마운트를 사용합니다. 일부 프로그램에서는 카드가 제거되더라도 /var/tmp가 유효한 디렉토리일 것으로 예상하기 때문입니다.
답변4
파일 바인드 마운트의 경우 심볼릭 링크보다 하드 링크에 더 가깝게 동작합니다. 이는 다음과 같은 미묘한 결과를 초래할 수 있습니다.
# echo 1 > 1.txt
# touch 2.txt
# mount --bind 1.txt 2.txt
# cat 2.txt
1
# echo 1a > 1.txt
# cat 2.txt
1a
지금까지는 괜찮았지만 이제 실제로 파일을 수정하는 프로그램(편집기, 적절하게 작성된 스크립트 등) 수를 고려하십시오.
# echo 1new > 1new.txt
# mv 1new.txt 1.txt
# cat 1.txt
1new
# cat 2.txt
1a
2.txt
그것이 심볼릭 링크라면 마지막 1.txt
명령은 1new
예상할 수 있는 출력을 갖게 됩니다.
이로 인해 몇 가지 미묘한 문제가 발생할 수 있습니다. systemd에서는 다음을 사용합니다.BindReadOnlyPaths=
특정 서비스가 resolv.conf
시스템의 나머지 부분과 다른 파일을 사용하도록 하면 이상하고 진단하기 어려운 방식으로 불안정해질 수 있습니다.resolvconf
회의바꾸다서비스 뒤에 있는 소스 파일입니다.