12. 자주 받는 질문들(FAQ : Frequently Asked Question)

질문 boot/root 디스크로 부트했는데 아무 일도 생기지 않습니다. 어떻게 해야 하나요?
질문 슬랙웨어/데비안/레드햇의 부트디스크들은 어떻게 동작하는 것인가요?
질문 1440 KB 를 초과하는 고밀도 디스켓을 사용하려면? 자신의 디스켓 드라이브가 지원하는 디스켓 밀도를 확인하려면?
질문 램디스크의 크기를 늘리려면?
질문 부팅가능한 시디롬을 만들려면?
질문 부팅가능한 LS-120 디스크를 만들려면?
질문 XYZ 드라이버를 포함한 부트디스크를 만들려면?
질문 루트디스켓의 파일들을 새로운 파일들로 갱신하려면 어떻게 해야 하나요?
질문 다시 도스를 쓰고 싶어서 LILO 를 제거할까 하는데 어떻게 해야 하나요?
질문 커널과 부트디스크를 둘다 잃어버렸는데 부팅시킬 방법이 있을까요?
질문 boot/root 디스켓의 복사본을 만들려면?
질문 매번 부트할 때마다 “ahaxxxx=nn,nn,nn” 식으로 입력하지 않고 부트할 수는 없나요?
질문 부트할 때 “A: cannot execute B” 라는 에러가 났습니다. 왜인가요?
질문 제 커널은 램디스크를 지원합니다만 램디스크를 0 K 로 초기화시켜 버립니다.

질문 boot/root 디스크로 부트했는데 아무 일도 생기지 않습니다. 어떻게 해야 하나요?

답변 위의 7절 부분을 보십시오.

질문 슬랙웨어/데비안/레드햇의 부트디스크들은 어떻게 동작하는 것인가요?

답변 위의 10절 부분을 보십시오.

질문 1440 KB 를 초과하는 고밀도 디스켓을 사용하려면? 자신의 디스켓 드라이브가 지원하는 디스켓 밀도를 확인하려면?

답변 이 주제에 관해서는 위의 8절 절에 있는 앨라인 나프(Alain Knaff)씨의 답변을 보십시요. 필자가 아는한 그분이야말로 확실한 권위자입니다.

질문 램디스크의 크기를 늘리려면?

답변 이 문제는 본문 중에 더 잘 설명되어있습니다만, 여기서 잠시 답을 해 보겠습니다.

먼저, 해당 명령어의 맨 페이지에 뭐라 적혀있던 간에 램디스크 크기 조절을 위해 rdev 이나 ramsize 명령어를 사용하려들지 마십시요. 램디스크 워드는 더이상 램디스크 크기를 결정하지 못합니다.

두번째로, 램디스크는 실제로는 동적이란 것을 명심하십시요; 당신이 램디스크 크기를 설정해 준다 함은 그저 램디스크의 크기가 최대 얼마까지 커질수 있는가를 정해주는 것 뿐이지 직접 어떤 메모리를 할당시켜주는 것은 아닙니다. 그러므로 이 값을 굉장히 크게 정해준대도 전혀 두려워할 필요가 없습니다(예를 들면 8 M나 심지어는 16 M 도 무방). 램 영역은 필요해 질때 까지는 소비되지 않습니다. 다음의 몇가지 방법으로 램디스크의 최대크기를 정해줄 수 있습니다.

  1. ramdisk_size=NNN 식의 명령행 파라메터를 사용합니다. 이는 직접 손으로 입력해도 좋고 아니면 LILO 에서 다음과 같은 명령어를 사용해도 좋습니다. append="ramdisk_size=NNN"

  2. LILO 를 사용한다면 ramdisk=8192K 처럼 커널 옵션으로 lilo.conf 파일속에 적어주어도 됩니다.

  3. 커널 설정옵션인 CONFIG_BLK_DEV_RAM_SIZE 을 설정한 후 커널을 다시 컴파일하는 방법도 있습니다.

질문 부팅가능한 시디롬을 만들려면?

답변 11절 절을 보십시요.

질문 부팅가능한 LS-120 디스크를 만들려면?

