NFS
개요
네트워크 파일 시스템.
파일 시스템인데, 네트워크를 연결해서 사용하는 파일 시스템이다.
84년 Sun Microsystems에 의해 개발된 UNIX 프로토콜로, 최근 사용되는 버전은 v4.
특징
서버 - 클라이언트 관계를 가지고 있다.
그래서 클라이언트가 서버에 요청해서 연결되는 방식이다.
여러 클라이언트가 같은 파일시스템을 공유할 수 있게 된다.
장점
FTP, Samba와 비교하여 가지는 이점은 다음과 같다.
- 네트워크 요청 수를 줄이는 캐싱 매커니즘이 있어 빠른 접근 가능
- 파일 잠금을 지원하여 이슈 없이 원활한 공동 작업 가능
단점
- 기본 암호, 인증 기능이 없어 보안성 취약 -> v4부터는 TLS 인증도 지원한다.
- 클라이언트가 늘어날수록 서버의 부하가 늘어난다.
- 다른 OS에서 호환되지 않는다. -> 이후 버전에서 업그레이드 됐다고 함
원리
내부적으로는 RPC 프로토콜이 사용된다.
그래서 사용할 때는 rpcbind라고 하는 요청을 받아서 포트 매핑을 해주는 데몬 프로세스가 필요하다.
클라이언트에서 서버에 파일 관련 작업 요청을 보내고, 이를 서버에서 수락하는 방식.
클라이언트에 마운트된 파일시스템에 대한 클라이언트의 모든 요청은 rpc로 서버로 날아간다.
클라 입장에서는 자신의 파일시스템인 냥 사용하지만 결국 사실 그렇지는 않다.
서버는 요청을 받고 자신이 관리하고 있는 해당 파일시스템에 작업을 수행하고 결과를 돌려보내준다.
실습
Ganesha
위의 사진을 보면 시스템 콜 인터페이스를 사용하는데, 실제로 nfs 로직은 커널 모드에서 동작한다고 한다.
그런 만큼 사용하는 하드웨어 환경과 밀접한 연관 관계를 가진다는 듯하다.
속도는 빠르겠지만, 그만큼 유연성은 떨어지게 된다.
그래서 nfs를 유저 모드에서 실행하는 프로젝트가 나왔으니, 그것이 바로 nfs-ganesha이다.
그게 뭐 대단한 거냐, 싶은데 이 nfs는 아래에 보면 다른 많은 파일시스템들과 연결이 될 수 있다는 점에서 장점을 가진다는 듯하다.
즉, 확장성을 확보할 수 있다는 것이다.
그래서 Ceph의 프론트엔드로 활용되는 경우도 존재한다.