728x90
반응형

NFS 란? 

NFS(Network File System)는 여러 컴퓨터 간에 파일을 공유하기 위한 분산 파일 시스템 프로토콜입니다. NFS는 클라이언트-서버 모델을 기반으로 하며, 클라이언트는 네트워크를 통해 NFS 서버의 파일 시스템에 액세스할 수 있습니다. 이를 통해 여러 사용자가 동일한 파일이나 디렉터리를 공유하고, 파일 시스템 자원을 효율적으로 활용할 수 있습니다.

 

NFS 동작 원리

  1. 서버 설정: 먼저 파일을 공유할 서버에서 NFS를 설정해야 합니다. 서버의 파일 시스템 중 NFS로 공유하고자 하는 디렉터리를 선택하고, 이 디렉터리를 /etc/exports와 같은 설정 파일에 등록합니다. 이 설정 파일은 클라이언트에게 공유 디렉터리의 경로와 액세스 권한을 제공합니다.
  2. 클라이언트 마운트: NFS 클라이언트에서는 NFS 서버의 공유 디렉터리를 마운트하여 사용할 수 있습니다. 클라이언트에서는 NFS 마운트 포인트를 생성하고, 이를 통해 서버의 공유된 디렉터리에 액세스할 수 있습니다.

 

NFS 동작 원리

  1. 파일 공유: NFS는 여러 사용자가 동일한 파일이나 디렉터리를 공유할 수 있도록 합니다. 이를 통해 여러 사용자가 동일한 파일에 접근하여 작업할 수 있습니다.
  2. 중앙 관리: NFS를 사용하면 파일이 중앙 서버에 저장되므로 관리 및 유지 보수가 간단해집니다. 파일의 한 복사본을 유지하므로 데이터 일관성도 쉽게 유지할 수 있습니다.
  3. 데이터 백업: NFS를 사용하여 클라이언트에서 중앙 서버로 데이터를 백업할 수 있습니다. 이를 통해 중앙화된 백업 시스템을 유지하고, 데이터를 보호할 수 있습니다.
  4. 클라우드 스토리지: 클라우드 환경에서도 NFS는 파일 공유 및 저장에 널리 사용됩니다. 클라우드에서 NFS를 사용하면 여러 가상 머신 간에 데이터를 공유하고, 파일 시스템을 유연하게 확장할 수 있습니다.

 

NFS  서버 설치 

centos 7.9 환경에서 NFS 설치 하는 방법에 대해 알아보겠습습니다. 

 

nfs 패키지 설치 

#설치 유무 확인
rpm -qa | grep nfs-utils

#nfs 팩키지 설치 
yum install nfs-utils

 

서비스 시작 

systemctl enable nfs-server
systemctl start nfs-server

 

서비스 상태 확인 

[root@mysvr:/root]$ systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
   Active: active (exited) since 화 2024-03-12 16:20:39 KST; 23s ago
  Process: 2523 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 2506 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 2504 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 2506 (code=exited, status=0/SUCCESS)
    Tasks: 0
   CGroup: /system.slice/nfs-server.service

 3월 12 16:20:39 mysvr systemd[1]: Starting NFS server and services...
 3월 12 16:20:39 mysvr systemd[1]: Started NFS server and services.

 

마운트 디렉토리 생성 

mkdir share_disk

chmod 777 /share_disk

 

마운트 설정

  • /etc/exports 파일 수정 및 적용 
  • 수정된 파일 내용 적용: exportfs -r 
/share_disk 192.168.116.*(rw,no_root_squash,sync)

 

  • /share_disk: 공유할 디렉터리의 경로입니다.
  • *: 모든 클라이언트에게 액세스를 허용함을 나타냅니다.
  • rw: 읽기 및 쓰기 액세스를 허용하는 옵션입니다.
  • sync: 변경 사항을 디스크에 즉시 동기화하는 옵션입니다.
  • no_root_squash: 클라이언트의 root 사용자가 파일에 액세스할 때 해당 사용자를 시스템의 root로 매핑하지 않음을 나타내는 옵션입니다.
  • async: 변경 사항을 비동기적으로 디스크에 동기화합니다.
  • no_root_squash: 클라이언트의 root 사용자를 서버의 root 사용자로 매핑하지 않습니다.
  • root_squash: 클라이언트의 root 사용자를 서버의 nfsnobody 사용자로 매핑합니다.
  • all_squash: 모든 사용자를 서버의 nfsnobody 사용자로 매핑합니다.

적용된 마운트 설정 확인

showmount -e
exportfs -v

NFS 클라이언트 설정

 