답변 필자에게는 LS-120 드라이브가 없기 때문에, 다음 정보는 데이브 시네게(Dave Cinege) 씨가 리눅스 라우터 프로젝트에 제공한 내용을 요약한 것입니다.

LS-120 은 IDE 플로피 드라이브의 일종입니다. 표준 3.5 인치 디스크와 호환되며 새로운 120 MB 디스크를 사용할 수 있습니다. 리눅스 v2.0.31 에서는 완벽하게 지원됩니다. 이것으로 부팅하려면 LS-120 을 드라이브 0 으로 특별하게 다루어주는 BIOS 가 반드시 있어야 합니다(이에반해, IDE 디바이스들은 보통 80 에서 시작합니다). BIOS 가 이를 지원하지 않는 경우, Promise Technologies 사의 소형 IDE FloppyMax 카드를 구입하면 이 문제를 해결할 수 있습니다.

커널 부트로더는 LS-120 을 좋아하지 않기 때문에 즉각 멈춰버리게 됩니다. 2m 디스크들도 LS-120 에서는 부트되지 않을 것입니다. 1.44 MB 에서 1.74 MB 디스크들은 깨끗하게 부트될 것입니다. SYSLINUX v1.32 는 120 MB 디스크와 잘 작동합니다. MS-DOS 와의 호환성이 필요없다면 SYSLINX 를 쓰는 대신 디스크를 파티션 나누어 ext2 나 minix 파일시스템을 쓰는 것이 더 좋을 것입니다.

LILO 는 120 MB 디스크와 잘 작동합니다. 다음은 lilo.conf 의 한 예입니다.
        boot=/dev/hda
        compact
        disk=/dev/hda bios=0
        install=/floppy/boot.b
        map=/floppy/map
        image=/floppy/linux
        label=Linux
        append="load_ramdisk=1"
        initrd=/floppy/root.bin
        ramdisk=8192
"disk=/dev/hda bios=0" 부분이 LS-120 로 부팅하는 요령입니다.

질문 XYZ 드라이버를 포함한 부트디스크를 만들려면?

답변 가장 쉬운 방법은 가까운 슬랙웨어 미러 사이트에서 슬랙웨어 커널을 받는 것입니다. 슬랙웨어 커널들은 가능한 한 많은 디바이스 드라이버들을 포함하는 포괄적인 커널들이므로 만일 SCSI 나 IDE 컨트롤러를 가지고 있다면 해당 드라이버가 슬랙웨어 커널에 있을 가능성이 높습니다.

a1 디렉토리에 가서 당신의 컨트롤러 타입에 맞는 IDE 나 SCSI 커널을 선택하십시오. 선택하신 커널에 대한 xxxxkern.cfg 파일을 보면 해당 드라이버가 그 커널에 들어있는지 확인할 수 있습니다. 원하는 디바이스가 리스트 안에 있다면, 그 커널은 당신 컴퓨터를 부팅시킬 수 있을 것입니다. xxxxkern.tgz 파일을 다운받은 후 본 문서의 부트디스크 제작에 관한 부분에 적힌 방법대로 부트디스크로 복사하십시오.

그 다음, rdev zImage 명령을 써서 커널의 루트 디바이스를 확인합니다. 만일 이게 당신이 원하는 루트 디바이스가 아니라면, rdev 명령을 써서 루트 디바이스를 바꿔주어야 합니다. 예를 들면, 지금 다운받은 커널에는 /dev/sda2 가 루트 디바이스로 지정되어 있는데 정작 자신의 루트 디바이스는 /dev/sda8 이라는 SCSI 파티션일 수 있는 것입니다. 만일 루트디스켓을 이용하겠다면 rdev zImage /dev/fd0 명령으로 루트 파일시스템의 위치가 플로피디스켓임을 알려주어야 합니다.

슬랙웨어 루트디스크의 셋업방법까지 알고 싶어하실지 모르겠는데, 그것은 본 HOWTO 문서의 범위를 벗어나는 내용입니다. 원하시는 분들은 리눅스 설치가이드를 보시거나 슬랙웨어 배포판을 구해보시기 바랍니다. 본 문서의 "참고자료" 부분을 참고하세요.

