답변 위의 7절 부분을 보십시오.
답변 위의 9절 부분을 보십시오.
답변 다음은 fdutils 프로그램의 작성자인 알라인 크나프(Alain Knaff) 씨의 간략한 답변입니다.
이것은 디스켓의 물리적 포맷의 문제라기보다는 오히려 BIOS 에 관련된 문제라 할수 있습니다. 만약 BIOS 가 18 을 초과하는 섹터넘버를 에러(bad)로 판단한다면 더이상 우리가 할수 있는 일은 별로 없습니다. BIOS 를 디스어셈블링한 자료가 부족하기 때문에 이는 시행착오를 거쳐 확인할 수 밖에 없습니다. 하지만, 만일 BIOS 가 ED 디스크(extra density: 36 sectors/track, 2.88MB)를 지원하는 경우에는, 1722K 디스크 역시 지원할 것입니다.
트랙당 섹터수가 21 섹터를 초과한, 소위 수퍼포멧된 디스크로는 부팅이 안되기 쉽습니다: 사실, 이러한 디스크들은 비표준 사이즈(예를 들면, 섹터당 512 바이트 대신 1024 바이트를 할당)의 섹터를 사용하기 때문에 부팅에 실패하기 쉽습니다. 하지만 이를 위해 특별한 부트섹터 프로그램을 작성한다면 문제를 해결할 수 있습니다. 제 기억이 맞다면, DOS 2M 유틸리티에 이런 기능이 있고, OS/2 의 XDF 유틸리티에도 이런 기능이 있습니다.
일부 BIOS 들은 18 을 초과하는 섹터넘버는 무조건 에러로 간주해 버립니다. 1722 K 디스크는 21 섹터까지 사용하기 때문에 이 경우 부팅이 안될 것입니다. 이를 확인하는 가장 확실한 테스트 방법은 DOS 나 syslinux 디스켓을 1722 K 로 포맷한 후 부팅가능하게 만들어, 이것으로 부팅해 보는 것입니다. 만일 LILO 를 사용한다면 linear 옵션을 주어서는 안됩니다(linear 옵션을 주면 LILO 는 그 디스켓을 표준 18 sectors/track 디스켓으로 간주하기 때문에 BIOS 가 고밀도 디스켓을 지원함에도 불구하고 부팅에 실패할 것입니다).
답변 10절 절을 보십시요.
답변 필자에게는 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 로 설정되어있는 램디스크를 사용하려 시도한다면 그 결과는 예상할 수 없습니다. 이는 커널 패닉으로 이어질 수도 있습니다.