다음 이전 차례

4. 작동원리

디스크없는 워크스테이션을 부팅하는 과정은 몇단계로 나누어 볼 수 있다. 각 단계를 이해하는 것은 발생할 수 있는 문제를 해결하는데 많은 도움이 된다 .

아래 내용은 워크스테이션의 부팅을 지원해 줄 수 있는 서버가 구성되어 있다고 가정한다.

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


다음 이전 차례