다음
이전
차례
디스크없는 워크스테이션을 부팅하는 과정은 몇단계로 나누어 볼 수 있다. 각 단계를 이해하는 것은
발생할 수 있는 문제를 해결하는데 많은 도움이 된다 .
아래 내용은 워크스테이션의 부팅을 지원해 줄 수 있는 서버가 구성되어 있다고 가정한다.
- 워크스테이션의 파워를 켜면 POST(power on self test)를 수행한 후에 랜카드의 부트롬에 들어있는
부트코드를 실행한다.
- 부트코드는 랜카드가 있는지를 검색하고(역자주: 랜카드위에 있는 부트롬에 들어있는 부트코드가
랜카드의 존재여부를 검색한다는 것이 이상하게 들릴지 모르지만 사실 부트롬과 랜카드는 별개의
것이라는 사실을 생각한다면 이해가 갈 것이다.) 발견된다면 초기화 한다.
- 부트코드는 bootp 브로드캐스트 패킷을 로컬 랜에 송출한다. 이 패킷에는 자신의 랜카드의 맥어드레스
가 들어 있다.
- inetd 프로세스는 워크스테이션이 보낸 패킷을 검출하게 되면 bootpd데몬을 호출하여 응답하도록
조치한다.
- bootpd 프로세스는 자신의 구성화일을 읽어서
해당 맥어드레스를 가진 항목이 있는가를 확인하고 항목이 존재한다면 들어있는 정보를 가지고 응답 패킷을
구성하게 된다. 이 때 몇가지의 정보가 서버로부터 워크스테이션으로 가게 되면 그 목록은 다음과 같다.
- 워크스테이션에 지정된 IP 어드레스 ('ip=')
- 로컬 랜의 서브넷 마스크('sm=')
- Bootfile이 있는 디렉토리 ('hd=')
- 다운받을 커널 이미지의 이름 ('bf=')
- 워크스테이션의 부트코드는 서버로 부터 받은 정보를 가지고 TCP/IP인터페이스를 설정한다.
- 부트코드는 서버로부터 커널 이미지를 다운 받기 위하여 tftp요청을 보내게 된다.
- 커널 다운로드가 끝나게 되면 부트코드는 커널의 시작 코드로 제어권을 넘겨주게 된다.
- 커널이 작동이 시작되고 각종 주변기기들을 초기화 한다.
- 커널은 자신의 TCP/IP인터페이스를 설정하기 위하여 필요한 모든 정보를 입수하려고 다시 bootp요청을 보낸다.
이 때 부트코드가 커널에게 정보를 넘겨주지 않는 다는 점을 유의하자. 커널은 반드시 스스로
정보를 다시 요구해야 한다.
- 서버는 워크스테이션의 커널에게 필요한 정보를 다시 보내준다.
- 워크스테이션에 지정된 ip어드레스 ('ip=')
- 로컬 랜의 서브넷 마스크('sm=')
- nfs를 이용하여 마운트 될 루트 디렉토리의 위치('rp=')
- 게이트웨이 어드레스 ('gw=')
- DNS 서버의 주소 ('ds=')
- 워크스테이션의 호스트 이름 (이 내용은 bootptab의 맨 처음 항목에 있다. )
위의 정보가 모두 전달이 된 후에 네트워크 인터페이스가 구성되고 활성화 된다.
- NFS를 통하여 루트파일 시스템이 마운트 된다. 파일 시스템은 읽기 전용으로 마운트되며 이는 여러대의 워크스테이션이
하나의 디렉토리를 공유 할 수 있도록 하기 위한 것이며, 각각의 워크스테이션이 공유 디렉토리의 내용을 바꾸어
버리는 것을 바라지 않기 때문이다.
- 이 시점에서 제어권은 커널로부터 'init' 프로세스로 넘겨지게 된다.
- init은 /etc/inittab 파일을 읽고 환경을 설정하기 시작한다.
- inittab파일의 맨 처음 요소를 rc.local 명령이다. 시스템이 'sysinit'상태에 있을때 실행된다.
- rc.local스크립트는 기록되거나 변경될 필요가 있는 파일들을 담을 4m크기의 램디스크를 만들고 마운트한다.
- 이 램디스크는 /tmp디렉토리에 마운트 된다. 실제로 기록되거나 변경될 필요가 있는 파일들은 모두 이
디렉토리에 위치하게 되며 원래의 위치에는 모두 링크로 존재하게 된다. 예를 들어 워크스테이션이 가동중에는
/dev/tty0의 권한을 변경하려는 시도가 있게 된다. 만일 이 디바이스파일이 /dev 디렉토리에 위치한다면
루트 파일시스템 전체의 권한이 읽기 전용이므로 아마도 권한은 읽기 전용일 것이다. 따라서 우리는 실재로 이 파일을
쓰기 가능한 /tmp밑의 /nodes디렉토리에 두고 그 링크만을 /dev 에 두게 되는 것이다.
- /proc 파일 시스템을 마운트 한다.
- loopback 네트워크 인터페이스를 구성한다.
- /tmp밑에 시스템이 가동중에 필요한 몇몇 파일들을 기록하기 위한 디렉토리들을 만든다.
- /tmp/compiled
- /tmp/var
- /tmp/var/run
- /tmp/var/log
- /tmp/var/lock
- /tmp/var/lock/subsys
디렉토리들이 생긴다.
- /tmp/XF86Config 파일이 /tftpboot/lts/ltsroot/etc/lts.conf 구성파일의 항목들을
참조하여 만들어진다. 참조되는 항목은 마우스의 종류등의 기타 X의 설정에 관련이 있는 항목들이다.
- /tmp/startx 스크립트 파일이 생성된다. 이 스크립트는 실행될 X서버의 종류,
xdm이 실행될 서버의 주소등의 내용을 담게 된다. 이 정보 또한 /tftpboot/lts/ltsroot/etc/lts.conf
구성파일의 내용에 의거하여 생성된다.
- /tmp/syslog.conf 파일이 생성된다. 이 파일에는 시스템에서 발생된 각종 로그정보가 네트워크상의
어느 호스트로 보내져야 하는지에 대한 정보가 들어있다. 이 정보는 역시 lts.conf에 들어있으며 다른 파일들과 마찬가지로
/etc디렉토리 밑에 링크로서 존재하게 된다.
- syslogd 데몬이 방금 생성된 구성파일에 의거하여 실행된다.
- 제어권이 다시 init 에게 돌아간다. Init 은 initdefault 항목을 참조하여 runlevel 을 결정한다.
- 만약 runlevel이 3 이라면 콘솔에 기본 쉘이 실행된다. 문제해결을 시도할 경우에 도움이 될것이다.
- 만약 runlevel이 5 라면 /tmp/startx 이 실행되며 이는 X를 가동시킬 것이다.
- X가 시작되면 바로 XDMCP질의를 서버에게 보내게 되며 이는 로그인 박스를 화면에 표시해 줄것이다.
- 사용자가 로그인 되면 X세션이 서버에 실행되며 이후에 실행되는 모든 X프로그램들은 서버에서 실행되고 단지
화면 출력이나 사용자 입력만이 워크스테이션을 통해 이루어지게 된다.
기본적으로 X터미널이 완성되었다.
다음
이전
차례