공유 NFS 디렉터리가 단일 백업 파일 시스템에서 호스팅되는 경우 두 개 이상의 NFS 마운트에 걸쳐 클라이언트에서 하드 링크를 설정하는 방법이 있습니까? (이렇게 하면 로컬로 로그인하거나 ssh를 통해 로그인하면 서버의 inode 및 하드 링크에 문제가 없습니다.)
NFSv4 공유로 여러 디렉터리를 제공하는 서버가 있습니다. 모든 공유 디렉터리는 [ext4] 파일 시스템에 있습니다. 개별적으로 공유되므로 클라이언트가 개별적으로 설치할 수 있습니다.
공유 A 또는 B가 각각 마운트되는 디렉토리 트리에 하드 링크를 생성할 수 있습니다 bar.file
. 그러나 마운트 A와 BI 사이에 OR을 생성하려고 하면 ln
오류가 발생합니다. 서버에 직접 로그인하는 것 외에 이 문제를 해결할 수 있는 다른 방법이 있나요?cp -l
Invalid cross-device link
소스의 inode를 읽고 대상 디렉토리에 동일한 inode가 있는 파일 항목을 수동으로 생성하는 짧은 스크립트를 생각하고 있었지만 약간 해킹된 것 같아서 필요한 구성 요소를 조사해야 합니다.
아니면 일종의 조인트 마운팅 솔루션일까요?
두 시스템 모두에 대한 일반 사용자 및 루트 액세스 권한이 있다고 가정해 보겠습니다.
답변1
일반적인 관찰
개별적으로 공유되므로 클라이언트가 개별적으로 설치할 수 있습니다.
이 추론은 말이되지 않습니다. 상위 디렉터리가 공유되는 경우 클라이언트는 하위 디렉터리를 별도로 마운트할 수 있습니다.그래도. 상위 디렉터리에 공유하고 싶지 않은 항목이 있는 경우(또는 있을 수 있는 경우) 디렉터리를 별도로 공유해야 할 수도 있습니다. 이는 타당한 이유일 수도 있고 다른 이유가 있을 수도 있습니다. 하지만…
별도로 설치할 수 있는 기능을 제공하는 것은 별도로 공유해야 할 타당한 이유가 아닙니다. 그럼에도 불구하고 NFSv4는 클라이언트에 이 기능을 제공합니다. /etc/exports
서버에 하나 있어요액세스 제어 목록목록 대신분리고객이 보유해야 하는 주식. mount
클라이언트에서 사용할 때제한 없음/etc/exports
서버의 정확한 경로입니다. 클라이언트는 /
서버를 마운트하고 여전히 모든 공유에 액세스할 수 있습니다. 또는 액세스를 허용하는 모든 하위 디렉터리를 마운트할 수 있습니다.
/
서버를 설치해 보세요 . 특정 공유의 특정 ((...)sub-)sub-) 하위 디렉터리를 마운트하려고 합니다. 내 요점은 당신이 할 수 있다는 것입니다.
해결책
Invalid cross-device link
당신이 얻는 결과는 NFS 클라이언트에서 로컬로 사용하는 경로가 공식적으로 별도의 "장치"에 있기 때문입니다. 해결책은 모든 관련 공유를 포함하는 계층 구조(디렉토리 트리)를 마운트하여 하나의 마운트 지점 아래에 로컬로 표시되도록 하는 것입니다(즉, 단일 "장치").
/
NFS 클라이언트 또는 관련 원격 파일 시스템의 원격 마운트 지점 또는 공유의 다른 공통 상위 디렉토리에 서버의 루트 디렉토리( )를 마운트합니다. 설치에 대한 원격 경로를 서버에서 명시적으로 내보낼 필요는 없습니다. 예:
sudo mount -t nfs 192.168.99.7:/remote/mountpoint /local/mountpoint
로컬 마운트 지점 아래에서 선택한 원격 디렉터리의 내용이 내보낸 공유로 제한되어 있음을 알 수 있습니다. 예를 들어, 원격 디렉토리 및 을 내보내고 /remote/mountpoint/foo/A
아무 것도 내보내지 않으면(내보내거나 내보내지 않은 경우에도) 로컬에서는 및 을 볼 수 있지만 은 볼 수 없습니다. 당신은 도달 할 수있을 것입니다./remote/mountpoint/bar/baz/B
/remote/mountpoint/qux
/
/remote/mountpoint
/local/mountpoint
foo/
bar/
qux/
foo/A/
bar/baz/B/
이제 엄격하게 아래에서 작업하면 디렉터리 간에 로컬로 작업 /local/mountpoint
할 수 있으며 디렉터리가 실제로 서버의 동일한 파일 시스템에 있고 쓰기가 허용되면 작업이 성공합니다.ln
A
B
답변2
NFS 공유를 포함하여 대부분의 파일 시스템의 일반적인 구현은 마운트된 파일 시스템 내에서 수행할 수 있는 일련의 작업(열기, 읽기...)을 정의합니다(객체 지향 언어와 마찬가지로). NFS 클라이언트 구현은 다른 파일 시스템에 대한 작업을 처리할 수 없습니다. (클라이언트 입장에서는 2개의 파일 시스템이 있습니다.)
이론적으로 전용 클라이언트가 2개의 NFS 파일 시스템을 마운트하고(NFS 메시지 전송) 2개의 파일 핸들을 얻은 다음 이를 사용하여 2개의 파일을 연결하는 것이 가능합니다(NFS 메시지 전송도 가능). 그러나 운영 체제가 이를 제공하지 않는다면 큰 고통이 될 것이며 100% 성공 가능성은 없습니다. 이는 서버 구현에 따라 달라질 수 있습니다.