NFS: Difference between revisions

From HPCWIKI
Jump to navigation Jump to search
(Fix: remove --- horizontal lines (12 removed))
(Phase 0.4: Expand NFS)
 
Line 552: Line 552:


[[Category:Reference]]
[[Category:Reference]]
== NFSv4.2 Features ==
NFSv4.2는 NFS 최신 버전. 여러 성능 개선 기능 포함.
=== PFCP (Parallel NFS) ===
* 파일 내 병렬 I/O. 큰 파일 처리 속도↑
* client-side caching. 로컬 캐시로 읽기 속도↑
<syntaxhighlight lang="bash">
# PFCP 마운트 옵션
mount -t nfs4 -o vers=4.2,cache=loose server:/share /mnt/nfs
</syntaxhighlight>
=== RDMA-NFS (NFS over RDMA) ===
* RDMA로 NFS 트래픽 전송. CPU 부하 ↓, 레이턴시 ↓
* IPoIB ([[InfiniBand]] over IP) 또는 RoCE 사용
<syntaxhighlight lang="bash">
# RDMA-NFS 마운트
mount -t nfs -o vers=4.2,rdma server:/share /mnt/nfs
# RDMA-NFS 성능 확인
nfsstat -m
</syntaxhighlight>
=== Copy Offload (COPY/DEDUP) ===
* 서버 사이드 복사. 네트워크 트래픽 없음
* 대용량 데이터 이동 시 효율적
<syntaxhighlight lang="bash">
# 서버 사이드 복사
cp --reflink=auto /mnt/nfs/source /mnt/nfs/dest
</syntaxhighlight>

Latest revision as of 13:37, 17 July 2026

NFS

Template:Status

Template:TOC

Overview

NFS(Network File System)는 Sun Microsystems에서 개발한 네트워크 파일 공유 시스템입니다. SMB/SMB와 함께 네트워크 상의 파일 시스템을 로컬 파일 시스템처럼 접근할 수 있게 해주는 가장 널리 사용되는 HPC 스토리지 솔루션입니다.

Summary

  • 무엇인가? — 네트워크 파일 공유 프로토콜 (TCP/IP 기반)
  • 왜 필요한가? — 중앙 집중식 스토리지, 다수 클라이언트 공유, 간단한 설정
  • 언제 사용하는가? — HPC 클러스터, 파일 서버, 스토리지 공유


Purpose

이 문서가 존재하는 이유

  • Goal: NFS 버전, 서버/클라이언트 설정, 마운트 옵션, 성능 튜닝 제공
  • Scope: NFS v2~v4.2, export/mount 옵션, 성능 최적화, 서비스 의존성
  • Non-goals: NFS 커널 패치 개발, NFSv4.3+ 최신 기능은 별도 문서


Key Concepts

Concept Description Related
NFSv4 상태(Stateful) 기반 NFS — 단일 포트 2049 NFS
pNFS Parallel NFS — 다수 서버 스트라이핑 NFS
exportfs NFS 공유 내보내기 명령어 NFS
mount options NFS 클라이언트 마운트 옵션 NFS
rsize/wsize 읽기/쓰기 블록 크기 NFS
nconnect 다중 TCP 연결 (커널 5.3+) NFS
FS-Cache NFS 클라이언트 로컬 캐싱 NFS
root_squash 원격 루트 권한 제한 NFS


Architecture

NFS는 클라이언트-서버 아키텍처로 구성됩니다:

graph TD
    A[NFS Server] --> B[/etc/exports]
    A --> C[nfs-server.service]
    A --> D[nfs-mountd]
    A --> E[nfs-idmapd]
    B --> F[Shared Directory]
    G[NFS Client] --> H[mount -t nfs]
    G --> I[/etc/fstab]
    H --> J[NFS Server:2049]
    I --> J


Workflow

Stage Input Output
Server Setup /etc/exports NFS Share
Client Mount mount -t nfs NFS Mount Point
Performance Tuning rsize/wsize/timeo Optimized NFS
Monitoring nfsstat / /proc/net/rpc/nfsd Performance Data


Detailed Explanation

NFS 버전

Version Description Key Features
NFSv2 RFC 1094 (1989) UDP만 지원, 2GB 파일 제한, 8KB 쓰기 제한
NFSv3 RFC 1813 (1995) 대용량 파일 지원, TCP 지원, 56KB 트랜잭션
NFSv4 RFC 3010/3530/7530 상태(Stateful), 단일 포트 2049, Kerberos 보안
NFSv4.1 RFC 5661 (2010) pNFS(Parallel NFS), 블록/객체 접근, Windows Kerberos
NFSv4.2 RFC 7862 향상된 성능 및 기능

