커널 2.4에서 UDMA 100 하드 사용

필자 : 배철수 / 리눅스월드 발행인

 

     

    아래 글은 레드햇 6.2에서 커널을 2.4로 업그레이드하면서 UDMA 100 하드를 사용하는 방법이다. 이 글에서 예를 든 보드는 Abit KT7A-RAID 보드이다.(이 보드는 AMD의 Athlon 칩을 사용한다.)

    UDMA 100 하드는 기존의 DMA 33 하드에 비해 세 배 이상 빠른 속도를 보여준다. WIDE SCSI 하드와 거의 차이가 없다. 그러나 이 하드를 사용하려면 마더보드가 UDMA 100을 지원해야 한다.

    피시의 CMOS 셋업에는 UDMA 100 하드(콘트롤러)를 설정하는 부분이 없고 부팅시 별도의 키를 눌러야 셋업 메뉴가 뜬다.(ctrl+h)

    UDMA 100 하드를 연결하는 콘트롤러는 기존의 IDE(DMA 33) 하드 콘트롤러와 분리되어 있다. 즉 하드 디스크 연결 콘넥터가 4개이다. IDE 1과 2가 DMA 33 하드 용이고 3과 4는 UDMA 100 용이다. UDMA 100 하드를 기존의 IDE 콘넥터(IDE 1 과 2)에 연결해도 사용은 가능하나 이때는 DMA 33 하드와 같은 속도만을 낸다. UDMA 100 하드의 빠른 전송속도를 이용할 수 없으므로 자원 낭비다.

    그런데 UDMA 100 하드를 UDMA 전용 3번이나 4번 콘넥터에 연결하면 레드햇 6.2를 설치할 때 하드를 찾지 못한다. IDE 3번은 장치명이 /dev/hde 와 /dev/hdf 이고 4번은 /dev/hdg 와 /dev/hdh 인데 레드햇 설치 CD에서는 이 장치를 인식하지 못하는 것이다. 이유는 레드햇 6.2 설치에 사용되는 커널에 UDMA 100 콘트롤러 드라이버가 들어 있지 않기 때문이다.(레드햇 7.0은 필자가 테스트해 보지 않아 알 수 없으나 마찬가지일 걸로 생각된다. 이유는 레드햇 7.0도 2.2.X 커널을 사용하는데 2.2.x 커널에는 UDMA 100 드라이버가 들어 있지 않다. 단 패치를 하면 가능하다.)

    그러면 어떻게 리눅스에서 UDMA 콘넥터에 연결된 UDMA 100 하드를 부팅 및 사용할 수 있는가? 아래 설명은 레드햇 6.2를 처음 설치하는 경우의 설명이다. 이미 설치되어 있는 경우는 작업 단계가 줄어든다. 이 글을 참고하면 응용이 가능하다. 필자가 사용한 마더보드가 아니면 이 글 대로 따라 해도 UDMA 100 하드를 사용할 수 없을 수도 있다.(하드가 같은 경우에도.) 마더보드의 UDMA 100 콘트롤러가 다를 수 있기 때문이다.

 

- 설치환경

    마더보드   : Abit KT7A-RAID
    하드디스크 : IBM-DTLA-307030 UDMA 100

 

- 설치작업

 

1. 개요.

    레드햇 6.2 설치 CD에서 사용하는 커널(2.2.14)에는 Abit KT7A 보드에 사용된 UDMA 100 용 vt82cXXXX 및 hpt370 칩셋 드라이버가 들어있지 않으므로 커널을 2.4로 올려야 한다.

    그래서 리눅스 설치 때는 UDMA 하드를 일반 IDE 즉 DMA 33 콘넥터(IDE 1 즉 /dev/hda)에 연결해서 설치하고 설치가 끝난 후 커널 2.4에서 UDMA 100 드라이버를 넣어 컴파일한 다음 리부팅해 UDMA 100 콘트롤러가 인식되면 하드를 UDMA 콘넥터(IDE 3 번)로 옮기는 방법을 사용한다. 다른 방법도 있지만 이 방법이 비교적 간편하다.

    아래가 그 순서이다.

 

2. UDMA 하드를 IDE 콘넥터 1 번(/dev/hda)에 연결해 리눅스를 설치한다.

    이때 CD로 설치하려면 CD 드라이브는 2 번 콘넥터(/dev/hdc)에 연결한다.(UDMA 100과 DMA 33용 하드디스크 케이블은 다르다.)

            - UDMA 100 하드는 primary master(/dev/hda)
            - CD-ROM 은 secondary master(/dev/hdc)

 

