<!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 &lt<tt/mailto:andreas@ag.or.at/&gt 또는
리눅스 HOWTO 조정자인 Tim Bynum 
&lt<tt/mailto:linux-howto@sunsite.unc.edu/&gt에게 이메일로 연락주십시오.

<sect1>공헌한 사람들<p>
<itemize>
<item>
Avery Pennarun &lt<tt/apenwarr@foxnet.net/&gt (<bf/LILO/없이 부팅하는 법)
<item> 
Ofer Maor <tt/&lt;ofer@hadar.co.il&gt/ 
(디스크 없는 웍스테이션의 설치에 관한 더 나은 미니 하우투를 제공)
<item>
Christian Leutloff <tt/&lt;leutloff@sundancer.tng.oche.de&gt/ 
(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/&lt<em/IP-address of the machine/&gt</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 &lt<em/kernel-image/&gt /dev/nfsroot</tt>를
타이핑함으로써 커널 이미지의 루트 장치를 설정할 수 있다.
<sect1> 루트 파일 시스템의 작성
<sect2> 파일 시스템 복사 <p>
<em> 경고: 이들 명령어들이 잘 작동한다 하더라도, 제작
환경(production enviroment)에서 결코 적절한 것은 아니다. 
클라이언트의 루트 파일시스템을 설정하기 위한 더욱 나은 방법이
Ofer Maor <tt/&lt;ofer@hadar.co.il&gt/씨의 NFS-Root-Client 미니 하우투에
잘 나와 있다.
</em> <p>
루트 트리의 위치를 정한 다음에, 예를 들어, 
<tt>mkdir -p &lt<em/directory/&gt</tt>와 
<tt>tar cClf / - | tar xpCf &lt<em/directory/&gt -</tt>를 함으로써
트리를 만든다.
<p>
LILO없이 커널을 부팅하려면 루트 디렉토리는 
<tt>/tftpboot/&lt<em/IP-address/&gt</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 &lt<em/ip-addr/&gt &lt<em/hardware-addr/&gt</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/&lt;leutloff@sundancer.tng.oche.de&gt/씨의 호의):
<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=&lt<em/server-ip-addr/&gt:&lt<em>/path/to/mount</em>&gt</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=&lt<em/wst-IP/&gt:&lt<em/srv-IP/&gt:&lt<em/gw-IP/&gt:&lt<em/netm-IP/&gt:&lt<em/hostname/&gt</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>