다음 이전 차례

4. 설치

첫째, initrd 파일 시스템을 위한 디렉토리가 "보통의" 루트 파일 시스템에 생성되어야 한다. 예를 들면

# mkdir /initrd

이름은 상관없다. 보다 자세한 것은 pivot_root(2) 맨 페이지에서 찾아볼 수 있다.

만약 루트 파일 시스템이 부트 과정에서 생성된다면 (즉, 만약 설치 플로피를 제작하고 있다면), 루트 파일 시스템 생성 과정은 /initrd 디렉토리를 생성해야 한다.

만약 initrd 가 어떤 경우에 마운트되지 않는다면, 그것의 내용은 다음의 장치가 만들어졌을 경우엔 계속해서 접근 가능하다 (이것이 devfs 를 사용중일 경우엔 작동하지 않음에 유의):

# mknod /dev/initrd b 1 250

# chmod 400 /dev/initrd

둘째, 커널은 RAM 디스크 지원과 초기 RAM 디스크 지원이 활성화되어 컴파일 되어야 한다. 또한, 적어도 initrd 로부터 프로그램을 실행하기 위한 모든 요소들(예, 실행 가능한 형식과 파일 시스템) 이 컴파일 되어 커널 안으로 들어가야 한다.

셋째, 램 디스크 이미지를 만들어야 한다. 이것은 블럭 장치에 파일 시스템을 만들고, 여기에 필요한 만큼 파일을 복사한 후, 블럭 장치의 내용을 initrd 파일 에 추가하면 된다. 최근의 커널에서는, 최소한 세 종류의 장치가 다음에 적적할다.

루프백 장치를 이용하는 방법을 설명하도록 하겠다.

  1. 루프백 블럭 장치가 커널 안에 설정되었는지 확인한다.

  2. 적절한 크기의 빈 파일 시스템을 생성한다. 예를 들면,

    # dd if=/dev/zero of=initrd bs=300k count=1

    # mke2fs -F -m0 initrd

    (만약 공간이 중요하다면, Ext2 대신에 Minix FS 를 사용할수도 있다.)

  3. 파일 시스템을 마운트한다. 예를 들면,

    # mount -t ext2 -o loop initrd /mnt

  4. 콘솔 장치를 생성한다(devfs를 사용한다면 꼭 필요하지는 않으나, 어쨌든 문제 를 문제를 일으키지는 않는다) :

    # mkdir /mnt/dev

    # mknod /mnt/dev/console c 5 1

  5. initdrd 환경을 적절하게 사용하기 위해 필요한파일들을 복사한다. 가장 중요한 파일인 /linuxrc 를 잊지 말라. /linuxrc 의 퍼미션은 x (실행) 을 포함해야 함에 주의하라.

  6. initrd 환경이 할 수 있는 정확한 작동은 리부팅 하지 않고도 다음의 명령을 이용하여 자주 테스트 할 수 있다.

    # chroot /mnt /linuxrc

    물론 이것은 일반적인 시스템 상태를 방해하지 않는 initrd에만 한정된다 (예, 네트웍 인터페이스를 재설정, 마운트된 디바이스에 덮어쓰기, 이미 실행중인 데몬을 다시 띄우기 등에 의해서. 그러나 그러한 chroot 된 initrd 환경에서도 pivot_root 를 사용하다는 것에 주목하라.)

  7. 파일 시스템을 언마운트한다.

    # umount /mnt

  8. 이제 initrd 는 파일 "initrd" 안에 있다. 필요하다면 압축할수도 있다.

    # gzip -9 initrd

    initrd 를 실험하기 위해서, 복구용 플로피 디스켓과 /linuxrc 에서 /bin/sh 로 심볼릭 링크만 추가하면 된다. 이 대신에, 작은 initrd 를 생성하기 위해서, 실험적인 newlib 환경 [2] 를 사용할 수도 있다.

  9. 마지막으로, 커널을 부트하고 initrd 를 읽어들인다. 대부분 모든 리눅스 부트 로더는 initrd 를 지원한다. 부트 과정이 구식의 메커니즘과 여전히 호환되므로, 다음의 부트 명령행 파라미터들이 주어져야만 한다:

    만약 devfs 를 사용한다면,

    root=/dev/ram0 init=/linuxrc rw

    사용하지 않는다면(rw 는 initrd 파일 시스템에 쓰기를 할때만 필요하다)

    root=/dev/rd/0 init=/linuxrc rw

    LOADLIN 의 경우에는, 단지 이것만 실행하면 된다.

    LOADLIN < kernel > initrd= <disk_image>

    예) LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0

    init=/linuxrc rw

    LILO 의 경우, /etc/lilo.conf 안에 전체 섹션 이나 혹은 해당하는 섹션에 INITRD=<path> 옵션을 추가한다. 그리고 APPEND 를 이용하여 옵션을 넘겨준다. 예를 들면,

    image = /bzImage

    initrd = /boot/initrd.gz

    append = "root=/dev/ram0 init=/linuxrc rw"

    그리고 /sbin/lilo 를 실행시킨다.

    다른 부트 로더는 해당하는 문서를 참조하라.

    이제 부팅을 할 수 있고 initrd 를 사용하는 것을 즐길 수 있다.


다음 이전 차례