3. 커널 2.4를 컴파일 해서 UDMA 100 드라이버를 선택한다.

    드라이버는 보드마다 다르므로 선택은 보드 매뉴얼을 참고 한다. 즉 보드에서 사용하는 UDMA 콘트롤러에 따라 선택이 달라진다. 아래는 필자가 사용한 보드의 경우이다.

    * 커널 컴파일 부분은 여기서 설명하지 않는다. 2.4.X 커널을 사용할 경우 ip masquerade 와
      모듈 적재 부분이 2.2.x 와 다르므로 커널 컴파일시 필요한 부분을 모두 커널에 포함시키고
      모듈을 사용하지 않는게 좋다. 그리고 ipmasquerade 를 사용하려면 iptables를 사용해야
      한다.(레드햇 7.0 에는 iptables 프로그램이 들어 있다.)

    * 커널 버전은 2.4.3이다.

    Make menuconfig 에서 선택하는 부분이다.
     

    ATA/IDE/MFM/RLL support  --->
    <*> ATA/IDE/MFM/RLL support   
    IDE, ATA and ATAPI Block devices  --->

    Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
    Include IDE/ATA-2 DISK support
    Include IDE/ATAPI CDROM support
    Generic PCI IDE chipset support
    Sharing PCI IDE interrupts support
    Generic PCI bus-master DMA support
    Boot off-board chipsets first support
    Use PCI DMA by default when available [이 부분은 선택에 주의해야 한다. Help 참조]
    HPT366 chipset support : 보드마다 다르다. 보드 매뉴얼 참조
    VIA82CXXX chipset support : 보드마다 다르다. 보드 매뉴얼 참조

 

4. lilo.conf에 새 커널을 추가하고 리부팅 한다.

    만약을 위해 기존의 커널로 부팅하는 부분을 남겨 놓을 것. 아래와 같다. (default=linux 부분은 제거할 것.)
     

            boot=/dev/hda
            map=/boot/map
            install=/boot/boot.b
            prompt
            timeout=50
            image=/boot/bzImage
              label=bz
              read-only
              root=/dev/hda2
            image=/boot/vmlinuz-2.2.14-5.0
              label=linux
              read-only
            root=/dev/hda2

 

    위에서 bzImage 가 UDMA 100 드라이버를 넣어 컴파일한 커널이다.(2.4.3)

 

5. 부팅시 메시지에 UDMA 100 콘트롤러가 인식되는지 살필 것.

    아래 부분이 UDMA 100 콘트롤러 부분이다.
     

    VP_IDE: VIA vt82c686b (rev 40) IDE UDMA100 controller on pci00:07.1
        ide0: BM-DMA at 0xc000-0xc007, BIOS settings: hda:DMA, hdb:pio
        ide1: BM-DMA at 0xc008-0xc00f, BIOS settings: hdc:DMA, hdd:pio
    HPT370: IDE controller on PCI bus 00 dev 98
    PCI: Found IRQ 11 for device 00:13.0
    HPT370: chipset revision 3
    HPT370: not 100% native mode: will probe irqs later
        ide2: BM-DMA at 0xe000-0xe007, BIOS settings: hde:pio, hdf:pio
        ide3: BM-DMA at 0xe008-0xe00f, BIOS settings: hdg:pio, hdh:pio

 

    위에서 “VIA vt82c686b (rev40) IDE UDMA 100 controller ...” 부분이 나온다. 또한 4 개의 IDE 장치가 인식되고 있다.(ide 0 ~ 4) 커널 패치 전에는 두 개의 장치(ide0, ide1) 만 나타났을 것이다. ide2 및 ide3 이 나타나지 않으면 UDMA 100 드라이버가 커널에 들어 있지 않으므로 다음으로 진행하지 말 것.
     

    !!!!!!!! 경 고 !!!!!!!
    -------------------------------------------------------------------

    이제부터는 매우 조심해야 한다. 아래에서 파일 수정이 잘못되거나, 명령 실행이 순서대로 되지 않으면 리부팅 시 kernel panic 이 나면서 부팅이 안된다. 상당한 전문가가 아니라면 이를 수정하는 방법을 모르므로 리눅스를 다시 설치하는 불상사를 겪을 수 있다. 자신이 없으면 다른 전문가의 자문을 구할 것. 작업 중간에 전원이 나가거나 임의로 리부팅 해도 문제가 발생한다. 데이터가 들어 있는 사용 중인 하드라면 미리 데이터를 모두 백업한 후 아래 작업을 진행하기 바란다.

    -------------------------------------------------------------------

 

