강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
CDROM에 부트할 수 있는 라이브 파일시스템 만들기
조회 : 3,066  




By Mark Nielsen
번역 : 윤봉환 / el@linuxlab.co.k
r

     

    이 문서 내용이 바뀌면 http://genericbooks.com/Literature/Articles/3/cdburn_2.html 에 올린다.
     

    Contents

    1. References
    2. CDROM 굽기, 그리고 부트 CDROM에 대해
    3. EXT2 CDROM과 부트 플로피 디스크 만들기
    4. ISO9660과 Rock-Ridge 기능 확장을(내 MILAS 프로젝트를 위해)이용해
        부트할 수 있는 설치 CDROM 만들기.
    5. 컴퓨터가 사용할 수 있도록 부트-업 프로세스 설정하기
    6. 결론과 앞으로 쓸 기사
    7. 내 컴퓨터에서 사용하는 그대로 가져온 펄 스크립트:부트할 수 있는 iso9660
        형식의 RedHat 5.1 CDROM을 만드는.
    8. 내 RedHat 6에서 사용하는 rc.sysinit
    9. 내가 쓰는 lilo.conf
    10. 내가 쓰는 fstab.
    11. 내가 쓰는 오래된 Install.pl 스크립트. 이 펄스크립트는 나중에 부트할 수
         있는 CDROM에 통합될 것이다.

     

 

    참고문헌

    CD-Writing HOWTO / Winfried Trumper (http://www.guug.de/~winni/linux/cdr/html/)Lilo mini-Howto(http://www.linuxdoc.org/HOWTO/mini/LILO.html)
    Xcdroast -- “man cdrecord”.
    (http://www.fh-muenchen.de/rz/xcdroast)

 

CDROM 굽기에 대해

    먼저, 여러분은 지난달에 소개한 “리눅스 배포판들로 인스톨 CD 만들기”라는 기사를 읽어야 한다. 이 기사는 여러분이 cdrecord 유틸리티를 이용해서 CDROM을 굽는 방법을 알고 있다고 가정한다. 이 달 기사는 두 번째 단계이다.

    왜 CDROM에 Live Linux Filesystem을 만드는가?

    1. 여러분은 인스톨 CDROM을 제작하려 한다.(MILAS 같은)
    2. 여러분은 CDROM으로 부트 오프하고, 그 속에 여러분의 운영체제에서 중요한 파일
        대부분을 담아서 사용한다. 그리고 여러분의 하드 드라이브는 다른 쪽에서 사용하려 한다.
    3. 여러분은 매우 손쉽게 업그레이드 하고 싶을 것이다. 다시 쓰기가 가능한 CDROM을 사용
        하거나, 그냥 새로 구운 것으로 바꾸면 된다.

    우리 계획은, 나중에 하드 드라이브 없이 CDROM 만으로 컴퓨터를 만드는 것이다. 여러분은 핵심 파일시스템의 대부분을 CDROM에 두고, /tmp 디렉토리는 램디스크를, 그리고 그 밖의 모든 것들은 NFS를 사용한다. 나는 디스크 없는 네트워크 전용 컴퓨터들을 정말(정말) 싫어한다. 그래서 여러분 자신의 디스크 없는 워크스테이션은 나중에 만들 것이다.

 

STRING NOTE:

    펄 스크립트와 내가 부트할 수 있는 CDROM을 제작하는 방법들은 아직은 완벽하지 않다. 나는 여전히 이 작업을 계속하고 있으며, 나중에는 이것들이 모두 Python이나 Perl에서 동작하게 만들려 한다(먼저 Python부터). “부트할 수 있는 CDROM 만들기”가 충분히 문서화되면, 내 MILAS 프로젝트에 이것을 합칠 것이다.

 

EXT2 CDROM과 부트할 수 있는 플로피 디스크 만들기

    이 작업을 위해, 우리는 약간 낯선 일을 할 것이다. 우리는 ext2 파일시스템으로 포맷된 CDROM과 플로피 디스크를 부트할 수 있게 만들 것이다. 더 손쉬운 방법인 ISO9660 포맷을 사용한다면 이 섹션은 건너뛰어도 좋다.

    내가 소개하는 방법을 이용하면 여러분에게 도움이 되는 것은 무엇일까? 흠.. 이 질문에 대답하기 전에 먼저, 확실히 알아두어야 할 것이 있다. 플로피, CDROM, 또는 하드 드라이브 파티션은 대개의 경우 똑같이 다루어진다는 것을 확실히 이해하자. 그럼, 이제 질문에 대해 대답하겠다:

    1. 여러분의 하드 드라이브에 여분의 파티션을 두고, CDROM에 실제로 넣기 전에 CD 이미지라 부르는 특별한 파일을 만들어 테스트해 볼 수 있다. 만약 여러분이 플로피 디스크로 부트 오프했다면, 여러분은 이것을 하드 드라이브 파티션으로 지정할 수 있다. 그리고 이 방법이 문제없이 잘 동작한다면, 이것을 여러분의 CDROM으로 지정해서 부트할 수 있는 플로피 디스크를 만들 수 있다. CDROM인 것처럼 동작하게 만들려면 여러분의 하드 드라이브 파티션을 읽기-전용(read-only)모드로 마운트해야하는 것을 꼭 기억한다. 하드 드라이브 파티션은 여러분이 CDROM을 굽기 전에 이미지를 테스트하기에 좋은 방법이다(특히 한 번 밖에 쓸 수 없는 CD-R일 경우라면 더)

    OPTIONAL: 먼저, ext2 파일시스템을 만든다 (하드 드라이브를 이용해서 테스트한다):

    1. CDROM 이미지를 만들기 위해 하드 드라이브에 여분의 파티션을 준비한다.

    2. 그 파티션을 ext2 파일시스템으로 포맷한다. 예를 들어: “mkfs -t ext2 /dev/hda3”. 이
        명령은 여러분의 프라이머리 하드 드라이브에 있는 세 번째 파티션을 포맷한다.
        여러분이 가진 여분의 파티션은 이것과 다를 수 있으므로 3이라는 숫자를 적당한 것으로
        바꾸어야 한다.

    3. 새로운 설치에 적용하기 위해, 꼭 필요한 모든 디렉토리와 /etc 디렉토리 아래 있는 설정
        파일들을 복사해 넣는다.

    4. /tmp 디렉토리로 램디스크를 사용하고 /var가 /tmp/var를 가리키게 만든다.

    5. 부트할 수 있는 플로피 디스크를 만들고, CDROM 드라이브를 “root”나 “/”로 사용하도록
        설정할 수 있다. 또는 플로피 디스크에 lilo를 설치했다면 부트 프롬프트에서 “/” 디렉토리에
        사용할 파티션을 따로 지정하는 명령을 사용할 수 있다. 다음과 같은 명령을 사용하면 된다:

    lilo root=/dev/hdc

    여러분의 CDROM 드라이브가 “/dev/hdc”라고 가정했다. 내가 이 명령에서 파티션 번호를 지정하지 않은 것에 주의한다. 파티션 번호를 쓰지 않는다.

    부트할 수 있는 플로피 디스크를 만드는 다른 방법들도 있다. 내 Redhat 설치에서는:

    ### 커널을 복사한다.
    cp /boot/vmlinuz-2.2.12-32 /tmp/Vmlinuz
    ### /dev/hdc에 있는 CDROM으로부터 boot 사본을 만든다.
    rdev /tmp/Vmlinuz /dev/hdc
    ramsize /tmp/Vmlinuz 20000
    ### 커널을 플로피 디스크에 직접 복사해 넣어야 하는데, 먼저 플로피 디스크가 포맷되어 있어야 한다:
    mkfs -t ext2 /dev/fd0
    dd if=/tmp/Vmlinuz of=/dev/fd0

    디렉토리와 파일들을 복사하는 방법에 대한 예제는, 이 문서 끝에서 Perl 스크립트를 참고 한다.
    램디스크를 만들기 위해서는, 내가 얼마 전에 썼던 RamDisk 기사를 먼저 읽어보고,
    “man lilo.conf” 명령도 사용해 본다.

    “dd” 명령과 루프백 장치를 이용해서 600 메가바이트 크기로 이미지를 만든다. 그 다음에는 이 이미지를 여러분의 CDROM에 복사해 넣는다. 이미지는 어떻게 만들까?

    “/mnt/Partition” 디렉토리가 여러분이 CD 이미지로 만들 모든 파일들이 들어 있는 곳이라고 가정하고:

    ## 공간을 미리 마련하기 위해 비어있는 파일, 또는 이미지를 만든다.
    dd if=/dev/zero of=/tmp/Image bs=1024k
    count=650

    ### 빈 이미지를 포맷한다.
    /sbin/mke2fs -b 2048 /tmp/Image

    ### 만약 mkfs 프로그램이 장치를 인식하지 못한다고 말하면 “y”를 답한다.
    mkdir -p /mnt/CDROM_IMAGE

    ### 포맷된 빈 이미지를 디렉토리에 마운트 한다.
    mount -t ext2 -o loop=/dev/loop1/tmp/Imagemnt/CDROM_IMAGE

    ### 여러분의 하드 드라이브 파티션에서 CDROM 이미지로 필요한 것들을 복사한다.
    tar -C /mnt/Partition -pc . | tar -C/mnt/CDROM_IMAGE -xvp

    ### 또는 rsync를 이용해서 복사해 넣는다.
    # rsync -a /mnt/Partition/* /mnt/CDROM_
    IMAGE

    ### image를 언마운트 한다.
    umount /mnt/CDROM_IMAGE

    또는, 여러분이 ISO9660으로 포맷된 CDROM을 사용하지 않겠다면, 락-릿지 확장(rock-ridge extension)을 사용할 수도 있다. 다음 명령을 넣자:

    mkisofs -aJlL -r -o /tmp/Image/mnt/Partition

    Note: 한 번에 ISO9660 CDROM을 만드는 방법이 훨씬 더 쉬운데, 아래 섹션에서 설명된다.

    이제 “/tmp/Image”에 있는 이미지를 CDROM에 구워 넣자.

    사실, 내가 생각하기에, 아마 600메가바이트 크기로 하드 드라이브 파티션을 준비한 다음 이미지를 만들지 않고도 직접 카피해 넣을 수 있을 것이다. 만약 여러분의 하드 드라이브 파티션이 “/dev/hda4”이라면, 다음과 같이 작업한다:

    ### 주의할 것: 내가 직접 테스트해 본 것은 아니다.

    ### 파일을 복사해 넣을 파티션을 언마운트 한다.
    umount /dev/hda4

    ### 파티션 이미지 만들기.
    dd if=/dev/hda4 of=/tmp/Image.raw

    이제 Image.raw를 가지고 여러분 CDROM을 구우면 된다.

    이보다 더 좋은 방법은, 아래에 내가 만든 Perl 스크립트에서 볼 수 있다. 혹시 이 스크립트를 Python 스크립트나 Python/TK 스크립트로 변환할 사람은?

 

ISO9660, Rock-Ridge 확장을 사용하는 설치 CDROM 만들기
(내가 진행하는 MILAS 프로젝트에서)

    Rock-Ridge 확장 포맷으로 ISO9660 형식 CDROM을 만드는 가장 큰 이유는 CDROM으로 부트할 수 있게 만드는 것이다. 부트 CDROM은 여러분의 시스템을 디스크 없는 워크스테이션으로 만들 때, 하드 드라이브를 고치는 CDROM를 만들 때, 그리고 그밖에 여러 가지로 매우 유용하다.

    이 섹션에서, 루프백 장치를 사용할 필요는 없다. 여러분은 어떤 파티션도 사용할 필요 없으며, 단지 컴퓨터 어딘가에 디렉토리를 만들어 두고, 그리고 “mkisofs” 프로그램만 있으면 된다. 이 방법은 아마 여러분이 CDROM에 사용할 이미지를 만드는 가장 손쉬운 예일 것이다.

    부트할 수 있는 CDROM을 만드는 열쇠는 “mkisofs”프로그램이다. 다음은 내가 사용하는 전형적인 명령이다:
    mkisofs -aJlL -r -o /tmp/Boot_Image/CDROM
    “/CDROM”은 여러분이 CDROM네 구워넣을 디렉토리이다. 부트 파일을 추가하려면:
    mkisofs -aJlL -r -b /tmp/Boot.image -o/tmp/Boot_Image /CDROM

    다음 섹션에서 우리는 여러분의 CDROM에 넣을 수 있는 부트 플로피 디스크를 만드는 방법에 대해 이야기할 것이다.

    여러분이 기억해야 할 키 포인트는 이 프로그램을 사용하려면 디렉토리가 필요하다는 것이다. 이미지를 생성할 때 빈 파티션을 굳이 찾아내려 하지 말고, 여분을 사용하면 된다.

 

컴퓨터에서 사용할 수 있는 부트-업 프로세스 설정하기

    라이브 파일시스템을 만드는 가장 어려운 부분은 중요한 파일들을 복사해 넣고 설정하는 것이다. 라이브 파일시스템은 여러분의 리눅스 파일시스템과 똑같은 구조로 만들면 된다. /usr 아래 자원들을 제외하면 다른 것들은 그리 중요하지는 않지만, 그래도 도움이 될 것이다. 여러분이 기억해야 하는 것은 /tmp 디렉토리에 램디스크를 마운트하고, /var가 /tmp/var를 가리키게 하고, /etc 디렉토리 아래 설정 파일들을 제대로 설정하는 것이다. 이 것은 이 기사 전체에서 다루는 것이기도 한다. 나는 아래에 소개한 Perl 스크립트로 이 작업들을 한다. 여러분이 CDROM에 구성한 라이브 파일시스템에 하드 드라이브나 NFS를 조합하려 한다면, 몇 가지 옵션을 덧붙여야 할 것이다.

    아래는 파일을 복사해 넣고 부트업 프로세스를 설정하는 예이다. 여러분이 만드는 이미지가 “/tmp/Boot_Image”라고 가정한다.
     

    cd /tmp/Boot_Image
    mkdir root
    mkdir mnt
    mkdir proc
    mkdir tmp
    mkdir home
    mkdir misc
    mkdir opt
    ln -s tmp/var var
    mkdir dev
    rsync -a /dev/* dev
    mkdir lib
    rsync -a /lib/* lib
    mkdir bin
    rsync -a /bin/* bin
    mkdir sbin
    rsync -a /sbin/* sbin
    mkdir usr
    mkdir etc
    rsync -a /etc/* etc
    mkdir boot
    rsync -a /boot/* boot

       

    이제, etc/inittab 파일을 열어 런레블을 “1”로 바꾸어 준다(single user mode):

    Change:
     

    id:5:initdefault:

 

    to
     

    id:1:initdefault:

     

    이제는, etc/fstab 파일을 열어 아래처럼 바꾼다:
     

    #### /dev/hdc는 CDROM이 연결된 장치 이름이다. 여러분에게 적당한 것으로 바꾼다.
    /dev/hdc    /                   ext2            defaults                      1 1
    /dev/fd0    /mnt/floppy    ext2            noauto,owner              0 0
    none         /proc             proc           defaults                       0 0
    none         /dev/pts         devpts        gid=5,mode=620          0 0

    #### 주의, 아래는 하드 드라이브에 만들어진 스왑 파티션을 사용하는 것이다.
    #### 아래 설정을 지우거나 여러분 시스템에 적당한 것으로 바꾼다.
    /dev/hda6              swap                         swap           defaults

       

    그리고, etc/rc.d/rc.local 파일을 열어 그 끝에 다음 명령들을 덧붙인다:

    mkfs -t ext2 /dev/ram0
    mount /dev/ram0 /tmp
    chmod 777 /tmp
    chmod +t /tmp

    이제 여러분은 램디스크를 최대로 설정하여 부트디스크를 만들어야 한다:

    ### 아래 명령은 부트디스크를 만든다. 플로피 디스크를 넣고,
    mkbootdisk `uname -r`
    ### 아래 명령은 플로피 디스크를 마운트할 디렉토리를 만든다.
    mkdir /mnt/floppy_test
    ### 플로피 디스크를 마운트한다.
    mount /dev/fd0 /mnt/floppy_test
    ### lilo.conf 파일을 열어 “ramdisk=35000”라는 줄을 넣는다.
    내 시스템에서 사용하는 lilo.conf 파일은 다음과 같다.
     

    boot=/dev/fd0
    timeout=100
    message=/boot/message
    prompt
    image=/vmlinuz-2.2.12-32
             label=linux

     

    ### /dev/hdc를 /dev/hdb나 /dev/hdd 등 여러분의 시스템에 맞게 바꾼다.
             root=/dev/hdc
             ramdisk=35000

    image=/vmlinuz-2.2.12-32
              label=rescue
              append=”load_ramdisk=2 prompt_
              ramdisk=1”
              root=/dev/fd0

    ### 이제는 플로피 드라이브에서 lilo 명령을 실행한다.
    lilo -r /mnt/floppy_test

    ### 그리고 플로피 디스크를 언마운트한다.
    umount /dev/fd0

    이제 여러분은 CDROM을 루트 파일시스템으로 사용하는 부트 플로피 디스크를 가지게 되었다.
    만약 여러분이 mkisofs 명령을 이용해서 플로피 디스크 이미지를 CDROM에 구우려 한다면, lilo.conf 파일을 다음과 같이 바꾼다:
     

    boot=/dev/hdc
    timeout=100
    message=/boot/message
    prompt
    image=/vmlinuz-2.2.12-32
            label=linux
    ### /dev/hdc를 /dev/hdb나 /dev/hdd 등 여러분의 시스템에 맞게 바꾼다.
            root=/dev/hdc
            ramdisk=35000

     

    ### 플로피 디스크를 언마운트 한 다음에, CDROM에 넣을 플로피 디스크 이미지를 만든다.
    dd if=/dev/fd0 of=/tmp/Boot.image

 

결론과 앞으로 계획하고 있는 기사

    나는 부트할 수 있는 CDROM들을 라이브 파일시스템에 좀더 손쉽게 만들고 싶었다. 이런 생각에서, 부트할 수 있는 CDROM을 사용하기 위한 방법을 소개하는 기사를 만들 것이다.

    1. 여러분의 하드 드라이브에 있는 운영체제 이미지를 넣어 설치 CDROM 굽기.
    2. 부트할 수 있는 CDROM과 하드 드라이브, 그리고 (또는) NFS를 어떻게 사용하는가.
    3. 내가 진행하고 있는 MILAS 프로젝트를 마무리 짓는다.
        MILAS 프로젝트는 내가 조립 컴퓨터를 판매하면서 좀더 설정하는 쉬운 방법이 필요해서
        시작했다. (그리고, 아마 언젠가 다시 시작할 것이다)
    4. 여러분의 컴퓨터에 실린 리눅스 버전에서 더 정확한 Perl 스크립트를 만든 다음 CDROM에
        넣는다. 나는 아마 결국 ISO9660포맷 CDROM을 사용하게 될 것이다.

    제대로 다듬어지지 못한 채 기사를 싣게 되어 여러분께 사과한다. 부트할 수 있는 CDROM을 만드는 것은 그리 쉽지 않은 일이었다. 나는 다른 이들이 이 기사를 읽고 나보다는 더 쉽게 작업하기를 바란다. 그리고, 다음 기사는 더 깔끔하게 만들 것이다.

    Mark Nielsen(mark@tcu-inc.com)은 컴퓨터 언더그라운드(http://www.tcu-inc.com/)와 ZING(ZING Is Not GNU: http://www.genericbooks.com)에서 일한다. 남는 시간에는, 리눅스 가제트에 실을 기사를 쓰고 ZING의 웹사이트를 개발한다.



[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=806


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저