본문 바로가기
리눅스/서버운영

[리눅스] NFS 서버 구성하기

by 상달군 2024. 1. 31.
728x90

NFS란?

NFS(Network File System)는 네트워크 상에서 파일 및 디렉토리를 공유하기 위한 분산 파일 시스템 프로토콜입니다. 주로 유닉스 및 유닉스 계열의 운영 체제에서 사용되며, 클라이언트와 서버 간의 효율적인 파일 공유를 제공하는 데 중점을 둡니다.

 

✔특징 !

네트워크 기반 파일 공유: NFS는 클라이언트와 서버 간의 네트워크 연결을 통해 파일 및 디렉토리를 공유합니다. 이를 통해 여러 시스템 간의 데이터를 쉽게 공유할 수 있습니다.


1. NFS 서버 구성하기 

✔ NFS 패키지 설치 

[root@localhost ~]# dnf -y install nfs-utils

✔ NFS 서버를 마운트 해줄 디렉토리 생성 

[root@localhost ~]# mkdir -p /scr/nfshome
[root@localhost ~]# chmod 777 /scr/nfshome

✔ NFS 설정파일 

- /etc/exports 파일에 경로를 설정해준다. 

[root@localhost ~]# vi /etc/exports
[root@localhost iso]# cat /etc/exports
/scr/iso        10.0.0.0/24(rw,async,no_root_squash,no_subtree_check,fsid=1)
/scr/nfshome    10.0.0.0/24(rw,async,no_root_squash,no_subtree_check,fsid=2)

✨ /scr/iso는 테스트를 위해서 만든거라 안하셔도 됩니다. 

✨ NFS 로 공유 되고있는 정보를 볼수 있음 (/etc/exports내용이 보임) 명령어 : exportfs -v


✔ NFS 서버 서비스 실행하기 

[root@localhost ~]# systemctl start nfs-server
[root@localhost iso]# systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Wed 2024-01-31 14:34:50 KST; 1h 16min ago
  Process: 34062 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 34057 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 34055 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 34424 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 34410 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
  Process: 34408 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 34424 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 306782)
   Memory: 0B
   CGroup: /system.slice/nfs-server.service

Jan 31 14:34:50 localhost.localdomain systemd[1]: Starting NFS server and services...
Jan 31 14:34:50 localhost.localdomain systemd[1]: Started NFS server and services.

2. 클라이언트 테스트 

- 클라이언트에서 테스트 해보기 


✔ 공유받을 디렉토리를 생성 

[root@localhost ~]# mkdir /scr/nfs

✔ 생성한 디렉토리에 마운트 하기 

[root@localhost ~]# mount -t nfs 10.0.0.1:/scr/nfshome /scr/nfs

✔ 마운트가 잘되었는지 확인하기 

[root@localhost ~]# df
Filesystem            1K-blocks     Used Available Use% Mounted on
devtmpfs               24542612        0  24542612   0% /dev
tmpfs                  24571528        0  24571528   0% /dev/shm
tmpfs                  24571528     9776  24561752   1% /run
tmpfs                  24571528        0  24571528   0% /sys/fs/cgroup
/dev/sda1               9754624   382856   9371768   4% /
/dev/sda2              29282336  5088460  24193876  18% /usr
/dev/sda6             413964812  2919300 411045512   1% /scr
/dev/sda3              19520512   369924  19150588   2% /var
tmpfs                   4914304       12   4914292   1% /run/user/42
tmpfs                   4914304        0   4914304   0% /run/user/0
10.0.0.1:/scr/nfshome 413965312 29066240 384899072   8% /scr/nfs

✔ 클라이언트가 빈파일 생성해보기 

[root@localhost ~]# ll /scr/nfs/
total 4
dr-xr-xr-x. 7 root root 4096 Jan 31 01:32 iso
[root@localhost ~]# touch /scr/nfs/nfsTEST
[root@localhost ~]# ll /scr/nfs/
total 4
dr-xr-xr-x. 7 root root 4096 Jan 31 01:32 iso
-rw-r--r--. 1 root root    0 Jan 31 02:10 nfsTEST

 

✔ NFS 서버에서 확인해보기 

[root@localhost nfshome]# ll
total 4
dr-xr-xr-x. 7 root root 4096 Jan 31 15:32 iso
-rw-r--r--. 1 root root    0 Jan 31 16:10 nfsTEST

✨ 클라이언트에서 만든 nfsTEST라는 빈파일 잘 보임


🔻 추가 내용 

✔ 공유 디렉토리 설정 방법

- /etc/exports 파일 편집

/NFS공유할디렉토리경로 클라이언트IP주소(옵션들)

[root@localhost ~]# cat /etc/exports
/scr/iso        10.0.0.0/24(rw,async,no_root_squash,no_subtree_check,fsid=1)
/scr/nfshome    10.0.0.0/24(rw,async,no_root_squash,no_subtree_check,fsid=2)
  • 클라이언트 IP주소: 지정할수도 있지만 *를 사용하게 되면 대역대 모두가 사용할수 있게도 가능합니다. 

✔ 옵션들

  • rw (read-write): 클라이언트가 읽고 쓸 수 있도록 합니다.
  • ro (read-only): 클라이언트가 읽기만 가능하도록 합니다.
  • sync / async: 기본적으로 NFS는 비동기적으로 작동합니다.
    • sync: 옵션을 사용하면 데이터가 디스크에 쓰여질 때까지 대기
    • async: 즉시 응답하고 나중에 디스크에 기록
      (async이 성능을 향상시킬 수 있지만, 데이터의 손실 가능성이 존재합니다.)
  • no_root_squash / root_squash: 기본적으로 NFS는 클라이언트에서 root 권한을 가진 사용자의 액세스를 제한합니다.
    • no_root_squash: 사용하면 클라이언트의 root 권한이 서버에서도 유지
  • all_squash: 모든 사용자를 익명 사용자로 매핑합니다.
  • ecure / insecure: 예약 포트와 관련
    • secure: 클라이언트가 예약된 포트를 사용하여 연결해야 합니다. 
    • insecure: 비예약 포트로의 연결도 허용
  • subtree_check / no_subtree_check: 일관성 검사 
    (성능 향상을 위해 no_subtree_check를 사용할 수 있지만, 일부 상황에서는 subtree_check가 필요할 수 있습니다.)
    • subtree_check: 서브트리 루트의 일관성을 검사하도록 합니다.
    • no_subtree_check: 서브트리 루트를 검사하지 않습니다.
  • fsid: NFS 서버는 각 공유된 디렉토리에 대해 고유한 File System ID를 할당합니다. 
    이 ID는 NFS 클라이언트에게 서버에서 제공되는 파일 시스템을 식별하는 데 사용됩니다.
    일반적으로 NFS 서버에서는 디렉토리의 경로를 기반 s으로 File System ID를 할당하지만, fsid 옵션을 사용하면 이를 수동으로 지정할 수 있습니다. 
728x90

'리눅스 > 서버운영' 카테고리의 다른 글

[리눅스] KickStart ①  (0) 2024.02.19
[리눅스] PXE부팅으로 OS설치하기  (0) 2024.01.31
[리눅스] TFTP, VSFTP서버 구성하기  (0) 2024.01.29
[리눅스] DHCP서버 구성하기  (0) 2024.01.29
[리눅스] KickStart  (1) 2024.01.23

댓글