질문 루트디스켓의 파일들을 새로운 파일들로 갱신하려면 어떻게 해야 하나요?

답변 가장 쉬운 방법은 루트디스크의 파일 시스템을 당신이 사용했던 DEVICE (4.2절에서 나왔었습니다)에 역으로 복사해온 후, 그 파일 시스템을 마운트해서 필요한 부분을 갱신합니다. 당신의 루트 파일시스템이 어디서부터 시작하고 얼마만큼의 블록을 차지하는지를 반드시 기억해두어야 합니다.
        dd if=/dev/fd0 bs=1k skip=ROOTBEGIN count=BLOCKS | gunzip > DEVICE
        mount -t ext2 DEVICE /mnt
갱신한 다음에는 4.7절 부분에서 했던 것처럼 작업한 후, 루트 파일시스템을 다시 디스크로 옮깁니다. 이때, 새로운 루트 파일시스템의 시작위치를 바꾸지 않았다면 커널을 다시 넣는다거나 램디스크 워드를 재계산해줄 필요는 없습니다.

질문 다시 도스를 쓰고 싶어서 LILO 를 제거할까 하는데 어떻게 해야 하나요?

답변 사실 이 질문은 부트디스크에 관한 것은 아닙니다만 빈번히 되풀이되는 질문입니다. 리눅스로 하려면 다음 명령을 쓰십시오.
         /sbin/lilo -u

다른 방법으로는 LILO 로 저장해둔 백업을 dd 명령을 써서 부트섹터로 복사할 수도 있습니다. 이 방법을 쓰시려면 LILO 에 관한 문서를 참고하시기 바랍니다.

DOS 나 윈도우즈 내에서는 다음 DOS 명령어를 사용하십시오.
         FDISK /MBR
MBR 은 마스터 부트 레코드(Master Boot Record)를 뜻하는 용어입니다. 위의 명령은 파티션 테이블은 건드리지 않으면서 부트섹터를 깨끗한 DOS 부트섹터로 바꾸어 줍니다. 완벽하게 깨끗이해야 한다고 주장하는 사람들은 이 방법에 동의하지 않고있지만 심지어는 LILO 를 제작한 Werner Almesberger 씨 조차도 이 방법을 추천하고 있습니다. 이 방법이 쉽고 확실합니다.

질문 커널과 부트디스크를 둘다 잃어버렸는데 부팅시킬 방법이 있을까요?

답변 준비해놓은 부트디스크가 없으시다면, 가장 쉬운 방법은 당신의 디스크 컨트롤러 타입(IDE 혹은 SCSI)에 맞는 슬랙웨어 커널을 구하는 것입니다. 이것은 위의 “ XYZ 드라이버를 포함한 부트디스크를 만들려면? ” 에 대한 답변에서 설명했습니다. 그렇게 구한 커널을 써서 컴퓨터를 부트시킨 후 손상된 부분을 고치시기 바랍니다.

구하신 커널의 루트 디바이스 세팅이 원하시는 디스크 타입과 파티션으로 설정되어있지 않았을 수 있습니다. 예를 들어 슬랙웨어에서는 일반적으로 커널의 SCSI 루트 디바이스가 /dev/sda2 로 잡혀있는데 필자의 리눅스의 루트파티션은 /dev/sda8 로 되어있다고 합시다. 이 경우 커널내의 루트 디바이스 설정을 수정해주어야 합니다.

심지어는 가진 것이 달랑 커널 하나와 DOS 혹은 그 외 다른 운영체제뿐이더라도 그걸로도 커널내의 루트 디바이스와 램디스크 설정을 바꿀수 있습니다.

rdev 명령은 커널파일내에 고정되어있는 오프셋의 값을 바꿔줌으로써 커널의 세팅을 바꾸는 것입니다. 따라서 현재 어떤 시스템을 갖고 있든지 간에 hex 에디터만 쓸 수 있다면 같은 작업을 해낼 수 있습니다. -- 한 예로 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

램디스크 워드의 해석은 위의 6.3절 부분에 나와 있습니다.

