어제 Samba로 윈도와 리눅스를 이었다면, 오늘은 리눅스·유닉스끼리 파일을 공유하는 정통 방식인 NFS(Network File System)를 다룬다. NFS는 1984년 썬 마이크로시스템즈가 만든 프로토콜로, 원격 서버의 디렉터리를 마치 로컬 디스크처럼 마운트해 투명하게 사용하게 해준다. 사용자는 /mnt/data에 파일을 쓰지만 실제로는 네트워크 너머 서버의 디스크에 저장되는 식이다. 핵심은 세 가지다 — 서버가 어떤 디렉터리를 누구에게 내보낼지 정의하는 /etc/exports, 그 정의를 적용하는 exportfs, 그리고 NFS가 동작하기 위해 반드시 필요한 rpcbind(포트 매퍼). 오늘은 이 세 축을 정밀하게 파고들고, 마지막에 Samba와의 차이를 정리한다.
NFS는 단독으로 동작하지 않는다. NFS는 RPC(Remote Procedure Call, 원격 프로시저 호출) 위에서 동작하는 서비스다. RPC는 클라이언트가 원격 서버의 함수를 마치 로컬 함수처럼 호출하게 해주는 메커니즘이다. 그리고 RPC 기반 서비스들은 고정 포트를 쓰지 않고 동적으로 포트를 할당받는데, 이 포트 정보를 중개하는 것이 rpcbind(과거 이름 portmap)다.
흐름은 이렇다