7. 애로사항과 문제해결

부트디스크를 만들 때 단번에 성공하는 일을 거의 없습니다. 루트디스크를 만드는 일반적인 접근방법은 우선 당신의 현재 시스템으로부터 필요한 요소들을 끌어모아 조립한 후, 시행착오를 거쳐 콘솔 상에 어떤 메시지가 나타나는 단계에까지 진입하는 것입니다. 일단 디스켓 시스템이 어떤 메시지를 출력하는 단계에까지 이르면 전투의 반은 끝난 것이나 다름없습니다. 왜냐하면 이 단계까지 오면 출력된 메시지를 보고 무엇이 문제인지를 파악해 나갈 수 있으므로 시스템이 원활히 동작할 때까지 각각의 개별적 문제들을 해결해 나가기만 하면 되기 때문입니다. 시스템이 아무런 메시지 없이 그냥 멈추어 버린 경우라면 그 원인을 찾는 것은 어려운 일입니다. 만일 시스템이 아무런 메시지를 남기지 않고 멈추어 버렸다면 아래의 순서대로 원인을 조사해 나가십시요.

일단 위의 일반적인 사항들을 확인했다면 이제 보다 구체적인 파일들을 확인합니다.

  1. init/sbin/init 혹은 /bin/init 로 제대로 포함되었는지 확인합니다. 실행가능한 상태인지도 확인합니다.

  2. ldd init 해서 init 의 라이브러리들을 체크합니다. 보통 이것은 libc.so 가 되지만 하여튼 확인합니다. 필요한 라이브러리와 로더들을 포함시켰는지 확인합니다.

  3. 각 라이브러리들에 대해 그에 해당하는 알맞은 로더를 가지고 있는지를 확인합니다. a.out 에는 ld.so 가 있어야 하고 ELF 에는 ld-linux.so 가 있어야 합니다.

  4. 부트디스크 파일시스템의 /etc/inittab 파일에 있는 getty(혹은 agetty, mgetty, getty_ps 등의 이른바 getty 류 프로그램)를 호출하는 부분을 체크합니다. 이 부분을 하드 디스크의 inittab 과 비교하면서 되풀이하여 확인해 봅니다. 맨 페이지를 펼쳐놓고 과연 제대로 설정되었는지 확인합니다. inittab 는 리눅스 시스템에서 가장 교묘한 부분입니다. 이유는 그 문법과 내용이 사용되는 init 프로그램에 따라 서로 다르고, 또 각 시스템마다 조금씩 다르기 때문입니다. 이에 관한 문제를 다루는 유일한 방법은 initinittab 에 대한 맨 페이지를 숙지한 후, 당신의 시스템 본체가 부트될 때 일어나는 과정들이 플로피 디스크 상에서도 똑같이 일어나도록 하는 것입니다. /etc/inittab 가 시스템 초기화 엔트리를 가지고 있는지 확인하십시요. 이 파일에는 시스템 초기화 스크립트들을 수행시키는 명령어가 반드시 포함되어 있어야만 합니다.

  5. init 에 했던 것처럼 getty 에 대해서도 ldd 를 실행시켜서 getty 가 무엇을 필요로 하는지 확인하고, 필요한 라이브러리와 로더들이 루트 파일시스템에 들어있는지 확인합니다.

  6. 쉘 프로그램(예를들면 bashash 등등)을 포함시켰는지 확인하고, 이 쉘 프로그램들이 rc 스크립트들을 과연 제대로 실행시킬수 있는지 확인합니다.

  7. 만일 복구디스켓에 /etc/ld.so.cache 파일을 포함시켰다면 그것을 리메이크합니다.

init 가 시작되기는 하는데 다음과 같은 메시지를 내는 경우 :
        Id xxx respawning too fast: disabled for 5 minutes  
이것은 init 가 발생시킨 메시지로서 주로 gettylogin 이 시작하자마자 죽어버렸음을 알리는 것입니다. getty, login 실행화일과 이들이 의존하는 라이브러리들을 확인해 보십시오. /etc/inittab 내의 호출형식이 정확한지 확인하십시오. 만일 getty 로부터 이상한 메시지를 받았다면 아마도 /etc/inittab 내의 호출형식이 어딘가 틀렸을 것입니다.

만일 로그인 프롬프트가 떴고 사용자 이름을 제대로 입력했는데도 시스템 프롬프트가 즉각 또다른 로그인 네임을 요구한다면, 문제는 아마도 PAM 이나 NSS 에 관련된 것일 겁니다. 4.4절 절을 참고하세요. 또한, shadow password 를 사용하면서도 깜박 /etc/shadow 를 부트디스크로 복사해 넣지 않았기 때문일 수도 있습니다.

복구 디스켓에 있는 df 등의 일부 실행파일을 실행했을때 다음과 비슷한 메시지를 받는 경우: df: not found, 다음 두가지를 확인하십시요. (1) 그 바이너리가 위치한 디렉토리가 PATH 에 잡혀있는지. (2) 그 프로그램이 필요로 하는 라이브러리와 로더를 포함시켰는지.