NFS(Network File System)는 분산 파일 시스템 환경에서 서로 다른 머신 간에 파일을 공유할 수 있도록 하는 프로토콜입니다. Sun Microsystems에서 개발되어 1984년 처음 공개되었으며, 다양한 운영체제가 상호 운용 가능한 파일 공유를 가능하게 합니다.
NFS는 RPC(Remote Procedure Call)를 기반으로 동작하며, 클라이언트와 서버 간의 포트 매핑 및 서비스 호출을 통해 원격 파일 시스템 접근을 지원합니다. 이 구조 덕분에 서로 다른 하드웨어 아키텍처나 운영체제에서도 파일을 효율적으로 공유할 수 있습니다.
구성 환경
- 가상화 플랫폼: VMware
- 운영체제: Ubuntu 12.04
NFS 핵심 데몬
- nfsd: 기본 NFS 서비스 데몬으로 클라이언트 인증 및 접속 제어를 담당
- mountd: 마운트 요청 처리 및 권한 검증을 수행하는 RPC 데몬
- portmap/rpcbind: 서비스 포트와 RPC 프로그램 번호 간의 매핑을 관리
서버 구성 절차
1. 필수 패키지 설치
sudo apt-get update
sudo apt-get install nfs-kernel-server nfs-common
2. 공유 디렉토리 생성
sudo mkdir -p /shared/data
sudo chmod 755 /shared/data
3. 내보내기 설정 편집 (/etc/exports)
# 기본 형식: <공유경로> <클라이언트>(<옵션들>)
/shared/data *(rw,sync,no_subtree_check,no_root_squash)
설정 옵션 설명:
- 접근 권한: ro(읽기전용), rw(읽기쓰기)
- 사용자 매핑: root_squash/root_no_squash, all_squash
- 동기화 방식: sync(즉시 디스크 반영), async(버퍼링 후 반영)
- 네트워크 보안: secure(1024 미만 포트 제한), insecure(모든 포트 허용)
4. 서비스 재시작
sudo service rpcbind restart
sudo service nfs-kernel-server restart
5. 구성 확인
showmount -e localhost
관리 명령어
서비스 상태 관리
# 시작
sudo systemctl start rpcbind
sudo systemctl start nfs-server
# 중지
sudo systemctl stop nfs-server
sudo systemctl stop rpcbind
# 상태 확인
sudo systemctl status rpcbind
sudo systemctl status nfs-server
exportfs 활용
설정 변경 후 서비스 재시작 없이 즉시 적용:
# 전체 리로드
sudo exportfs -ra
# 변경사항 확인
sudo exportfs -v
디버깅 도구
- rpcinfo: 실행중인 RPC 서비스 목록 표시
- nfsstat: NFS 통계 정보 조회
- showmount: 마운트 가능한 공유 경로 확인
클라이언트 연결 예제
일반 리눅스 시스템
# 마운트
sudo mount -t nfs server_ip:/shared/data /mnt/remote
# 언마운트
sudo umount /mnt/remote
임베디드 장치 연결
mount -t nfs -o nolock,sync server_ip:/shared/data /target/path