NFS: Difference between revisions
Jump to navigation
Jump to search
(Add categories: Server, Reference) |
(Phase 6.1: LLM-Optimized Wiki Template 적용 (NFS)) |
||
| Line 1: | Line 1: | ||
NFS | = NFS = | ||
{{Status | |||
|status=Draft | |||
|owner=Knowledge Agent | |||
|last_update=2026-07-15 | |||
|review=Pending | |||
}} | |||
{{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 == | |||
{| class="wikitable" | {| class="wikitable" | ||
! 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]] | |||
|} | |} | ||
== | --- | ||
{| class="wikitable | |||
== Architecture == | |||
! | |||
! | NFS는 클라이언트-서버 아키텍처로 구성됩니다: | ||
! | |||
<syntaxhighlight lang="mermaid"> | |||
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 | |||
</syntaxhighlight> | |||
--- | |||
== Workflow == | |||
{| class="wikitable" | |||
! 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 | ||
|} | |} | ||
--- | |||
NFS | |||
== Detailed Explanation == | |||
=== NFS 버전 === | |||
{| class="wikitable" | {| class="wikitable" | ||
! 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 옵션 ==== | |||
< | {| class="wikitable" | ||
|root_squash | ! 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/ | | sync/async | ||
| | | sync: 변경사항 저장 후 응답. async: 저장 전 응답 (성능 ↑, 데이터 손실 위험). | ||
| sync | |||
|sync | |||
|- | |- | ||
|insecure_locks | | insecure_locks | ||
| | | 파일 잠금 시 클라이언트 자격 증명 불필요 (보안 위험). | ||
| — | |||
| | |||
|} | |} | ||
=== | ==== export 명령어 ==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# | # 공유 내보내기 | ||
$ | $ exportfs -a | ||
# 공유 다시 내보내기 | |||
$ exportfs -r | |||
# 공유 권한 확인 | |||
$ exportfs -v | |||
# 현재 NFS 서비스 포트 확인 | |||
$ rpcinfo -p | grep -i nfs | $ rpcinfo -p | grep -i nfs | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | ==== export 예시 ==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/etc/exports | # /etc/exports | ||
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0) | /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/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check) | ||
| Line 130: | Line 208: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Ubuntu NFS | === Ubuntu NFS 서비스 의존성 === | ||
{| class="wikitable" | {| class="wikitable" | ||
!Service | ! Service | ||
!nfs-utils.service | ! nfs-utils.service | ||
!nfs-server.service | ! nfs-server.service | ||
! | ! Config File (22.04) | ||
! | ! Config File (< 22.04) | ||
|- | |- | ||
|nfs-blkmap | | nfs-blkmap | ||
|PartOf | | PartOf | ||
| | | — | ||
|nfs.conf | | nfs.conf | ||
| | | — | ||
|- | |- | ||
|nfs-mountd | | nfs-mountd | ||
| | | — | ||
|BindsTo | | BindsTo | ||
|nfs.conf | | nfs.conf | ||
|nfs-kernel-server | | nfs-[[kernel]]-server | ||
|- | |- | ||
|nfsdcld | | nfsdcld | ||
| | | — | ||
| | | — | ||
| | | — | ||
| | | — | ||
|- | |- | ||
|nfs-idmapd | | nfs-idmapd | ||
| | | — | ||
|BindsTo | | BindsTo | ||
|nfs.conf, idmapd.conf | | nfs.conf, idmapd.conf | ||
|idmapd.conf | | idmapd.conf | ||
|- | |- | ||
|rpc-gssd | | rpc-gssd | ||
|PartOf | | PartOf | ||
| | | — | ||
|nfs.conf | | nfs.conf | ||
| | | — | ||
|- | |- | ||
|rpc-statd | | rpc-statd | ||
|PartOf | | PartOf | ||
| | | — | ||
|nfs.conf | | nfs.conf | ||
|nfs-common | | nfs-common | ||
|- | |- | ||
|rpc-svcgssd | | rpc-svcgssd | ||
|PartOf | | PartOf | ||
|BindsTo | | BindsTo | ||
|nfs.conf | | nfs.conf | ||
|nfs-kernel-server | | nfs-kernel-server | ||
|} | |} | ||
== NFS | === NFS 클라이언트 마운트 옵션 === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Mount Options | |||
!Mount Options | ! NFS Client | ||
!NFS Client | ! Default | ||
!Default | ! Notes | ||
!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 성능 최적화 === | |||
{| class="wikitable" | |||
! 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 권장 === | |||
<syntaxhighlight lang="bash"> | |||
# NFS v4.2 마운트 | |||
$ mount -o nfsvers=4.2 srvr:/export /mountpoint | |||
# 또는 | |||
$ mount -o nfsvers=4,minorversion=2 srvr:/export /mountpoint | |||
</syntaxhighlight> | |||
=== rsize/wsize 설정 === | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# /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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | === 권장 마운트 옵션 === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Condition | |||
! | ! Recommended Options | ||
|- | |- | ||
| | | Server-Side NLM Enabled | ||
| | | <syntaxhighlight>mount -t nfs -o rsize=65536,wsize=65536,intr,hard,tcp,rdirplus,readahead=128 server:/path mountpath</syntaxhighlight> | ||
|- | |- | ||
| | | Local Locking Enforced | ||
| | | <syntaxhighlight>mount -t nfs -o rsize=65536,wsize=65536,intr,hard,tcp,locallocks,rdirplus,readahead=128 server:/path mountpath</syntaxhighlight> | ||
|} | |||
--- | |||
== Configuration == | |||
<syntaxhighlight lang="bash"> | |||
# 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 | |||
</syntaxhighlight> | |||
--- | |||
== Examples == | |||
=== Example 1: NFS 서버 설정 === | |||
<syntaxhighlight lang="bash"> | |||
# 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 | |||
</syntaxhighlight> | |||
=== Example 2: NFS 클라이언트 마운트 === | |||
<syntaxhighlight lang="bash"> | |||
# 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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
--- | |||
== 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 == | == References == | ||
* https://en.wikipedia.org/wiki/Network_File_System | |||
* https://nfs.sourceforge.net/nfs-howto/ar01s05.html | |||
* https://www.admin-magazine.com/HPC/Articles/Useful-NFS-Options-for-Tuning-and-Management | |||
* https://ubuntu.com/server/docs/service-nfs | |||
--- | |||
== Related Pages == | |||
* [[Samba]] | |||
* [[Storage]] | |||
* [[Linux]] | |||
* [[Network]] | |||
* [[Fstab]] | |||
--- | |||
[[Category:Server]] | [[Category:Server]] | ||
[[Category:Reference]] | [[Category:Reference]] | ||
Revision as of 12:40, 15 July 2026
NFS
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
- https://en.wikipedia.org/wiki/Network_File_System
- https://nfs.sourceforge.net/nfs-howto/ar01s05.html
- https://www.admin-magazine.com/HPC/Articles/Useful-NFS-Options-for-Tuning-and-Management
- https://ubuntu.com/server/docs/service-nfs
---
Related Pages
---