Q. boot/root 디스크로 부트했는데 아무 일도 생기지 않습니다. 어떻게 해야 하나요?
문제해결 부분을 보십시오.
Q. 슬랙웨어/데비안/레드햇의 부트디스크들은 어떻게 동작하는 것인가요?
전문가들이 사용하는 방법 부분을 보십시오.
Q. XYZ 드라이버를 포함한 부트디스크를 만들려면?
가장 쉬운 방법은 가까운 슬랙웨어 미러 사이트에서 슬랙웨어 커널을 받는 것입니다. 슬랙웨어 커널들은 가능한 한 많은 디바이스 드라이버들을 포함하는 포괄적인 커널들이므로 만일 SCSI 나 IDE 컨트롤러를 가지고 있다면 해당 드라이버가 슬랙웨어 커널에 있을 가능성이 높습니다.
a1 디렉토리에 가서 당신의 컨트롤러 타입에 맞는 IDE 나 SCSI 커널을 선택하십시오. 선택하신 커널에 대한 xxxxkern.cfg 파일을 보면 해당 드라이버가 그 커널에 들어있는지 확인할 수 있습니다. 원하는 디바이스가 리스트 안에 있다면, 그 커널은 당신 컴퓨터를 부팅시킬 수 있을 것입니다. xxxxkern.tgz 파일을 다운받은 후 본 문서의 부트디스크 제작에 관한 부분에 적힌 방법대로 부트디스크로 복사하십시오.
그 다음, rdev 명령을 써서 커널의 루트 디바이스를 체크해야 합니다.
rdev zImage
rdev 명령은 커널 내에 지정된 현재의 루트 디바이스가 무엇인지 출력합니다. 만일 당신이 원하는 루트 디바이스가 아니라면, rdev 명령을 써서 루트 디바이스를 바꿔주어야 합니다. 예를 들어 지금 다운받은 커널에는 /dev/sda2 가 루트 디바이스로 지정되어 있는데 정작 자신의 루트 디바이스는 /dev/sda8 이라는 SCSI 파티션이라고 합시다. 루트디스켓을 사용하기 위해서는 다음 명령을 써야 합니다.
rdev zImage /dev/fd0
슬랙웨어 루트디스크의 셋업방법까지 알고 싶어하실지 모르겠는데, 그것은 이 HOWTO 문서의 범위를 벗어나는 내용입니다. 그런 분들은 리눅스 설치가이드를 보시거나 슬랙웨어 배포판을 구해보시기 바랍니다. 이 문서의 참고자료 편을 참고하세요.
Q. 부트디스켓의 커널을 새로운 커널로 갱신하려면 어떻게 해야 하나요?
파일 시스템이 없는 부트디스켓의 경우는 dd 명령어를 써서 단순히 부트디스켓에 커널을 복사하면 됩니다. boot/root 디스크인 경우 cp 명령어를 사용합니다. 부트디스크를 만드는 자세한 사항은 본 HOWTO 문서중 ''부트'' 와 관련된 부분을 참고하세요. 같은 방법이 부트디스크의 커널을 갱신하는데 그대로 적용됩니다.
Q. 루트디스켓의 파일들을 새로운 파일들로 갱신하려면 어떻게 해야 하나요?
가장 쉬운 방법은 루트디스크의 파일 시스템을 당신이 사용했던 DEVICE ( 파일 시스템의 제작에서 나왔었습니다)에 역으로 복사해온 후, 그 파일 시스템을 마운트해서 필요한 부분을 갱신합니다. 당신의 루트 파일시스템이 어디서부터 시작했고 얼마만큼의 블록을 차지했는지를 반드시 기억해두어야 합니다.
dd if=/dev/fd0 bs=1k skip=ROOTBEGIN count=BLOCKS | gunzip > DEVICE
mount -t ext2 DEVICE /mnt
갱신한 다음에는 만들어진 파일 시스템을 포장하기 부분에서 했던 것처럼 작업한 후, 루트 파일시스템을 다시 디스크로 옮깁니다. 이때, 새로운 루트 파일시스템의 시작위치를 바꾸지 않았다면 커널을 다시 넣는다거나 램디스크 워드를 재계산해줄 필요는 없습니다.
Q. 다시 도스를 쓰고 싶어서 LILO 를 제거할까 하는데 어떻게 해야 하나요?
사실 이 질문은 부트디스크에 관한 것은 아닙니다만 빈번히 되풀이되는 질문입니다. 리눅스로 하려면 다음 명령을 쓰십시오.
/sbin/lilo -u
다른 방법으로는 LILO 로 저장해둔 백업을 dd 명령을 써서 부트섹터로 복사할 수도 있습니다. 이 방법을 쓰시려면 LILO 에 관한 문서를 참고하시기 바랍니다.
DOS 나 윈도우즈 내에서는 다음 DOS 명령어를 사용하십시오.
FDISK /MBR
MBR 은 마스터 부트 레코드(Master Boot Record)를 뜻하는 용어입니다. 위의 명령은 파티션 테이블은 건드리지 않으면서 부트섹터를 깨끗한 DOS 부트섹터로 바꾸어 줍니다. 완벽하게 깨끗이 해야 한다고 주장하는 사람들은 이 방법에 동의하지 않고 있지만 심지어는 LILO 를 제작한 Werner Almesberger 씨 조차도 이 방법을 추천하고 있습니다. 이 방법이 쉽고 확실합니다.
Q. 커널과 부트디스크를 모두 잃어버렸는데 부팅시킬 방법이 있을까요?
준비해놓은 부트디스크가 없으시다면, 가장 쉬운 방법은 당신의 디스크 컨트롤러 타입(IDE 혹은 SCSI)에 맞는 슬랙웨어 커널을 구하는 것입니다. 이것은 위의 “ XYZ 드라이버를 포함한 부트디스크를 만들려면? ” 에 대한 답변에서 설명했습니다. 그렇게 구한 커널을 써서 컴퓨터를 부트시킨 후 손상된 부분을 고치시기 바랍니다.
구하신 커널의 루트 디바이스 세팅이 원하시는 디스크 타입과 파티션으로 설정되어있지 않았을 수 있습니다. 예를 들어 슬랙웨어에서는 일반적으로 커널의 SCSI 루트 디바이스가 /dev/sda2 로 잡혀있는데 필자의 리눅스의 루트파티션은 /dev/sda8 로 되어있다고 합시다. 이 경우 커널내의 루트 디바이스 설정을 수정해주어야 합니다.
심지어는 당신이 가진 것이 달랑 커널 하나와 DOS 나 그 외 다른 운영체제뿐이라고 하더라도 그걸로도 커널내의 루트 디바이스와 램디스크 설정을 바꿀수 있습니다. rdev 명령은 커널파일내에 고정되어있는 오프셋의 값을 바꿔줌으로써 커널의 세팅을 바꾸는 것입니다. 따라서 현재 어떤 시스템을 갖고 있든지 간에 hex 에디터만 쓸 수 있다면 rdev 와 똑같은 일을 해낼 수 있습니다. -- 한 예로 DOS 의 노턴 유틸리티 디스크에디터를 사용할 수도 있습니다. 에디터를 써서 커널내의 다음 값들을 체크하고 필요하다면 이를 수정하시면 됩니다.
HEX DEC DESCRIPTION
0x01F8 504 Low byte of RAMDISK word
0x01F9 505 High byte of RAMDISK word
0x01FC 508 Root minor device number - see below
0X01FD 509 Root major device number - see below
램디스크 워드의 해석은 램디스크 워드의 설정 부분에 나와 있습니다.
메이저, 마이너 디바이스 넘버들은 루트 파일시스템이 마운트되는 디바이스로 설정되어야 합니다. 쓸만한 값들은 다음과 같습니다.
DEVICE MAJOR MINOR
/dev/fd0 2 0 1st floppy drive
/dev/hda1 3 1 partition 1 on 1st IDE drive
/dev/sda1 8 1 partition 1 on 1st SCSI drive
/dev/sda8 8 8 partition 8 on 1st SCSI drive
일단 이 값들을 설정했다면 이제 노턴 유틸리티 디스크 에디터나 rawrite.exe 같은 프로그램을 써서 파일을 디스켓 상에 써넣어야 합니다. rawrite.exe 는 모든 배포본에 다 포함되어 있습니다. 이것은 도스프로그램으로서 어떤 파일을 파일시스템 내에 쓰는 것이 아니라 부트섹터부터 그대로(raw 하게) 디스크로 써넣어 버리는 프로그램입니다. 노턴 유틸리티를 사용하신다면 파일을 물리적인 디스크의 첫부분에서부터 그대로 써넣어야만 합니다.
Q. boot/root 디스켓의 복사본을 만들려면?
자성 매체는 시간이 지남에 따라 그 자기적 특성이 저하되기 때문에, 원본을 읽을 수 없게 될 경우에 대비해 복구용 디스켓을 여벌로 가지고 있는 것이 좋습니다.
부팅 가능한 디스켓이든 유틸리티 디스켓이든간에 어떤 디스켓의 복사본을 만드는 가장 손쉬운 방법은 dd 명령으로 원본디스켓의 내용을 하드디스크 상의 파일로 복사해 온 후, 같은 명령으로 그 파일을 새로운 디스켓에 복사해 넣는 것입니다. 이때 디스켓을 마운트할 필요가 없으며 또 마운트해서도 안됩니다. 왜냐하면 dd 명령은 raw device 인터페이스를 사용하기 때문입니다.
원본을 복사하기 위해서는 다음과 같은 명령을 씁니다.
dd if=DEVICENAME of=FILENAME
여기서 DEVICENAME 은 디스켓 드라이브의 디바이스 이름이고
FILENAME 은 하드디스크에 생성되는 파일의 이름입니다.
dd 명령에서 count 파라메터를 생략하면 디스크 전체(고밀도 디스켓의 경우 2880 블록)를 복사하게 됩니다.
얻어낸 파일을 새로운 디스켓으로 복사하려면 새 디스켓을 넣고 명령을 반대로 내립니다.
dd if=FILENAME of=DEVICENAME
이상은 당신이 오직 하나의 디스크 드라이브를 가지고 있다고 가정한 것입니다. 만일 같은 타입의 디스크 드라이브 두 개를 가지고 있다면, 다음 명령어로 디스켓을 복사할 수 있습니다.
dd if=/dev/fd0 of=/dev/fd1
Q. 매번 부트할 때마다 "ahaxxxx=nn,nn,nn" 식으로 입력하지 않고 부트할 수는 없나요?
디스크 디바이스가 자동으로 감지되지 않는다면 다음처럼 커널에 디바이스 파라메터 문자열을 써 주어야 합니다.
aha152x=0x340,11,3,1
LILO 사용시 이 파라메터 문자열을 전달하는 몇 가지 방법이 있습니다.
lock" 키워드를 써서 원하는 명령어 라인을 디폴트로 저장시키는 방법. 이렇게 하면 LILO 는 부트할 때마다 매번 이 옵션을 사용하게 됩니다.
append= 구문을 쓰는 방법. 이때 파라메터 문자열은 반드시 인용부호로 감싸주어야만 합니다.
다음은 위의 파라메터 문자열을 사용한 명령어 라인의 예입니다.
zImage aha152x=0x340,11,3,1 root=/dev/sda1 lock
이것은 디바이스 파라메터 문자열을 넘겨주면서 동시에 커널로 하여금 루트 디바이스를 /dev/sda1 로 설정케 한 후, 명령어 라인 전체를 저장시켜 차후로 부트할 때마다 이를 사용합니다.
다음은 APPEND 구문의 예입니다.
APPEND = "aha152x=0x340,11,3,1"
파라메터 문자열은 명령어 라인에서는 절대로 인용부호를 써서는 안되며, 반대로 APPEND 구문에서는 반드시 인용부호를 같이 써야 합니다.
또, 파라메터 문자열대로 제대로 동작하게 하려면 커널은 반드시 그 디스크 타입에 해당하는 드라이버를 가지고 있어야만 합니다. 만일 해당 드라이버를 가지고 있지 않다면 그 파라메터 문자열은 아무런 작용을 못하는 있으나마나한 존재가 되므로 이럴때는 필요한 드라이버를 포함하는 커널을 다시 만들어 설치해야 합니다. 커널을 제작하는 자세한 방법은 /usr/src/linux 로 가셔서 README 파일을 읽으시고 리눅스 FAQ 와 리눅스 설치 HOWTO 를 읽어 보십시오. 아니면 그 디스크 타입에 맞는 일반적인 커널을 구해 설치하셔도 됩니다.
LILO 설치를 시험해 보시기 전에 반드시 LILO 문서를 읽어보시기 바랍니다. BOOT 구문을 부주의하게 사용하면 파티션이 손상될 수 있습니다.
Q. 부트할 때 "A: cannot execute B" 라는 에러가 났습니다. 왜인가요?
어떤 프로그램의 이름이 다른 유틸리티 프로그램의 코드내에서 직점 코딩된 경우가 있습니다. 이런 경우가 자주있는 것은 아닙니다. 하지만 이러한 경우는 왜 어떤 실행파일이 분명히 존재하는데도 불구하고 특정 프로그램이 그 파일을 찾지 못하는가를 설명해줍니다. 특정 프로그램이 코드내에서 다른 파일의 이름을 사용하고 있는지 여부를 확인하려면 strings 명령을 쓴 후 그 출력을 grep 으로 파이프 받아 확인하면 됩니다.
이런 경우의 몇가지 예를 들어 보겠습니다.
reboot 프로그램은 반드시 /etc 디렉토리 밑에 위치해야만 합니다.
init 를 찾지 못해서 문제가 되는 경우도 있습니다.
이런 문제들을 해결하기 위해서는, 해당 프로그램을 올바른 디렉토리에 두거나 설정파일(예를 들면 inittab)들을 고쳐 올바른 디렉토리를 가리키도록 해야 합니다. 아무래도 미심쩍다면 하드디스크의 환경과 동일한 환경을 만들어 주십시오. 프로그램들을 하드디스크에서와 동일한 디렉토리에 두고, 하드디스크에서 쓰는 inittab, /etc/rc.d 와 동일한 파일을 사용해 봅니다.
Q. 제 커널은 램디스크를 지원합니다만 램디스크를 0 K 로 초기화시켜 버립니다.
이런 일이 발생하면 부팅시에 다음과 같은 커널 메시지가 뜹니다.
Ramdisk driver initialized : 16 ramdisks of 0K size
이는 틀림없이 부트시에 커널 파라메터가 램디스크의 크기를 0 으로 세팅했기 때문일 겁니다. 아마도 LILO 설정파일의 파라메터가 다음과 같이 설정되어있는 것을 간과하셨을 것입니다.
ramdisk= 0
일부 오래된 배포판에 포함된 LILO 설정의 샘플 파일에 이런 옵션이 들어 있는 수가 있습니다. 지금 이 샘플 설정파일이 커널을 세팅하고있는 것입니다. 위와 같은 라인이 있다면 삭제하세요.
만일 0 K 로 설정되어있는 램디스크를 사용하려한다면 그 결과는 예상할 수 없습니다. 이는 커널 패닉으로 이어질 수도 있습니다.