답변 위의 7절 부분을 보십시오.
답변 위의 10절 부분을 보십시오.
답변 이 주제에 관해서는 위의 8절 절에 있는 앨라인 나프(Alain Knaff)씨의 답변을 보십시요. 필자가 아는한 그분이야말로 확실한 권위자입니다.
답변 이 문제는 본문 중에 더 잘 설명되어있습니다만, 여기서 잠시 답을 해 보겠습니다.
먼저, 해당 명령어의 맨 페이지에 뭐라 적혀있던 간에 램디스크 크기 조절을 위해 rdev 이나 ramsize 명령어를 사용하려들지 마십시요. 램디스크 워드는 더이상 램디스크 크기를 결정하지 못합니다.
두번째로, 램디스크는 실제로는 동적이란 것을 명심하십시요; 당신이 램디스크 크기를 설정해 준다 함은 그저 램디스크의 크기가 최대 얼마까지 커질수 있는가를 정해주는 것 뿐이지 직접 어떤 메모리를 할당시켜주는 것은 아닙니다. 그러므로 이 값을 굉장히 크게 정해준대도 전혀 두려워할 필요가 없습니다(예를 들면 8 M나 심지어는 16 M 도 무방). 램 영역은 필요해 질때 까지는 소비되지 않습니다. 다음의 몇가지 방법으로 램디스크의 최대크기를 정해줄 수 있습니다.
ramdisk_size=NNN 식의 명령행 파라메터를 사용합니다. 이는 직접 손으로 입력해도 좋고 아니면 LILO 에서 다음과 같은 명령어를 사용해도 좋습니다. append="ramdisk_size=NNN"
LILO 를 사용한다면 ramdisk=8192K 처럼 커널 옵션으로 lilo.conf 파일속에 적어주어도 됩니다.
커널 설정옵션인 CONFIG_BLK_DEV_RAM_SIZE 을 설정한 후 커널을 다시 컴파일하는 방법도 있습니다.
답변 11절 절을 보십시요.
답변 필자에게는 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 |
답변 가장 쉬운 방법은 가까운 슬랙웨어 미러 사이트에서 슬랙웨어 커널을 받는 것입니다. 슬랙웨어 커널들은 가능한 한 많은 디바이스 드라이버들을 포함하는 포괄적인 커널들이므로 만일 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 |
답변 사실 이 질문은 부트디스크에 관한 것은 아닙니다만 빈번히 되풀이되는 질문입니다. 리눅스로 하려면 다음 명령을 쓰십시오.
/sbin/lilo -u |
다른 방법으로는 LILO 로 저장해둔 백업을 dd 명령을 써서 부트섹터로 복사할 수도 있습니다. 이 방법을 쓰시려면 LILO 에 관한 문서를 참고하시기 바랍니다.
DOS 나 윈도우즈 내에서는 다음 DOS 명령어를 사용하십시오.
FDISK /MBR |
답변 준비해놓은 부트디스크가 없으시다면, 가장 쉬운 방법은 당신의 디스크 컨트롤러 타입(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 |
답변 자성 매체는 시간이 지남에 따라 그 자기적 특성이 저하되기 때문에, 원본을 읽을 수 없게 될 경우에 대비해 복구용 디스켓을 여벌로 가지고 있는 것이 좋습니다.
부팅 가능한 디스켓이든 유틸리티 디스켓이든간에 어떤 디스켓의 복사본을 만드는 가장 손쉬운 방법은 dd 명령으로 원본디스켓의 내용을 하드디스크 상의 파일로 복사해 온 후, 같은 명령으로 그 파일을 새로운 디스켓에 복사해 넣는 것입니다. 이때 디스켓을 마운트할 필요가 없으며 또 마운트해서도 안됩니다. 왜냐하면 dd 명령은 raw device 인터페이스를 사용하기 때문입니다.
원본을 복사하기 위해서는 다음과 같은 명령을 씁니다.
dd if=DEVICENAME of=FILENAME |
얻어낸 파일을 새로운 디스켓으로 복사하려면 새 디스켓을 넣고 명령을 반대로 내립니다.
dd if=FILENAME of=DEVICENAME |
이상은 당신이 오직 하나의 디스크 드라이브를 가지고 있다고 가정한 것입니다. 만일 같은 타입의 디스크 드라이브를 두 개 가지고 있다면, 다음 명령어로 디스켓을 복사할 수 있습니다.
dd if=/dev/fd0 of=/dev/fd1 |
답변 디스크 디바이스가 자동으로 감지되지 않는다면 다음처럼 커널에 디바이스 파라메터 문자열을 써 주어야 합니다. 예를 들면 다음과 같은 식입니다.
aha152x=0x340,11,3,1 |
시스템이 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 구문을 부주의하게 사용하면 파티션이 손상될 수 있습니다.
답변 어떤 프로그램의 이름이 다른 유틸리티 프로그램의 코드내에서 직점 코딩(hardcoded)된 경우가 있습니다. 이런 경우가 어디에나 있는 것은 아닙니다. 하지만 이러한 경우는 왜 어떤 실행파일이 분명히 존재하는데도 불구하고 특정 프로그램이 그 파일을 찾지 못하는가를 설명해줍니다. 특정 프로그램이 코드내에서 다른 파일의 이름을 사용하고 있는지 여부를 확인하려면 strings 명령을 쓴 후 그 출력을 grep 으로 파이프 받아 확인해보면 됩니다.
이런 경우의 몇가지 실제 예가 알려져 있습니다.
어떤 리눅스 버전에서의 shutdown 프로그램은 그 코드내에 /etc/reboot 라는 이름을 바로 사용하고 있습니다. 따라서 이 경우 reboot 프로그램은 반드시 /etc 디렉토리 밑에 위치해야만 합니다.
커널이 init 를 찾지 못해서 문제가 되는 경우도 있었습니다.
이런 문제들을 해결하기 위해서는, 해당 프로그램을 올바른 디렉토리에 두거나 설정파일(예를 들면 inittab)들을 고쳐 올바른 디렉토리를 가리키도록 해야 합니다. 아무래도 자신없다면 하드디스크의 환경과 동일한 환경을 만들어 주십시오. 그다음, 프로그램들을 하드디스크에서와 동일한 디렉토리에 두고, 하드디스크에서 쓰는 inittab, /etc/rc.d 와 동일한 파일을 사용해 봅니다.
답변 이런 일이 발생하면 부팅시에 다음과 같은 커널 메시지가 뜹니다.
Ramdisk driver initialized : 16 ramdisks of 0K size |
이는 틀림없이 부트시에 커널 파라메터가 램디스크의 크기를 0 으로 세팅했기 때문일 겁니다. 아마도 LILO 설정파일의 파라메터가 다음과 같이 설정되어있는 것을 간과하셨을 것입니다.
ramdisk= 0 |
일부 오래된 배포판에 포함된 LILO 설정의 샘플 파일에 이런 옵션이 들어 있는 수가 있습니다. 지금 이 샘플 설정파일이 커널을 세팅하고있는 것입니다. 위와 같은 라인이 있다면 삭제하세요.
만일 0 K 로 설정되어있는 램디스크를 사용하려 시도한다면 그 결과는 예상할 수 없습니다. 이는 커널 패닉으로 이어질 수도 있습니다.