NFS 서버 설정

/etc/exports 옵션

Export Options NFS Server Default
secure/insecure NFSv4는 포트 2049만 사용. NFSv3는 서버 포트 사용. secure: 클라이언트 포트 < 1024. insecure: 모든 포트 허용. secure
rw/ro rw: 읽기/쓰기. ro: 읽기 전용. rw
root_squash/no_root_squash root_squash: 원격 루트 권한 제한. no_root_squash: 원격 루트 전체 권한 허용. root_squash
all_squash/no_all_squash all_squash: 모든 UID/GID를 anonymous로 매핑. no_all_squash
sync/async sync: 변경사항 저장 후 응답. async: 저장 전 응답 (성능 ↑, 데이터 손실 위험). sync
insecure_locks 파일 잠금 시 클라이언트 자격 증명 불필요 (보안 위험).

export 명령어

# 공유 내보내기
$ exportfs -a

# 공유 다시 내보내기
$ exportfs -r

# 공유 권한 확인
$ exportfs -v

# 현재 NFS 서비스 포트 확인
$ rpcinfo -p | grep -i nfs

export 예시

# /etc/exports
/srv/nfs4         192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www     192.168.33.20(rw,sync,no_subtree_check)

Ubuntu NFS 서비스 의존성

Service nfs-utils.service nfs-server.service Config File (22.04) Config File (< 22.04)
nfs-blkmap PartOf nfs.conf
nfs-mountd BindsTo nfs.conf nfs-kernel-server
nfsdcld
nfs-idmapd BindsTo nfs.conf, idmapd.conf idmapd.conf
rpc-gssd PartOf nfs.conf
rpc-statd PartOf nfs.conf nfs-common
rpc-svcgssd PartOf BindsTo nfs.conf nfs-kernel-server

NFS 클라이언트 마운트 옵션

Mount Options NFS Client Default Notes
nfsvers/vers=n 사용할 NFS 버전. 기본값 3. 3, 4
rw/ro rw: 읽기/쓰기. ro: 읽기 전용. rw
suid/nosuid suid: setuid 프로그램 허용. nosuid: setuid 차단. suid
hard/soft hard: 서버 다운 시 재시도 (프로세스 대기). soft: 재시도 후 에러 반환. hard
nconnect=value 다중 TCP 연결 (커널 5.3+). 최대 16. 16 성능 향상
intr/nointr intr: NFS 요청 중단 가능. nointr: 중단 불가. intr Linux 2.6.25+ deprecated
fg/bg fg: 부팅 필수 마운트. bg: 백그라운드 마운트. fg
devs/nodevs devs: 장치 파일 허용. nodevs: 장치 파일 차단. devs
timeo=n 재전송 대기 시간 (0.1초 단위). 최대 30 (3초). 0.7
retrans=n 재전송 횟수. 4
retry=n 마운트 재시도 횟수. 1
rsize=n 읽기 블록 크기. 8192
wsize=n 쓰기 블록 크기. 8192
noac 속성 캐싱 비활성화.
actimeo=n 모든 캐싱 타임아웃 설정.
lock/nolock NLM 파일 잠금 사용 여부. lock
local_lock=mechanism 로컬 잠금 방식 (all/flock/posix/none). 커널 2.6.37+

NFS 성능 최적화

Tuning Options Target Description Recommendation
sync/async 클라이언트 mount 또는 /etc/fstab에서 설정
nfsd 수 서버 /proc/net/rpc/nfsd로 스레드 부하 확인 16C/128GB: 256, 8C/64GB: 64
rsize/wsize 클라이언트 읽기/쓰기 블록 크기 /etc/fstab에서 rsize=131072, wsize=131072
timeo/retrans 클라이언트 네트워크 혼잡 시 재전송 설정 timeo=900, retrans=5
FS-Cache 클라이언트 로컬 스토리지에 NFS 읽기 캐싱 (-o fsc) 읽기 작업에 효과적
noatime/nodiratime 클라이언트 inode 접근 시간 업데이트 방지 성능 향상
System Memory 서버 async 모드 시 메모리 확보 필요 가능한 많은 메모리
Network MTU 서버+클라이언트 MTU 1500 → 9000 (Jumbo Packet) 대역폭 33% 증가
TCP tuning 서버 net.core.rmem/wmem 설정 262144 (256KiB)
subtree_check 서버 export된 폴더 내 파일 확인 보안 ↑, 성능 ↓
root_squash 서버 원격 루트 권한 제한 보안 ↑

