오랜 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 데이터 세트를 사용하는 것입니다(저는 이를 피하고 싶습니다).
요약하면 몇 가지 질문이 있습니다.
- FreeBSD는 왜 동일한 중첩 네트워크에서 여러 공유를 허용하지 않습니까?
- 유효한 사용 사례가 구현되는 것을 방해하므로 향후 변경될 가능성이 있습니까?
- 여러 ZFS 데이터 세트를 사용하는 것 외에 다른 솔루션이 있습니까?
아마도 이 질문은 만족스러운 해결책으로 이어지지 않을 수도 있지만, 적어도 Linux에서 FreeBSD로 마이그레이션할 때 동일한 문제에 직면할 수 있는 다른 사람들에게는 유용할 것입니다.
답변1
좋아요 그렇다면 mountd
NFS 클라이언트는 디렉터를 요청할 수 있지만(허용되는 경우) 파일 시스템은 관리되기 때문에 mountd
코드는 파일 시스템만 추적합니다.