마운트 디렉토리 생성 

 mkdir nfs_share_disk
 chmod 777 nfs_share_disk

 

NFS 설치 

#설치 유무 확인
rpm -qa | grep nfs-utils

#nfs 팩키지 설치 
yum install nfs-utils

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

 

마운트

mount -t nfs 192.168.116.10:/share_disk /nfs_share_disk

 

[root@mysvr:/root]$ df -Th
Filesystem                 Type      Size  Used Avail Use% Mounted on
devtmpfs                   devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                      tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs                      tmpfs     1.9G   13M  1.9G   1% /run
tmpfs                      tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root    xfs        26G  6.3G   20G  25% /
/dev/sda1                  xfs      1014M  185M  830M  19% /boot
/dev/mapper/centos-home    ext2       25G   15G  9.3G  61% /home
tmpfs                      tmpfs     378M   12K  378M   1% /run/user/42
tmpfs                      tmpfs     378M     0  378M   0% /run/user/0
192.168.116.10:/share_disk nfs4       26G  6.5G   20G  25% /nfs_share_disk

 

마운트 영구 적용 (/etc/fstab)

192.168.116.10:/share_disk /nfs_share_disk nfs rw,noatime,sync 0 0

 

  • 마운트 사용 정의는 아래와 같습니다. 
<device> <mount_point> <filesystem_type> <mount_options> <dump> <pass>

 

  • <device>: 마운트할 디바이스의 경로 또는 UUID입니다. 이것은 보통 디스크 파티션 또는 네트워크 파일 시스템의 주소입니다.
  • <mount_point>: 디바이스가 마운트될 디렉터리의 경로입니다.
  • <filesystem_type>: 파일 시스템의 종류를 나타냅니다. 예를 들어, ext4, nfs, ntfs 등이 있습니다.
  • <mount_options>: 마운트 옵션을 나타냅니다. 읽기 전용으로 마운트할지 읽기/쓰기로 마운트할지 등을 정의할 수 있습니다. 
      1. rw / ro:
        • rw: 읽기/쓰기 모드로 파일 시스템을 마운트합니다.
        • ro: 읽기 전용 모드로 파일 시스템을 마운트합니다.
      2. auto / noauto:
        • auto: 부팅 시 자동으로 마운트됩니다.
        • noauto: 수동으로 마운트해야 합니다. 부팅 시 자동으로 마운트되지 않습니다.
      3. exec / noexec:
        • exec: 이 파일 시스템에서 바이너리 실행 파일을 실행할 수 있습니다.
        • noexec: 이 파일 시스템에서 바이너리 실행 파일을 실행할 수 없습니다.
      4. user / nouser:
        • user: 일반 사용자도 마운트 및 언마운트를 할 수 있습니다.
        • nouser: 일반 사용자는 마운트 및 언마운트를 할 수 없습니다. 관리자 권한이 필요합니다.
      5. sync / async:
        • sync: 변경 사항을 디스크에 즉시 동기화합니다. 안정성을 높이지만 성능이 저하될 수 있습니다.
        • async: 변경 사항을 비동기적으로 디스크에 동기화합니다. 성능을 높이지만 안정성이 낮아질 수 있습니다.
      6. defaults: 기본 마운트 옵션을 사용합니다. 일반적으로 rw, suid, dev, exec, auto, nouser, async와 같은 옵션을 포함합니다.
      7. uid, gid: 특정 사용자 ID 또는 그룹 ID에 속하는 사용자 또는 그룹에 대해 마운트된 파일 시스템을 마운트합니다.
      8. umask, dmask, fmask: 마운트된 디렉터리 또는 파일에 대한 권한 마스크를 설정합니다.
      9. noatime, relatime, strictatime: 파일 시스템에 대한 액세스 시간을 변경하는 옵션입니다. 성능을 높이기 위해 noatime을 사용할 수 있습니다.
      10. noacl, acl: Access Control Lists (ACL)를 사용할지 여부를 지정합니다.
  • <dump>: 백업 프로그램이 시스템을 백업할 때 이 파일 시스템을 백업해야 하는지 여부를 나타냅니다. 일반적으로 0으로 설정되어 있습니다.
  • <pass>: 시스템 부팅 시 파일 시스템을 체크해야 하는 순서를 나타냅니다. 일반적으로 1로 설정되어 있습니다.

 

NFS 연동 테스트 

  • 각 nfs 설치된 서버에서 파일을 생성하면 어떤 노드에서도 생성하더라도 파일을 공유할수 있게된다.

728x90
반응형

+ Recent posts