티스토리 뷰

728x90
반응형

이글은 centos 에 대체로 사용 되고 있는 rocky 9 (kernal 5.0) 에서 NFS 서버를 연동 하는 방법을 작성 합니다.

근래 리눅스 관련 강의 를 듣다 보니 cento7 버전 기준에 firewalld 까지 끄고 강의 하는 클래스들을 듣다 보니

내가 현업 에서 사용 하게 되면 kernal3 이상을 사용 하게 되고 firewalld 를 끄는 일도 없기 때문에 이러한 부분들을 고려해서

내용들을 좀더 상세하게 작성 하려 한다.

문제가 되었던것은 docker 교육을 들으며 nfs 설정을 실습하고 하는 과정에서 집에서 내 시스템을 가지고 연습하려하니

도통 연결이 되지 않았는데 cento7버전에서의 적용 방법과 9 버전들의 (kernal 5.~) 방법에는 조금에 차이가 있었다.

rocky 9 - NFS utils 설정  방법은 커널 버전 마다 조금씩 다를수 있다.

 

 

목차

    1. nfs-utils 설치

    2. nfs 서버 , 클라이언트 설정

    3. nfs 재부팅 후 에도 적용 하기

    4. nfs mount 옵션 


    NFS - utils 란?

    윈도우 OS 에서는 공유 폴더라 라던가 하는 기능을 통해서 여러 사용자가 한곳의 데이터들을 읽고 쓰고 하지만

    리눅스에서는 cli 구성환경 에서 폴더를 공유 하고 스토리지를 연결 하는등에 작업을 nfs 를 통해서 진행 하게 된다.

    NFS 를 구성할 server 아 client 가 있으면 nfs-utils 패키지를 설치하면 모두 설치가 된다. rocky 9 - NFS utils 설정  에는 방화벽 설정도 필요 하다.

    NFS 서버 라고도 부른다.

     


    nfs-uitls 설치

    rocky linux 에서 yum , dnf 로 설치 하면 되는데 debian 계열 에서는 꼭 apt-get update 를 진행한 후 에 패키지 를 다운로드 하자.

    $ yum install nfs-utils -y
    # nfs-utils 패키지를 설치

    nfs-utils 를 설치 하게되면 깔리게 되는 패키지들

    여기서 그냥 넘어갈게 아니괴 ' rpcbind' 를 꼭 눈여겨 봐둬야 한다! 우선 기억 해두자

     

    설치가 되었다면 지금 설치된 서버와 다른 서버에 하나더 설치를 진행 한다!

    총 2대 의 서버에 설치를 진행 하는것이다  이어서는 A 서버 , B 서버 라고 지칭 하겠다.

    A , B 두 서버에 nfs-utils 를 설치 했으면 nfs 서버로 사용할 A 서버에서 nfs-server 를 시작 시켜 주자

     

    $ systemctl enable --now nfs-server

     

    실행 된것을 확인 하고 파일들으르 보관할 디렉토리를 만들고  연결하는 과정을 진행

    $ mkdir  /home/nfs_a
    # nfs 로 공유할 디렉토리 생성
    
    $ chmod 644 /home/nfs_a
    # 파일을 읽고 쓰기 를 해야 하기 때문에 사용권한을 준다
    
    
    $ vi /etc/exports 
    
    ## 내용 입력 ##
    
    1  /home/nfs_a *(rw,sync, no_root_squahs)
    # /home/nfs_a 디렉토리를 읽기,쓰기 권한 을주고 ,실시간으로  변경내용을 반영

    /etc/exports 내용에서  * 부분은 접속 허용 IP 범위 를 지정 해주는데 

    192.168.0.0/24 로 하면 C class 전부 접근 가능 하다 그럼 설정 을 적용 할때 보안관련 해서 문제가 있을수 있다는 내용이 출력될수 있다. ( * 말고 0.0.0.0/0 으로 해도 같은 결과다 다들어와라 이다)

    # 적용 방법
    $ exportfs -a
    
    # 확인 방법
    $ exportfs 
    
    #결과 
    $ /home/nfs_A

    다른 오류가 없길 바란다.... 이씅면 댓글 ㄱㄱㄱ

    그리고 nfs 가 잘 동작 중인지 rpcinfo 명령어로 확인 한다.

    $ rpcinfo -p localhost

    rpcinfo -p localhost 로  TCP 2049 port 활성화 확인

    이제 리눅스 방화벽인 firewalld 에서 nfs 를 열어 준다.

    $ firewall-cmd --permanent --add-service=nfs
    $ firewall-cmd --permanent --add-service=rpc-bind
    $ firewall-cmd --permanent --add-serivce=mountd
    
    # nfs, rpc-bind , mountd  서비스 허용 적용
    #### centos 7 버전 까지는 nfs 서비스 만 허용 해줘도 됬는데 이제 3개 다 넣어야 되더라...
    
    
    $ firewall-cmd --reload
    # 방화벽 변경 내용 적용

    nfs 방화벽 설정 에서 오류가 가장 많이 날것이다... 라우팅 이 안되 었다던가

    찾을수 없다던가 하는 답답한 문제들....

    kernal 5 버전 이상 centos 8 버전 이상 부터는 위에 것들을 설정 해주면 

    오류 해결 방법 을 찾을수 있다.

     

    서버 B 작업

    이제 B서버에서 nfs 연결 상태를 확인 하고 연결할 디렉토리를 만들어 보고 파일이 들어가는지 테스트 한다

    서버 A 작업에서 방화벽에 서비스를 3개 정상적으로 등록 했다면 다음 명령어에 내용을 확인 할수 있다.

    $ showmount -e 서버A ip 또는 hostname

     

    showmount -e 서버ip 또는 hosts 에 등로된 hostname 로 확인

    서버 A 에서 생성하고 /etc/exports 에서 설정해둔 디렉토리 명 과 ip 대역이 나오면 오케이 

    나는 * 로 모드느 연결 허용 을 해두었으니 * 로 나온다.

    이제 동기화할 디렉토리를 만들어 준다

    $ mkdir /home/nfs_b
    # 서버 B 에서 동기화할 디렉토리 생성

    이제 nfs 를 통한 연결 준비는 끝났고 이제 실제로  동기화 를 위해 만든 디렉토리를 마운트 해준다.

    $ mount -t nfs -o rw,sync rocky1:/home/nfs_a /home/nfs_b
    # mount 명령어로 서버 A 의 ip/hostname 으로 /home/nfs_a 를 
                   서버 B 의 /home/nfs_b 에 연결
                 
    # 연결 확인 #
    
    $ df -h

    맨 아래 줄에 ' rocky1:/home/nfs_a ' 가 추가 된것을 확인 할수 있다.

    Mounted on 열을 보면 ' /home/nfs_b ' 가 있는것을 확인 !!!!

    이제 서버 B 의 /home/nfs_b 디렉토리에서 파일을 생성하고 서버 A 의 /home/nfs_a 디렉토리에서 생성됬는 지 확인 하면 된다.

     

    **** 허가 거부  에러가 떨어지면  서버 A 에서 /home/nfs_a 디렉토리에 rw 권한을 안준것! chomd 644 로 권한을 꼭주자

     


     

    nfs 재부팅 후에도 적용 하기

    지금 까지 과정은 일시적인 것이다... 혹시라도 여기까지 하고 재부팅 하거나 했다면;;; mount 작업을 다시 해줘야 한다..

    리눅스 를 아는 분들이라는 fstab 설정을 해줘야 한다는걸 알고 있을것이다.

     

    !!! 여기서 중요 !!!!!

    리눅스 경험이 많지 않는 사람들은 분명히 /etc/fstab 을 직접 수정하지만..... 이건 큰일날 짓이다...

    꼭 현재 파일을 백업해대고 파일을 수정하자... /etc/fstab은 시스템이 시작할때 파일시스템을 자동으로 마운트 하기 때문에

    경로가 틀리거나 하는 오류 , 오타 등이 있을경우 OS 자체가 부팅하지 못할수 있다.... 

     

    $ cp /etc/fstab /etc/fstab_날짜.bak
    # 꼭 복사해서 백업 본을 만들어야 한다.

    이제 fstab 을 수정하기 !!!

    아래 내용을 추가 해준다

    $ vi /etc/fstab
    
    # Shift + g 눌러 파일 맨하단  이동
    
    ## 입력 내용 ##
    
    $ rocky1:/home/nfs_a        /home/nfs_b        nfs     defaults  0 0 
    
    # 서버 IP 또는 hosts 에 등록된 hostname : 입력후 서버A 공유 디렉터리 /home/nfs_a 
    # 연결한 서버B 디렉토리 /home/nfs_b       
    # 연결 타입인 nfs   
    #  그리고 defaults  0 0   #  이 3개는 설명하자면 길어 진다.

     수정후 

    $ mount -a
    # fstab 에 등록된 것들을 불러 온다.
    # 에러가 없으면 다행 혹시 모르니 재부팅해서 이상없는지 확인 한다.

     


     

    nfs mount 옵션 

    이제 알아 옵션들에 대해 알아보자면

    /etc/export 파일을 수정 할때 넣는 옵션들을 알아보자

    위에서 작성 했던 내용 가지고 하자면

     /home/nfs_a *(rw,sync, no_root_squahs)

     

    ip 다음에 올 ( ) 안의 옵션들

    옵션 설명
    ro  읽기 전용으로 공유
    rw 읽기 / 쓰기 모드로 공유
    root_squash 클라이언트의 root를 익명 사용자(nobody)로 매핑(기본)
    no_root_squash 클라이언트의 root를 서버의root로 매핑 
    all_squash 모든 사용자를 익명 사용자(nobody)로 매핑
    sync 클라이언트와 서버간 실시간 동기화(기본)
    async 클라이언트와 서버간 비동기 통신(속도 향상 목적)
    secure 마운트 요청 시 1024 PORT 이하로 
    insecure 마운트 요청 시 1024 PORT 이상도 허용

     

    클라이어트 쪽( 서버 B) mount 옵션   -o 뒤에 붙는 것들 생략 가능하다.

    mount -t -o rw,sync nfs 서버ip:/home/nfs_a /home/nfs_b
    옵션 설명
    rsize =  1024 nfs 서버로부터 읽어오는 바이트수 지정(기본 1024)
    wsize = 1024 nfs 서버로 쓰기를 할때 사용 바이트수 지정 (기본 1024)
    timeo =  숫자 타임 아웃이 발생 후 재전송 간격
    restrans = 숫자 타임 아웃 발생 시 재 전송 시도 횟수 ( 기본 3)
    port = 숫자 nfs 서버와 연결할 때 Port 번호 지정
    bg 첫번 째 마운트 시도 시 타임 아웃이 되더라도 백그라운 동작 마운트 시도
    fg 첫번 째 마운트 시도 시 타임 아웃되면 바로 중단
    hard 서버가 응답할 때까지 계속 마운트 시도 , 응답 없는경우 umount 로 마운트 취소 불가
    soft 타임 아웃 발생시 retrains 값만큼만 재전송 시도
    umount 로 마운트 취소 가능

     

    마무리

    오늘드 드럽게 길게 썼다... 짧게 매번 그냥 넘들 처럼 대충 접속만 되게 쓸까 하다가 쓰다보면..... 길어 진다....

    누가 본다고.... 

     

    여러분 다음에는 도커를 통한 nfs 연결 진행 할께용~

     

     

     

     

     

     

    728x90
    반응형
    댓글