메이저, 마이너 디바이스 넘버들은 루트 파일시스템이 마운트될 디바이스로 설정되어야 합니다. 쓸만한 값들은 다음과 같습니다.
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 하게) 디스크로 써넣어 버리는 프로그램입니다. 노턴 유틸리티를 사용하신다면 파일을 디스크의 물리적인 첫부분에서부터 그대로 써넣어야만 합니다.

질문 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

질문 매번 부트할 때마다 “ahaxxxx=nn,nn,nn” 식으로 입력하지 않고 부트할 수는 없나요?

답변 디스크 디바이스가 자동으로 감지되지 않는다면 다음처럼 커널에 디바이스 파라메터 문자열을 써 주어야 합니다. 예를 들면 다음과 같은 식입니다.
      aha152x=0x340,11,3,1
LILO 사용시 이 파라메터 문자열을 전달하는 몇 가지 방법이 있습니다.

  • 시스템이 LILO 를 통해 부트될 때마다 명령어 라인에 문자열을 써주는 방법. 하지만 이것은 귀찮은 방법입니다.

  • LILO 의 lock 키워드를 써서 원하는 명령어 라인을 디폴트로 저장시키는 방법. 이렇게 하면 LILO 는 부트할 때마다 매번 이 옵션을 사용하게 됩니다.

  • 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 구문을 부주의하게 사용하면 파티션이 손상될 수 있습니다.

질문 부트할 때 “A: cannot execute B” 라는 에러가 났습니다. 왜인가요?

답변 어떤 프로그램의 이름이 다른 유틸리티 프로그램의 코드내에서 직점 코딩(hardcoded)된 경우가 있습니다. 이런 경우가 어디에나 있는 것은 아닙니다. 하지만 이러한 경우는 왜 어떤 실행파일이 분명히 존재하는데도 불구하고 특정 프로그램이 그 파일을 찾지 못하는가를 설명해줍니다. 특정 프로그램이 코드내에서 다른 파일의 이름을 사용하고 있는지 여부를 확인하려면 strings 명령을 쓴 후 그 출력을 grep 으로 파이프 받아 확인해보면 됩니다.

이런 경우의 몇가지 실제 예가 알려져 있습니다.

  • 어떤 리눅스 버전에서의 shutdown 프로그램은 그 코드내에 /etc/reboot 라는 이름을 바로 사용하고 있습니다. 따라서 이 경우 reboot 프로그램은 반드시 /etc 디렉토리 밑에 위치해야만 합니다.

  • 커널이 init 를 찾지 못해서 문제가 되는 경우도 있었습니다.

이런 문제들을 해결하기 위해서는, 해당 프로그램을 올바른 디렉토리에 두거나 설정파일(예를 들면 inittab)들을 고쳐 올바른 디렉토리를 가리키도록 해야 합니다. 아무래도 자신없다면 하드디스크의 환경과 동일한 환경을 만들어 주십시오. 그다음, 프로그램들을 하드디스크에서와 동일한 디렉토리에 두고, 하드디스크에서 쓰는 inittab, /etc/rc.d 와 동일한 파일을 사용해 봅니다.

질문 제 커널은 램디스크를 지원합니다만 램디스크를 0 K 로 초기화시켜 버립니다.

답변 이런 일이 발생하면 부팅시에 다음과 같은 커널 메시지가 뜹니다.
         Ramdisk driver initialized : 16 ramdisks of 0K size

이는 틀림없이 부트시에 커널 파라메터가 램디스크의 크기를 0 으로 세팅했기 때문일 겁니다. 아마도 LILO 설정파일의 파라메터가 다음과 같이 설정되어있는 것을 간과하셨을 것입니다.
         ramdisk= 0

일부 오래된 배포판에 포함된 LILO 설정의 샘플 파일에 이런 옵션이 들어 있는 수가 있습니다. 지금 이 샘플 설정파일이 커널을 세팅하고있는 것입니다. 위와 같은 라인이 있다면 삭제하세요.

만일 0 K 로 설정되어있는 램디스크를 사용하려 시도한다면 그 결과는 예상할 수 없습니다. 이는 커널 패닉으로 이어질 수도 있습니다.