리눅스 NFS Server 구축하기
리눅스 NFS Server 구축하기
NFS(Network File System)는 네트워크 상에 있는 파일 시스템을 연결해서 사용할 수 있도록 해주는 녀석이다.
메모리가 작은 임베디드 시스템에 파일 시스템을 바로 저장하지 않고 호스트 컴퓨터에서 만들어지고 저장되어 있는 파일 시스템에 연결하여 동작시켜 볼 수 있다.
물론 실제 제품에서는 임베디드의 NAND 플래시 메모리에 파일 시스템을 설치해서 동작하도록 해야 하지만 개발 과정에서는 일일이 NAND 메모리에 올리지 않고 개발할 수 있으니 개발 및 디버깅 속도를 향상시켜 줄 것이다.
1. 폴더 생성
우선 우분투 리눅스 루트 디렉토리에 nfsboot 폴더를 생성하고 권한을 수정한다.
그리고 VMware Fusion의 네트워크 상태를 아래와 같이 Bridged(Autodetect)로 변경한다.
2. 프로그램 받기와 설정
이제 필요한 프로그램들을 설치한다. (내가 공부하고 있는 보드의 설명서에는 portmap을 설치하라고 되어 있는데 지금은 rpcbind가 그 역할을 대신한다고 한다.)
다음은 nfs 및 portmap의 상태를 확인하기 위해서 사용되는 도구인 sysv-rc-conf를 설치한다.
그리고 이 도구를 이용해서 nfs와 portmap의 상태를 체크해보자. 명령어는 [sysv-rc-conf --list]이며 다음과 같이 목록이 나타나는데...
nfs-kernel-s는 정상작동하고 있는게 보이는데 portmap이 안보인다. 이렇게 안보일 때는 sysv-rc-conf portmap on / sysv-rc-conf nfs-kernel-server on 을 해주면 작동한다.
다음은 앞에서 만들었던 마운트 디렉토리 nfsboot 폴더 설정을 하기 위해서 /etc/exports 파일을 열어서 다음과 같이 내용을 추가한다. /nfsboot *(rw,sync,no_root_squash)
추가한 내용은 nfs 공유 디렉토리인 nfsboot를 모든 IP(*)가 공유하면서 rw 할 수 있도록 수정한 것이며 이렇게 exports를 수정하면 [sudo exportfs -r]로 갱신을 하고 nfs 서버를 다시 시작해줘야 한다.
3. nfs서버 테스트
이제 nfsboot 폴더를 mnt에 마운트 해보기 위해서 먼저 현재 컴퓨터의 아이피 주소를 확인해본다.
그리고 현재 마운트 상태를 체크해보기 위해서 df 명령어로 확인한 후...
다음과 같이 마운트를 하고 다시 한 번 df로 그 결과를 확인해보자.
이제 mnt와 nfsboot 폴더는 동일한 내용을 갖게 될 텐데 확인을 해보니...
nfsboot와 mnt 디렉토리가 실시간으로 같은 내용을 공유한 걸 확인할 수 있다. 그리고 umount를 하면 서로의 연결이 끊기면서 각자 원래 갖고 있던 데이터를 보여주게 된다.
마운트를 해제한 후 다시 그 디렉토리 들의 내용을 확인해보면...
이렇게 원래 갖고 있던 내용을 보여주게 된다. 즉 마운트 되어 있는 순간에만 nfsboot의 내용을 똑같이 갖는 분신이 되었다가 마운트가 해제되면 각자의 갈 길로 가는 것이다.
이 녀석을 이용하는 방법을 정리해보면... 개발 모드의 mnt와 pc의 nfsboot를 마운트 하면 앞에서 봤던 것처럼 임베디드 보드의 mnt는 pc의 nfsboot의 내용을 똑같이 갖게 된다.
물론 nfsboot 디렉토리 안에는 보드에서 실행할 프로그램이 담겨져 있을것이고... 보드 입장에서는 힘들게 그 파일을 자신에게 직접 가져오지 않고도 실행시켜 볼 수 있을 것이다.
그리고 호스트 PC에서 컴파일한 프로그램을 보드에서 실행하기 위해서는 PC에 크로스 컴파일러를 설치해야 하는데 다음 글에서는 그 과정을 알아보기로 하고 이번 노트 정리는 마무리 한다.