nfs 란

삼바가 다른 리눅스나 윈도즈를 위해서 준비한다면 nfs는 임베디드 보드를 위한 준비가 되겠습니다.
즉, 삼바는 리눅스의 공유 영역을 다른 리눅스나 전혀 다른 OS인 Ms Windows에서
네트워크 드라이브로 이용할 수 있습니다.

물론 임베디드 보드에서도 삼바를 이용하면 좋겠는데,
삼바를 이용하는 클라이언트 프로그램이 크다고 하네요.
임베디드 보드야 데스크탑 PC가 아닌 이상,
고급 기능 보다는 가볍고 시스템 리소스를 많이 소모하지 않는 방법을 이용하는 것이 좋겠습니다.
바로 이런 요구에 알맞는 것이 nfs입니다.

리눅스 시스템에서는 다른 곳에서 nfs 서버를 운영하여 공유 자원을 제공해 주면
자신의 디렉토리로 mount 할 수 있습니다.
그러므로 임베디드 보드는 호스트 시스템의 nfs 공유 디렉토리를 mount하여
마치 자신의 디렉토리인 것처럼 파일을 사용할 수 있고 프로그램을 실행할 수 있습니다
.

nfs 환경 설정

삼바에서와 같이 nfs도 공유할 자원과 권한을 지정해 주어야 합니다.
그러나 삼바만큼 복잡하지 않습니다.

삼바환경은 /etc/exports 파일의 내용을 수정해 주시면 되겠습니다.
역시 따라하기 시리즈 답게 제가 입력한 행을 그대로 적겠습니다.

]# vi /etc/exports
/home/jwjw 192.168.10.*(rw,sync,no_root_squash)      <--- 딱 행 하나
  • /home/jwjw 는 제 개정의 디렉토리로 nfs로 공유할 디렉토리입니다.
  • 192.168.10.* 는 네트워크에 연결된 시스템 중에 네트워크 IP가 192.168.10인 시스템에게 제공하겠다는 뜻이면
  • rw 는 접속한 클라이언트에게 읽기와 쓰기 권한을 주며
  • sync는 파일이 변경될 때, 호스트와 클라이언트간에 동기를 해 준다는 뜻이며
  • no_root_squash 옵션은 클라이언트의 root 는 호스트의 root와 같은 권한을 가지게 한다는 뜻입니다.

이제 nfs 서버를 가동하겠습니다.
역시 네트워크 관련 프로그램은 /etc/init.d 안에 있습니다.

]# /etc/init.d/nfs restart
NFS mountd를 종료 중:                                      [  OK  ]
NFS 데몬을 종료 중:                                        [  OK  ]
NFS quota를 종료 중:                                       [  OK  ]
NFS 서비스를 종료 중:                                      [  OK  ]
NFS 서비스를 시작 중:                                      [  OK  ]
NFS 쿼터를 시작 중:                                        [  OK  ]
NFS 데몬을 시작 중:                                        [  OK  ]
NFS mountd를 시작 중:                                      [  OK  ]
]#

요렇게 시작에 대해 [OK] 가 떨어지면 정상적으로 시작된 것입니다.

임베디드 보드에서의 연결

이제 임베디드 보드에서 연결해 보겠습니다.
임베디드 보드에 텔넷프로그램으로 연결합니다.
그리고 mount 명령으로 리눅스 시스템의 nfs 공유 폴더를 마운트하여 연결합니다.

여기서 잠깐! nfs를 LAN 케이블로 연결한다고 해서 보드도 반드시 LAN 케이블로 텔넷을 연결할 필요가 없습니다. 텔넷은 텔넧이고 NFS는 NFS입니다. 그러므로 LAN이든 serial 이든 편리한 방법을 이용하여 임베디드 보드와 텔넷으로 연결합니다.

저는 시리얼로 연결하겠습니다. LAN으로 연결해도 되지만
텔넷은 역시 시리얼로 연결하는 것이 편합니다.
로그인을 한 후에 mount 명령으로 호스트 PC의 공유 폴더를 마운트하겠습니다.

ARM Linux
falinux login: root
[root@falinux ~]$ mount -t nfs -o nolock 192.168.10.50:/home/jwjw /mnt/nfs
[root@falinux ~]$

이렇게 성공적으로 호스트의 /home/jwjw 디렉토리를 /mnt/nfs에 마운트되면
임베디드보드는 /mnt/nfs를 이용하여 마치 자기 디렉토리를 사용하듯 프로그램을 사용할 수 있습니다.

/home/jwjw 에 어떤 파일이 있는지 볼까요? 우선 삼바를 통해 윈도즈 탐색기로 본 파일 목록입니다.

이번에는 임베디드 보드에서 ls 명령으로 파일 목록을 확인한 모습입니다.

[root@falinux ~]$ cd /mnt/nfs
[root@falinux nfs]$ ls -al
drwx------    8 500      500          4096 Dec 10  2007 .
drwxrwxrwx    1 root     root          512 Aug 24 23:14 ..
-rw-------    1 500      500         11989 Dec 15  2007 .bash_history
-rw-r--r--    1 500      500            24 Jan  6  2007 .bash_logout
-rw-r--r--    1 500      500           176 Jan  6  2007 .bash_profile
-rw-r--r--    1 500      500           145 Oct 12  2007 .bashrc
drwxrwxr-x    3 500      500          4096 Oct 24  2007 .config
drwxrwxr-x    5 500      500          4096 Oct 24  2007 .designer
drwxr-xr-x    4 500      500          4096 Oct 24  2007 .kde
-rw-------    1 500      500            35 Oct 18  2007 .lesshst
drwxrwxr-x    2 500      500          4096 Oct 25  2007 .qt
-rw-------    1 500      500          6264 Nov 27  2007 .viminfo
-rw-r--r--    1 500      500           658 Jan  7  2007 .zshrc
-rw-r--r--    1 500      500       3965919 Oct 12  2007 e2fsprogs-1.40.2.tar.gz
-rw-r--r--    1 500      500        616246 Oct 12  2007 jpeg-6b.tar.gz
drwxr-xr-x   13 500      500          4096 Nov 27  2007 prjs
-rw-r--r--    1 500      500      55833118 Oct 24  2007 prjs.tar.gz
-rw-r--r--    1 root     root         1598 Dec 10  2007 smb.conf
drwxr-xr-x    3 root     root         4096 Oct 25  2007 warehouse
[root@falinux nfs]$

파일 목록을 보시면 내용이 똑 같지요? ^^

결론

이렇게 삼바와 nfs를 이용하면 리눅스 시스템의 공유 디렉토리에 MS Windows에서
프로그램을 작성하고 컴파일한 후에 임베디드 보드에서 실행할 수 있습니다.

다시 말씀드려 nfs를 이용하면 매번 임베디드 보드로 프로그램 파일이나 필요한 파일을
매번 복사해서 작업하는 것이 아니라 호스트 시스템의 공유 디렉토리를 마운트하여
바로 실행하여 작업할 수 있어 매우 편리합니다.

물론 필요하면 nfs를 통해서 임베디드 보드에 복사할 수 있고,
임베디드 보드에 있는 파일을 호스트 PC에 저장할 수 있겠지요. ^^