6. /etc/fstab 파일을 수정한다.

    하드디스크를 UDMA 전용 3번째 콘넥터로 옮기므로 /etc/fstab에 지정된 하드 장치명을 /dev/hda 에서 /dev/hde 로 변경한다.

            변경 전
     

    /dev/hda2         /                       ext2          defaults                  1 1
    /dev/cdrom       /mnt/cdrom        iso9660     noauto,owner,ro      0 0
    /dev/fd0           /mnt/floppy        auto          noauto,owner          0 0
    none                /proc                 proc          defaults                  0 0
    none                /dev/pts             devpts       gid=5,mode=620     0 0
    /dev/hda1         swap                 swap         defaults                  0 0

 

            변경 후는 아래와 같다.
     

    /dev/hde2         /                        ext2        defaults                   1 1
    /dev/cdrom       /mnt/cdrom        iso9660    noauto,owner,ro      0 0
    /dev/fd0           /mnt/floppy         auto        noauto,owner          0 0
    none                /proc                  proc        defaults                  0 0
    none                /dev/pts              devpts     gid=5,mode=620     0 0
    /dev/hde1        swap                   swap       defaults                  0 0

 

    * 하드 파티션 구성이 다르면 위와 똑같이 나오지 않는다. 어는 경우든 hda 를 hde로 모두
       변경해야 한다. 다른 부분은 절대 변경하지 말 것.

    * 변경 후 절대 리부팅하지 말 것. 리부팅하면 kernel panic 이 나온다.

 

7. /etc/lilo.conf 를 수정한다.

    아래와 같다.(위의 4번에 나오는 필자의 피시의 lilo.conf 를 예로 든다.)
     

    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    image=/boot/bzImage
           label=bz
           read-only
           root=/dev/hde2
    image=/boot/vmlinuz-2.2.14-5.0
           label=linux
           read-only
           root=/dev/hde2

 

    * root=/dev/hde2 만 변경했다. (기존에는 hda2 였다.) 하드를 3번 콘넥터(/dev/hde) 로
       옮기면 부팅시 사용되는 root 디바이스 장치는 /dev/hde2 이기 때문이다.
       이 부분은 부팅할 때만 사용되므로 지금 변경해도  문제 없다.

    주의] 위에서 boot=/dev/hda 는 수정하지 말 것. 이 부분은 lilo 프로그램이 저장되는
             하드 디스크 마스터 부트 레코드를 지정하는 부분으로서 lilo 명령을 내릴 때 사용된다.
             아직은 하드디스크가 /dev/hda 이므로 그대로 두어야 한다. 이를 /dev/hde 로
             변경하면 lilo 명령을 줄 때 에러가 난다.

 

8. lilo 명령을 준다. 이를 빼고 리부팅하면 100% 부팅에 실패한다.

    혹시 lilo 명령시 에러가 나면 다음으로 진행하지 말고 원인을 살필 것.

 

9. shutdown -h now 명령으로 시스템을 종료한다.

 

10. 하드디스크를 3번째 콘넥터에 연결한다. (즉 UDMA 100 전용 첫번째 콘넥터)

 

11. 다시 리눅스를 부팅하면 이제 부팅시의 메시지가 다를 것이다.

    /dev/hde가 장치가 새로 나타날 것이다. (hda가 이름이 변경된 것이다.)

    아래와 같다.
     

    hde: IBM-DTLA-307030, ATA DISK drive
    ide1 at 0x170-0x177,0x376 on irq 15
    ide2 at 0xd000-0xd007,0xd402 on irq 11
    hde: 60036480 sectors (30739 MB) w/1916KiB Cache, CHS=59560/16/63, UDMA(100)

 

    이제 부팅도 되고 UDMA 100 도 제대로 작동하므로 모든게 끝났는가? 아니다. 아직 한 가지 더 고칠게 있다. lilo.conf 에서 아래 부분을 고쳐야 한다.

    boot=/dev/hda  -->  boot=/dev/hde 로

    고쳤으면 lilo 명령을 실행.

    이제는 하드의 장치명이 /dev/hde 이므로 lilo 명령을 내릴 때 lilo 프로그램은 hde 의 마스트부트레코드에 저장되야 하기 때문이다. 고치지 않아도 부팅은 되겠지만 lilo 명령 때 에러가 난다.

    “boot= ” 는 lilo 프로그램이 저장되는 하드디스크의 부트 섹터를 지정한다. /dev/hde 는 세번째 콘넥터에 연결된 하드의 마스터부트레코드에 lilo 프로그램을 저장하라는 뜻이다. 다른 운영체제와 멀티부팅을 하는 경우에 lilo 를 MBR에 저장하면 멀티부팅이 안되는 경우가 있다. 이때는 리눅스의 root 디렉토리가 위치하는 파티션 - 위의 경우는 /dev/hde2 - 에 lilo 를 저장한다.

 

12. 추가해야 될 사항은 부팅 순서에서 hde로 부팅하려면
     부팅장치를 레이드(RAID)를 지정해야 한다는 것이다.

    필자도 처음에 HDD로 지정했다 부팅이 안되서 애를 먹었다. CD 드라이브는 UDMA 두번째 콘넥터에 연결할 것.
    (/dev/hdg)




▲ top

home으로...