<!doctype linuxdoc system> <article> <!-- Title information --> <title>NFS-Root Mini-Howto <author>Andreas Kostyrka, <tt/andreas@ag.or.at/ <date>V8, 8 August 1997 <trans>번역: 정순철, <htmlurl url="mailto:jungsoonchul@yahoo.com" name="mailto:jungsoonchul@yahoo.com"> <tdate>1999년 11월 29일 <abstract> 이 미니하우투는 NFS를 통하여 루트 파일시스템을 마운트하는 ``디스크 없는'' 리눅스 웍스테이션의 설치 방법에 대해서 설명한다. <tt>ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root</tt> 또는 선사이트 미러에서 이 미니하우투의 최신 버전을 구할 수 있다. </abstract> <toc> <sect>판권<p> (c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at or andreas@ag.or.at) <p> 따로 말이 없다면, 리눅스 HOWTO 문서의 판권은 저자에게 있다. 리눅스 HOWTO 문서는 판권 표시가 복사본에 유지되는 한, 어떤 매체로든지 전체 또는 부분적으로 재생산되거나 배포될 수 있다. 상업적인 재배포가 허락되고 권장된다. 그러나 저자에게 그러한 배포 사실을 알리는 게 좋을 것이다. 번역물, 파생 작업물, 리눅스 HOWTO 문서를 통합한 작업물 모두는 이 판권 표시아래 보호된다. 즉, 당신은 HOWTO 문서에서 파생된 작업물을 생산하면서, 배포상의 제약을 주면은 안 된다. 이들 규칙에 관한 예외는 특정 조건하에서 인정이 된다. 아래 주소의 리눅스 HOWTO 조정자에게 연락하십시오. 간단히 말해서, 우리는 가능한 한 많은 채널을 통해 정보를 퍼뜨리고 싶다. 그런데, 우리는 또한 HOWTO 문서의 판권을 유지하고 싶으며 문서의 재배포 계획을 통지받고 싶은 것이다. 의문 사항이 있다면 이 문서의 저자인 Andreas Kostyrka <<tt/mailto:andreas@ag.or.at/> 또는 리눅스 HOWTO 조정자인 Tim Bynum <<tt/mailto:linux-howto@sunsite.unc.edu/>에게 이메일로 연락주십시오. <sect1>공헌한 사람들<p> <itemize> <item> Avery Pennarun <<tt/apenwarr@foxnet.net/> (<bf/LILO/없이 부팅하는 법) <item> Ofer Maor <tt/<ofer@hadar.co.il>/ (디스크 없는 웍스테이션의 설치에 관한 더 나은 미니 하우투를 제공) <item> Christian Leutloff <tt/<leutloff@sundancer.tng.oche.de>/ (netboot에 대한 정보 제공) </itemize> <sect>전체적인 개요<p> 일반적으로 말해서, 디스크 없는 웍스테이션에는 다음과 같은 같은 문제점들이 있다: <itemize> <item>그것은 자신의 IP주소를 알아내야 한다. 필요하다면 나머지 이더넷 구성 정보까지도. <item>그것은 <em/NFS/서버와 루트 파일 시스템을 위한 마운트 경로를 알아 내야 한다. </itemize> <p> 리눅스 커널(1.3.7x)에서의 <em/NFSROOT/구현은 다음과 같은 ``해결책''을 제시한다: <itemize> <item>IP주소는 <em/RARP/에 의해서 발견될 수 있다. 또는 이더넷 구성 정보 모두가 <bf/LILO/ 또는 <bf/LOADLIN/의 커널 인자를 통해서 커널에 전달될 수 있다. <item>커널 인자를 통해 <em/NFS/경로가 전달될 수 있다. 전달되지 않는다면 커널은 <em/RARP/서버가 또한 <em/NFS/서버라고 가정하고 이미 정의된 기본값을 <em/NFS/경로로 사용한다. (기본값: <tt>/tftpboot/<<em/IP-address of the machine/></tt>) <item>클라이언트의 구성 정보를 <em/BOOTP/를 통해서 알아 낼 수 있다. </itemize> 디스크 없는 환경을 설정하기 전에, <bf/LILO/나 <bf/LOADLIN/를 통해 부팅할 지를 결정해야 한다. 그렇게 하는 것은 유연성을 증가시키지만 속도가 느리다. <bf/LILO/를 안 쓰면 더 빠르게 부팅된다. 결정은 당신 자유이다. <sect> 서버측 설정 <sect1>커널 컴파일 <p> 서버의 커널에 <em/RARP/기능을 넣는 것은 좋은 생각이다. 커널 인자없이 부팅하려면 이 기능이 반드시 필요하다. 한편 클라이언트가 서버와 다른 서브넷에 있다면 이 기능은 도움이 되지 못한다. <p> 웍스테이션의 커널은 최소한 다음 조건들을 만족시켜야 한다: <itemize> <item> <em/NFS/파일 시스템이 컴파일-인 되어 있어야 한다 (역주: 모듈로 하면 안 된다). (<em/ext2/지원은 그럴 필요 없이 모듈이면 충분하다.) <item> ``Root on NFS''가 가능해야 한다. <item> 웍스테이션의 네트워크 카드의 이더넷 드라이버가 컴파일-인 되어 있어야 한다. <item> NFS-Root를 위해, 필요에 따라 <em/RARP/ 또는 <em/BOOTP/지원을 가능하게 해야 한다. (make config에서 이 옵션은 NFS 질문 다음에 나온다.) </itemize> <p> 웍스테이션이 커널 인자없이 부팅되려면 루트 장치를 0:255로 설정할 필요가 있다. <tt>mknod /dev/nfsroot b 0 255</tt>를 함으로써 더미 장치를 만든 후, <tt>rdev <<em/kernel-image/> /dev/nfsroot</tt>를 타이핑함으로써 커널 이미지의 루트 장치를 설정할 수 있다. <sect1> 루트 파일 시스템의 작성 <sect2> 파일 시스템 복사 <p> <em> 경고: 이들 명령어들이 잘 작동한다 하더라도, 제작 환경(production enviroment)에서 결코 적절한 것은 아니다. 클라이언트의 루트 파일시스템을 설정하기 위한 더욱 나은 방법이 Ofer Maor <tt/<ofer@hadar.co.il>/씨의 NFS-Root-Client 미니 하우투에 잘 나와 있다. </em> <p> 루트 트리의 위치를 정한 다음에, 예를 들어, <tt>mkdir -p <<em/directory/></tt>와 <tt>tar cClf / - | tar xpCf <<em/directory/> -</tt>를 함으로써 트리를 만든다. <p> LILO없이 커널을 부팅하려면 루트 디렉토리는 <tt>/tftpboot/<<em/IP-address/></tt>가 되어야 한다. 기본값이 맘에 안 든다면 커널 소스의 Makefile에서 <tt>NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""</tt>부분을 찾은 다음 적당히 고치고 다시 컴파일을 하면 된다. <p> <sect2> 루트 파일 시스템에서의 변화 <p> 이제 불필요한 파일들을 지우고, /etc/rc.d 스크립트들을 검사한다. <itemize> <item> eth0 설정. 웍스테이션은 최소한 부분적으로라도 eth0 설정 정보를 찾는다. 웍스테이션의 IP주소를 서버의 IP주소로 설정하는 것은 잘한 일이 아니다(초기에 일어 났던, 필자의 실수 중 하나이다). <item> 웍스테이션의 /etc/fstab. NFS 파일시스템에 대한 설정이 필요하다. <item> <bf/경고/: 서버의 루트 파일시스템과 웍스테이션의 루트 파일시스템을 혼동하지 말라. </itemize> <sect2> 파일시스템을 익스포트하기 <p> 웍스테이션을 위해 루트 디렉토리를 익스포트한다. <tt/exports(5)/를 참조하라. 이 작업후 nfsd/mountd를 재시작해야 한다. RedHat에서는 간단히 <tt>/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start</tt>를 하면 재시작할 수 있다. <sect2> RARP 설정 <p> 네트상의 어딘가에 <em/RARP/를 설치하라. nfsroot 인수없이 부팅하려 한다면, <em/RARP/서버는 또한 <em/NFS/서버여야 한다. 보통 <em/RARP/서버가 <em/NFS/서버의 역할도 맡는다. RARP를 설치하려면 커널이 RARP를 지원하도록 설정되어야 한다. <p> 그리고 나서, 다음을 실행시킨다(그리고 서버의 <tt>/etc/rc.d</tt>의 어딘가에 이 명령문을 설치해야 한다!): <p> <tt>/sbin/rarp -s <<em/ip-addr/> <<em/hardware-addr/></tt> <p> 여기에서 <descrip> <tag/ip-addr/ 은 웍스테이션의 IP주소이고 <tag/hardware-addr/ 은 웍스테이션의 네트워크 카드의 이더넷 주소이다. </descrip> <p> 예: <tt>/sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12</tt> <p> 서버가 이름으로 IP주소를 찾을 수 있다면(/etc/hosts나 <em/DNS/를 이용해서), IP주소대신에 이름을 사용할 수 있다. <sect2> BOOTP 설정 <p> <em/BOOTP/ 설정을 위해서 <tt>/etc/bootptab</tt>을 편집해야 한다. <em>bootpd(8)</em>와 <em>bootptab(5)</em> 맨 페이지를 참조하라. <sect2> 하드웨어 주소 알아 내기 <p> 필자는 하드웨어 주소(역주: 웍스테이션의 랜카드의 이더넷 주소)를 모른다. 어떻게 알아 낼 수 있을까? <itemize> <item> 당신이 만든 커널 디스크로 부팅하라. 그리고 네트워크 카드가 인식되는 줄을 살펴본다. 보통 그 줄은 카드의 이더넷 주소인 6바이트짜리 16진수를 포함하고 있다. <item> TCP/IP가 가능한 OS로 부팅한다. 서버에서 웍스테이션을 핑(ping)한다. 그리고 나서 <tt>/sbin/arp -a</tt>로 ARP캐시를 살펴 본다. </itemize> <sect> 웍스테이션을 부팅하기 <p> <sect1> 부트롬 이용 <p> 필자는 아직 그런 괴물을 사용해 본 적이 없기 때문에 단지 다음과 같은 팁만을 알려 줄 수 있다 (Christian Leutloff <tt/<leutloff@sundancer.tng.oche.de>/씨의 호의): <itemize> <item> 당신은 ``정상적인'' 부트롬을 사용할 수 없다. <item> 리눅스를 위한 부트롬과 정보를 제공하는, Gero Kuhlmann씨의 <tt/netboot/꾸러미가 있다. <tt/netboot/는 리눅스 미러 또는 데비안 꾸러미(<tt/netboot-0.4/)안에 있다. <item> 부트롬에 따라오는 문서를 유심히 읽는다. <item> 부트롬이 커널을 로딩하는 방식에 따라 서버상에 tftpd를 띄워야 하는 경우도 있다. <item> <it>보통 사람들이 prom burner에 접근하기는 힘들기 때문에, 리눅스와 관련된 부트롬 판매업자들에 대한 어떠한 정보도 환영!. 필자는 이 정보를 여기에 삽입할 것이다. </it> </itemize> <sect1> 로우 커널 디스크 이용 <p> <em/NFS/서버가 또한 <em/RARP/서버이고 (서버와 웍스테이션은 같은 서브넷에 있어야 함을 암시한다.) 루트 파일시스템을 바르게 익스포트하였다면 당신은 커널을 디스크에 <tt/cat/함으로써 부팅 디스크를 만들 수 있다(커널의 루트 장치를 0:255로 설정해야 한다). 서버상의 (웍스테이션의) 루트 디렉토리는 <tt>/tftpboot/</tt><it>IP-Address</it>이어야 한다(이 값은 커널 컴파일때 바꿀 수 있다). <sect1> bootloader와 <em/RARP/ 이용 <p> 커널 인수에 <tt>nfsroot=<<em/server-ip-addr/>:<<em>/path/to/mount</em>></tt>를 추가한다. <em/server-ip-addr/은 NFS서버의 주소이고 <em/server-ip-addr/은 루트 디렉토리의 경로이다. 팁: <itemize> <item> <bf/LILO/를 이용할 때 ``<tt/lock/''기능을 이용해 보라: 올바른 인수들을 입력한 후 ``<tt/lock/''을 추가한다. 다음 부팅때부터는 인수를 다시 입력할 필요가 없다. <item> 웍스테이션 특정 부팅 디스크를 만들때, <tt/lilo.conf/안의 <tt/append=/기능을 이용할 수 있다. </itemize> <sect1> <em/RARP/없는 bootloader이용 <p> 부팅할때, <tt/nfsroot/에 더하여 <tt>nfsaddrs=<<em/wst-IP/>:<<em/srv-IP/>:<<em/gw-IP/>:<<em/netm-IP/>:<<em/hostname/></tt> 커널 인수를 입력한다. 커널은 주어진 인수로 <tt/eth0/를 설정할 것이다: <descrip> <tag/wst-IP/ 기계의 IP주소 <tag/srv-IP/ NFS서버의 IP주소 <tag/gw-IP/ 게이트웨이 <tag/netm-IP/ 넷매스크 <tag/hostname/ 기계의 이름 </descrip> <sect> 알려진 문제점 <p> <sect1> /sbin/init이 시작하지 않는다. <p> /sbin/init로 인한 유명한 문제는, 어떤 배포판들이 동적으로 링크된 /sbin/init을 포함하기 때문에 일어난다. 그경우 당신은 /lib 설정을 올바르게 바꾸어야 한다. 한가지 쉽게 해 볼수 있는 시도는, 클라이언트의 /sbin/init을 정적으로 링크된 ``Hello World'' 프로그램으로 대치하는 것이다. 이 방법으로 당신은 이 문제가 좀 더 근본적인 것인지 아니면 단지 동적 링킹때문인지 가려 낼 수 있다. <sect1> /dev 문제 <p> 부팅할때 tty에 관한 이상한 메시지를 얻었다면, 당신은 클라이언트로부터 /dev 디렉토리의 MAKEDEV를 실행시켜야 한다. 64비트 장치 번호를 가지는 어떤 서버에서는 이 해결책이 실패한다는 소문이 있다. 만약 그렇다면 문제를 일으키는 당신의 OS에 관하여 필자에게 메일을 보내기를 바란다. 한가지 잠재적인 해결책은 매번 초기 부트단계에서 작은 /dev 램 디스크를 만들고 장치 노드들을 다시 설치하는 방법이다. <sect> 다른 주제들 <p> <itemize> <item> BOOTP 클라이언트: <tt>ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz</tt>. <p> (리눅스 2.0에 포함된) initrd는 디스크없는 컴퓨터에서 꽤 멋지게 작동하도록 만들어 졌다. 사실 initrd는 항상 좀 더 커스터마이즈된 설정을 위한 진일보한 옵션이다. <item> 리눅스 2.0은 RARP대신에 BOOTP를 사용할 수 있기 때문에 (좀 더 정확히, 당신은 커널에 둘 다 컴파일 할 수 있고, 그 중 더 빠른 것이 이긴다), 평범한 bootpd기반 부트는 필요없다. <item> 커널 소스의 문서 디렉토리에 NFS-Root시스템에 관한 문서 파일이 있다. <item> NFS를 통해 스와핑을 허용하는 패치가 떠돌고 있다. 필자도 그것을 받았는데, 메일을 잃어 버렸다. :( 아마도 http://www.linuxhq.com/의 비공식 패치절에서 그것을 얻을 수 있을 것이다. <item> 필자의 PGP키는 andreas@ag.or.at를 핑거함으로써 얻을 수 있다. 필자의 핑거프린트(fingerprint): F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9. </itemize> </article>