본문 바로가기
OS/Linux

[Linux] NFS 서버 구축

by ganyga 2024. 9. 20.

구성 목적 : WSL로 구성한 Linux에서 Windows로 파일을 옮기려고 할 때 기존에 구축했던 FTP 방식이 아닌 NFS 방식으로 해보기 위함

추가적으로 WSL에서는 기본적으로 Windows 파일 시스템과 연동되게끔 지원해줌

환경 : WSL Linux, Windows

01. NFS_Server 설정  (Linux)  

02. NFS_Client 설정  (Windows)

 

NFS

- Network File System

- Linux(Unix) 컴퓨터끼리 저장 공간을 공유할 수 있도록 해주는 시스템

 

NFS 서버 구현

 

NFS Server 구성

## server

# nfs 관련 패키지 설치
apt-get install -y nfs-common nfs-kernel-server rpcbind

# 공유 디렉터리 생성
mkdir /share

# nfs 설정 파일
vi /etc/exports 
(공유 폴더)    (접속을 허용할 IP, 읽고 쓸 수 있고(rw), 자동으로 동기화 되도록(sync))  
/share        192.168.111.*(rw,sync)

cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/share      169.254.76.191(rw,sync)


# 공유 폴더 권한 주기
chmod 707 /share/

# test 파일 생성
root@LGE-corp:~# echo "test" >> /share/test.txt
root@LGE-corp:/share# cat test.txt
test

# nfs 서버 재시작
systemctl restart nfs-server
systemctl enable nfs-server

# exports 설정 확인
root@LGE-corp:/share# exportfs -v
/share          169.254.76.191(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

 

NFS Client 구성

## client

# 필요 패키지 설치
apt-get install -y nfs-common

# 서버와 공유되고 있는 디렉토리에는 무엇이 있는지 확인(서버에 /etc/exports 설정 관련)
showmount -e [serverIP]

# client에서도 마운트할 디렉터리 생성
mkdir myShare

# 마운트 : 공유 디렉터리(/share) --- 마운트 디렉터리(/myShare)
mount -t nfs [serverIP]:/share  /myShare

이렇게 하면 /myShare에 저장한 데이터는 실제로 /share에 저장됨

 

재부팅해도 마운트가 유지되도록 설정

# client

vi /etc/fstab
[파일_시스템_장치]  [마운트_포인트]  [파일_시스템_종류] [옵션] [덤프] [파일체크_옵션]

[serverIP]:/share  /home/ubuntu/myShare  nfs  defaults  0  0

 

재부팅하고 myShare 폴더에 ls 했을 때 share에 저장된 파일이 있는지 확인


windows에서 확인하는 방법

1. Windows 기능 켜기/끄기에서 NFS용 서비스 > NFS용 클라이언트 켜기

 

2. 터미널에서 아래 명령어 입력

C:\Users\GaeunLee> mount 172.23.186.244:/share *

 

* 네트워크 오류 발생

문제 상황)

- WSL 환경에서 Ubuntu22.04를 구성했고, 거기에 NFS 서버를 설치함

- /etc/exports에는 접속하려는 내 로컬 IP를 입력하고 windows 명령 프롬프트에서 mount를 하려고 하니 네트워크 오류가 발생함

root@LGE-corp:/share# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.23.186.244  netmask 255.255.240.0  broadcast 172.23.191.255
        inet6 fe80::215:5dff:feba:9f3d  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:ba:9f:3d  txqueuelen 1000  (Ethernet)
        RX packets 1052  bytes 917273 (917.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 394  bytes 66658 (66.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 68  bytes 5707 (5.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5707 (5.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
C:\Users\GaeunLee>mount 172.23.186.244:/share *
네트워크 오류 - 53

자세한 내용을 보려면 'NET HELPMSG 53'을(를) 입력하십시오.

https://learn.microsoft.com/ko-kr/troubleshoot/windows-server/networking/system-error-51-53-access-shared-resources

 

공유 리소스에 액세스할 때 오류 51 또는 53 - Windows Server

공유 리소스에 액세스할 때 발생하는 시스템 오류 51 또는 53에 대한 솔루션을 제공합니다.

learn.microsoft.com

https://www.gamingdeputy.com/kr/news/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%98%A4%EB%A5%98-53%EC%9D%B4-%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EC%98%A4%EB%A5%98%EB%A5%BC-%EC%88%98%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

 

https://geekit.tistory.com/12

 

NFS 설정하기 (Windows PC -> Linux Server 네트워크드라이브 연결하기)

@ Ubuntu 14.04 / Windows 10 Q : Linux 서버의 자료를 Windows 피시에 네트워크 드라이브로 연결 후 서버 자료를 Windows 피시 로컬에 있는 자료처럼 사용하려면 어떻게 하면 될까요?? A : 정답은 바로 NFS 를 이

geekit.tistory.com

 


/etc/exports에 적는 ip를 *로 했더니 연결 됨

# WSL
root@LGE-corp:/share# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/share      *(rw,sync)

 

# Windows
C:\Users\GaeunLee>mount -o anon \\172.23.186.244\share Z:
Z: 현재 \\172.23.186.244\share에 성공적으로 연결되어 있습니다.

명령을 완료했습니다.

C:\Users\GaeunLee>mount

로컬    원격                                 속성
-------------------------------------------------------------------------------
Z:       \\172.23.186.244\share                 UID=-2, GID=-2
                                                rsize=1048576, wsize=1048576
                                                mount=soft, timeout=0.8
                                                retry=1, locking=yes
                                                fileaccess=755, lang=KSC5601
                                                casesensitive=no
                                                sec=sys

 

해당 결과를 봤을 때 /etc/exports에 적는 ip가 windows에 ip인데, wsl 네트워크 중에 잘못 이해한 부분이 있지 않나 싶음

 

 

+ 추가적으로 공부할 때 참고할 자료

https://mulmandu17.tistory.com/53

 

Windows Subsystem for Linux(WSL) 은 어떻게 동작할까?

목차 WSL 가상화: WSL1 과 WSL2의 가상화 방식 비교, Hypver Visor 타입 파일시스템 연동 원리: 양방향 9P Protocol 네트워크 설정(브리지 모드) WSL의 한계 및 용도 1. WSL의 가상화 WSL 1과 WSL 2의 설계가 다르

mulmandu17.tistory.com


참고자료

- 이것이 우분투 리눅스다 14장 NFS 서버 구축

https://www.inflearn.com/course/lecture?courseSlug=%EC%9D%B4%EA%B2%83%EC%9D%B4-%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%A6%AC%EB%88%85%EC%8A%A4%EB%8B%A4&unitId=6304&tab=curriculum

 

학습 페이지

 

www.inflearn.com