NFS v4.1/v4.2 권장

# NFS v4.2 마운트
$ mount -o nfsvers=4.2 srvr:/export /mountpoint

# 또는
$ mount -o nfsvers=4,minorversion=2 srvr:/export /mountpoint

rsize/wsize 설정

# /etc/fstab
srvr1:/usr/local  /usr/local  nfs  nfsvers=4.2,rsize=131072,wsize=131072  0  0

# systemd automount
srvr1:/usr/local  /usr/local  nfs  noauto,x-systemd.automount,nfsvers=4.2,rsize=131072,wsize=131072  0  0

권장 마운트 옵션

Condition Recommended Options
Server-Side NLM Enabled
mount -t nfs -o rsize=65536,wsize=65536,intr,hard,tcp,rdirplus,readahead=128 server:/path mountpath
Local Locking Enforced
mount -t nfs -o rsize=65536,wsize=65536,intr,hard,tcp,locallocks,rdirplus,readahead=128 server:/path mountpath


Configuration

# NFS 서버 설정
$ sudo systemctl enable nfs-server
$ sudo systemctl start nfs-server

# /etc/exports 설정
$ echo "/srv/nfs4 192.168.1.0/24(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
$ sudo exportfs -r

# NFS 클라이언트 마운트
$ sudo mount -t nfs -o vers=4.1 192.168.1.10:/srv/nfs4 /mnt/nfs

# /etc/fstab에 추가
$ echo "192.168.1.10:/srv/nfs4 /mnt/nfs nfs nfsvers=4.1,defaults,nofail,timeo=900,retrans=5,_netdev 0 0" | sudo tee -a /etc/fstab


Examples

Example 1: NFS 서버 설정

# NFS 서버 설치
$ sudo apt-get install nfs-kernel-server

# /etc/exports 설정
$ sudo tee /etc/exports << EOF
/srv/nfs4 192.168.1.0/24(rw,sync,no_subtree_check)
EOF

# NFS 서비스 시작
$ sudo systemctl enable nfs-server
$ sudo systemctl start nfs-server

# 공유 내보내기
$ sudo exportfs -r
$ sudo exportfs -v

Example 2: NFS 클라이언트 마운트

# NFS 마운트
$ sudo mount -t nfs -o vers=4.1 192.168.1.10:/srv/nfs4 /mnt/nfs

# 마운트 옵션 확인
$ cat /proc/mounts | grep nfs

# NFS 상태 확인
$ nfsstat -m


Best Practices

  • NFS v4.2 사용 (최신 버전)
  • rsize/wsize=131072 설정 (대용량 전송)
  • nconnect=16 사용 (다중 TCP 연결)
  • MTU 9000 (Jumbo Packet) 적용
  • sync 옵션 사용 (데이터 무결성)
  • root_squash 활성화 (보안)
  • FS-Cache 활성화 (읽기 성능)
  • noatime/nodiratime 설정 (성능)
  • 정기적인 nfsstat 모니터링


Limitations

  • NFSv2: 2GB 파일 제한, UDP만 지원
  • NFSv3: 상태(Stateless) — 서버 재시작 시 세션 손실
  • NFSv4: Kerberos 설정 복잡
  • 네트워크 지연에 민감
  • 대용량 파일 동시 접근 시 병목
  • NFS 서버 단일 장애점 (SPOF)


References


Related Pages

Knowledge Graph

Related

NetworkNFSv4 ACLsStorage

NFSv4.2 Features

NFSv4.2는 NFS 최신 버전. 여러 성능 개선 기능 포함.

PFCP (Parallel NFS)

  • 파일 내 병렬 I/O. 큰 파일 처리 속도↑
  • client-side caching. 로컬 캐시로 읽기 속도↑
# PFCP 마운트 옵션
mount -t nfs4 -o vers=4.2,cache=loose server:/share /mnt/nfs

RDMA-NFS (NFS over RDMA)

  • RDMA로 NFS 트래픽 전송. CPU 부하 ↓, 레이턴시 ↓
  • IPoIB (InfiniBand over IP) 또는 RoCE 사용
# RDMA-NFS 마운트
mount -t nfs -o vers=4.2,rdma server:/share /mnt/nfs

# RDMA-NFS 성능 확인
nfsstat -m

Copy Offload (COPY/DEDUP)

  • 서버 사이드 복사. 네트워크 트래픽 없음
  • 대용량 데이터 이동 시 효율적
# 서버 사이드 복사
cp --reflink=auto /mnt/nfs/source /mnt/nfs/dest