FreeBSD가 동일한 중첩 네트워크 내의 파일 시스템에서 다중 NFS 공유를 허용하지 않는 이유는 무엇입니까?

FreeBSD가 동일한 중첩 네트워크 내의 파일 시스템에서 다중 NFS 공유를 허용하지 않는 이유는 무엇입니까?

오랜 Linux 사용자로서 저는 FreeBSD를 새로운 NAS 서버로 사용해 왔습니다.

교체할 Linux 서버에는 한 쌍의 NFS 마운트가 있습니다. 첫 번째는 읽기-쓰기이고 두 번째는 읽기 전용입니다. 공유 폴더의 물리적 위치는 동일한 RAID 파일 시스템에 있습니다.

이 접근 방식의 아이디어는 rw 공유를 통해 새 파일을 준비한 다음 관리자가 삭제 위험 없이 향후 액세스를 위해 준비된 파일을 ro 공유로 이동하는 것입니다.

Linux(/dev/md0은 /data/shares에 마운트됨)에서 /etc/exports 파일은 다음과 같습니다.

/data/shares/rw 192.168.1.0/24(rw)
/data/shares/ro 192.168.1.0/24(ro)

FreeBSD를 설정할 때 /data에 루트 ZFS raidz2 풀을 만들었습니다.

zpool create data raidz2 /dev/ada0 /dev/ada1 /dev/ada2 /dev/ada3 /dev/ada4

그런 다음 /data/shares의 공유 데이터 세트:

zfs create data/shares

그런 다음 FreeBSD 구문을 사용하여 공유에 대해 유사한 /etc/exports 파일을 만들었습니다.

/data/shares/rw -network=192.168.1.0/24
/data/shares/ro -ro -network=192.168.1.0/24

그러나 이로 인해 단일 rw 공유만 발생하고 /var/log/messages에 오류 메시지가 표시됩니다.

mountd[63092]: can't change attributes for /data/shares/ro: netcred already exists for given addr/mask
mountd[63092]: bad exports list line '/data/shares/ro -ro -network'

추가 연구에 따르면 FreeBSD NFS 문서에는 다음이 포함되어 있는 것으로 나타났습니다.

클라이언트는 파일 시스템당 한 번만 지정할 수 있습니다. 예를 들어, /usr이 단일 파일 시스템인 경우 두 항목 모두 동일한 호스트를 지정하므로 다음 항목은 아무런 영향을 미치지 않습니다.

# Invalid when /usr is one file system
/usr/src   client
/usr/ports client

이 경우 올바른 형식은 항목을 사용하는 것입니다.

/usr/src /usr/ports  client

그러나 두 항목 모두 동일한 구성을 가지므로 이 구문은 작동하지 않습니다. 즉, 둘 다 읽기-쓰기이거나 둘 다 읽기 전용입니다.

이 관점에서 보면:

  • Linux NFS는 각 클라이언트 호스트의 공유 수준에서 구성됩니다.
  • FreeBSD NFS는 각 클라이언트 호스트의 전체 파일 시스템에 구성됩니다.

이것이 막다른 골목으로 이어지는 것 같습니다. 이 사용 사례를 구현하는 유일한 방법은 다른 ZFS 데이터 세트를 사용하는 것입니다(저는 이를 피하고 싶습니다).

요약하면 몇 가지 질문이 있습니다.

  1. FreeBSD는 왜 동일한 중첩 네트워크에서 여러 공유를 허용하지 않습니까?
  2. 유효한 사용 사례가 구현되는 것을 방해하므로 향후 변경될 가능성이 있습니까?
  3. 여러 ZFS 데이터 세트를 사용하는 것 외에 다른 솔루션이 있습니까?

아마도 이 질문은 만족스러운 해결책으로 이어지지 않을 수도 있지만, 적어도 Linux에서 FreeBSD로 마이그레이션할 때 동일한 문제에 직면할 수 있는 다른 사람들에게는 유용할 것입니다.

답변1

좋아요 그렇다면 mountdNFS 클라이언트는 디렉터를 요청할 수 있지만(허용되는 경우) 파일 시스템은 관리되기 때문에 mountd코드는 파일 시스템만 추적합니다.

관련 정보