1024이상의 실린더를 가진 하드에서 lilo로 멀티부팅하는 법 저자: 박병준 한양대학교 안산배움터 전자공학과 Computational Vision and Fuzzy Systems Lab. Ver 0.1 2000년 4월 18일 =============================================================================== Copyright 2000. 이 문서의 저작권은 저자인 저(박병준)에게 있습니다. 이 문서는 비상업적인 목적하에 편집, 재배포 할 수 있습니다. 이 문서의 내용을 갱신하거나 편집 또는 수정하신 경우 해당 수정본을 저에게 보내주십시요. Disclaim 이 문서에는 시스템 설정을 관리자 권한으로 수정하는 내용이 포함되어 있습니다. 이 문서의 내용을 적용하는 것은 전적으로 독자 본인의 책임으로 이 문서의 내용으로 인한 시스템 손상이나 피해에 대해 저에게 배상할 책임이 없음을 밝힙니다. 적용배포판 이 문서는 Mizi OS 1.1 버전을 기준으로 작성되었습니다. 다른 배포판의 경우 디렉토리의 이름이나 파일 이름 등이 약간 틀릴 수 있습니다. =============================================================================== 0. 이 문서는 누구에게 필요한가? 1024 이상의 실린더를 가진 하드에서 정상적으로 lilo 부팅을 하기 위해서는 리눅스의 / (root) 파티션이 1024 실린더보다 앞 쪽에 있어야 한다. 이는 BIOS에서 시스템의 부팅을 위해 필요한 정보의 위치를 지정할 때, 디스크 상의 물리적인 위치를 실린더, 헤드, 섹터 번호로 지정을 하고, 이 번호에서 실린더 번호를 지정하는 변수가 10bit 으로 제한 되어 있기 때문이다. 새로 산 빈 하드디스크에 파티션을 설정하는 경우에는 리눅스 파티션을 앞쪽에 배치시키는 방법을 사용하여 이 문제를 해결 할 수 있다. 만약 새로 산 하드에서 리눅스를 멀티부팅으로 사용하고자 하는 경우 윈도우즈 파티션의 C 드라이브 용량을 조그맣게 잡은 후에 윈도우를 설치하고, 리눅스에서 리눅스의 파티션이 1024실린더를 넘지 않도록 설정해 주면, 문제없이 리눅스를 멀티부팅 할 수 있다. 그러나 이미 윈도우즈가 설치되어 있는 대용량 하드의 경우 디스크 중간에 1024실린더를 넘지 않는 영역에다 리눅스 파티션을 만드는 것은 거의 불가능하다. 이 문서에서는 이런 경우를 위해서 1024 실린더를 넘어가는 영역에 리눅스를 설치하였을 경우 디스켓에 lilo를 설치하여 멀티부팅을 구현하는 방법에 대해 설명한다. (디스켓으로 부팅 리눅스 부팅, 하드로 윈도우즈 부팅) 만약 lilo의 새버전이 1024실린더 이상의 리눅스 파티션도 부팅이 가능해지면 이 문서는 더 이상 필요가 없다. 그러므로 이 문서를 읽기전에 먼저 현재 lilo의 최신버전에 대해 알아보기 바란다. 그러나 MBR에 lilo를 설치할 수 없는 NT계열 OS(윈NT, 윈두우즈2000)의 경우에는 여전히 이 문서가 유용할 것이다. 1. 먼저 해야 할 일들. (1) fips와 같은 파티션 도구를 이용해서 리눅스용 파티션의 빈 공간을 만들고 리눅스를 설치한다. 리눅스 설치에 관계된 내용은 이 문서의 목적에 부합되지 않으므로 생략한다. 단 lilo를 설치하는 부분에서는 설치가 불가능하다는 오류를 낼 것이다. 이 부분은 그냥 SKIP하고 넘어간다. 리눅스의 / 파티션의 디바이스 이름을 꼭 잘 기억하자. (예. /dev/hda8 ) (2) NT계열 OS인 경우 도스 명령행 부팅 디스켓을 준비한다. 윈도우즈 부팅 디스켓 은 이 사항을 만족시킬 수 있다. (3) 이 외에 lilo를 설치할 빈 디스켓을 준비한다. (4) 리눅스 배포본 CD를 준비한다. 리눅스 배포본 CD가 없는 경우에는 FTP사이트로 부터 배포본 디렉토리 에 있는 dosutils 디렉토리의 내용을 받아 둔다. (꼭 있어야 하는 파일들 loadlin.exe autoboot/vmlinuz ) 여기서 (2)와 (4)는 lilo를 설치하기 위해 처음 리눅스를 부팅하려면 필요한 것으로 lilo가 성공적으로 설치된 다음부터는 필요없는 것들이다. 2. 리눅스로 처음 부팅하기 이제 처음으로 리눅스 부팅을 해야한다. 먼저 도스 부팅 디스켓으로 도스로 부팅한다. 리눅스 배포본 CD가 있는 경우에는 윈도우즈98용 부팅 디스켓에서 CD-ROM Drive 지원을 선택하는 것이 좋다. 그렇지 않은 경우 각자 자신의 CDROM 드라이브에 해당되는 디바이스 드라이버를 불러서 CD를 활성화 시켜 준다. 윈도우즈9x 사용자의 경우에는 디스켓 대신 하드디스크로 부팅한 후에 "시작" ==> "종료" ==> "MS-DOS 모드에서 재시작" 을 눌러주면 CD롬 드라이브를 사용할 수 있는 DOS 상태가 된다. 이제 loadlin.exe와 vmlinuz 파일이 있는 디렉토리로 옮겨간다. (1) 디스켓에 loadlin.exe와 vmlinuz 를 다운 받아 둔 경우 a: loadlin vmlinuz root=/dev/hda8 ro (2) 하드디스크에 loadlin.exe와 vmlinuz를 다운 받아 둔 경우 cd dircetory... loadlin vmlinuz root=/dev/hda8 ro 여기서 /dev/hda8은 자신이 리눅스를 설치한 파티션을 써준다. 이렇게 하면 복사해 놓은 vmlinuz 커널을 이용해서 부팅을 하는데, 이 커널은 배포판의 설치에 사용되는 커널로 실제 사용자의 머신에 설치되어 있는 커널과 버전이 틀리다. 즉, 부팅은 되지만, 모듈을 사용할 수 없어서 제대로 사용할 수는 없다. 리눅스의 부팅이 끝나면 root로 로긴을 한다. 3. lilo 디스켓 만들기 lilo를 설치할 빈 디스켓을 준비한다. 디스켓을 플로피 드라이브에 넣고 다음의 명령들을 순서대로 수행한다. fdformat /dev/fd0H1440 mkfs /dev/fd0 1440 mkdir /mnt/tmp mount /dev/fd0 /mnt/tmp cp -p /boot/*.b /mnt/tmp cp -p /boot/vmlinuz /mnt/tmp cp -p /boot/mizios.msg /mnt/tmp #미지OS가 아닌경우는 생략한다. 다음의 내용을 /etc/lilo.flop 파일로 편집한다. # 플로피로 부팅할 수 있는 부팅디스켓용 lilo configuration boot=/dev/fd0 map=/mnt/tmp/lilo-map install=/mnt/tmp/boot.b message=/mnt/tmp/mizios.msg #미지OS가 아닌 경우 생략한다. prompt timeout=0 vga=normal disk=/dev/hda bios=0x80 sectors=63 #자신의 하드디스크의 섹터수로 바꾼다. heads=64 #자신의 하드디스크에 맞는 헤드수로 바꾼다. cylinders=9942 #자신의 하드디스크에 해당하는 실린더 수로 바꾼다. image=/mnt/tmp/vmlinuz root=/dev/hda5 #자신의 리눅스가 설치되어 있는 / 파티션의 디바이스 append="mem=128M hda=9942,64,63" #mem 다음에는 자신의 램크기를 쓰고, #hda 다음에는 자기 하드를 실린더,헤드,섹터 #로 나눠서 쓴다. label=linux read-only 이 파일에서는 한 개의 하드디스크만 있다고 가정하고 있으므로 hda를 모두 사용하고 있다. 만약 자신의 하드디스크가 첫번째 하드가 아닌 경우 hda를 자신의 하드에 맞는 이름으로 바꾼다. 실린더와 해드, 섹터의 수를 모를 때는 root권한에서 fdisk /dev/hda 명령을 수행한 후 'p' 를 누른다. 이때 나오는 출력 내용 중에 맨 윗부분에 보면 이 정보가 나온다. 'q'를 누르면 fdisk를 종료 시킬 수 있다. fdisk표시 예) [root@penguin bpark]# fdisk /dev/hda The number of cylinders for this disk is set to 9942. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/hda: 64 heads, 63 sectors, 9942 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 3657 7372480+ 7 HPFS/NTFS /dev/hda2 3658 9941 12668544 f Win95 Ext'd (LBA) /dev/hda5 3658 4178 1050304+ 83 Linux /dev/hda6 4179 4585 820480+ 83 Linux /dev/hda7 4586 4716 264064+ 82 Linux swap /dev/hda8 4717 4977 526144+ 83 Linux /dev/hda9 4978 5993 2048224+ b Win95 FAT32 /dev/hda10 5994 9941 7959136+ c Win95 FAT32 (LBA) Command (m for help): q [root@penguin bpark]# lilo.flop의 편집이 완료되었으면, 이 파일을 이용해서 lilo를 설치하자 lilo -C /etc/lilo.flop umount /mnt/tmp 이제 lilo의 설치가 완료되었다. 이 디스켓으로 부팅시키면 커널 모듈도 모두 제대로 읽고 정상적으로 부팅이 된다. 예쁘게 "리눅스 부팅" 이라는 라벨을 붙여서 잘 사용하자. 4. 참고문헌 LILO mini-HOWTO ( http://kldp.org/HOWTO/mini/LILO ) LILO 제대로 사용하기 ( http://kldp.org/KoreanDoc/Lilo-KLDP ) 윈도우즈9x, 윈도우즈 2000(NT4.0), 리눅스 멀티 부팅 ( http://kldp.org/KoreanDoc/html/MultiBoot-KLDP/MultiBoot-KLDP.html ) NT OS Loader + Linux mini-HOWTO ( http://kldp.org/HOWTO/mini/html/Linux+NT-Loader/Linux+NT-Loader.html )