당신은 이제 커널과 압축 루트 파일시스템을 가지고 있습니다. 한장짜리 boot/root 디스크를 만들겠다면 커널과 압축 루트 파일시스템을 합친 용량이 한 장의 디스켓에 다 들어가는지 확인해 보아야 합니다. 만일 두장 짜리 boot+root 디스크를 만든다면 루트 파일시스템이 한장의 디스크에 다 들어가는지 확인해 보아야 합니다.
또한, 부트디스크의 커널을 부트시키는데 있어 부트로더의 일종인 LILO 를 사용할 지 여부를 결정해야만 합니다. 다른 방법으로는 LILO 를 쓰지 않고 커널을 직접 디스켓에 카피해서 그 디스켓으로 부팅하는 방법도 있습니다. LILO 를 썼을 때의 장점은 LILO 를 쓰면 하드웨어를 어떻게 초기화시킬지에 대한 파리메터를 부팅시에 커널에 알려줄 수 있다는 점입니다(당신 시스템의 /etc/lilo.conf 파일을 체크해 보십시오. 만일 이 파일이 있고 그 안에 ''append=...'' 하는 라인이 있다면 당신은 이미 이 기능을 쓰고있는 것입니다). LILO 를 썼을 때의 단점은 부트디스크가 보다 복잡해지고 용량을 조금 더 차지한다는 점입니다. LILO 를 쓰면 소위 커널 파일시스템이라 불리우는 별도의 작은 파일 시스템을 만들어 거기에다 커널과 그 밖에 LILO 가 필요로 하는 몇몇 파일들을 담아두어야만 합니다.
LILO 를 샤용하시겠다면 계속 읽어나가시고 직접 커널을 전송하는 방법을 택하시겠다면 LILO 없이 커널만 담기 부분으로 건너뛰시기 바랍니다.
맨 먼저 할 일은 LILO 를 위한 작은 설정파일을 만드는 것입니다. 다음과 비슷한 내용이 됩니다.
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Bootdisk
root =/dev/fd0
이들 파라메터에 대해서는 LILO 사용자 설명서를 참조하십시오. 또한 당신의 하드디스크의 /etc/lilo.conf 파일에 적혀있는 append = ... 라인을 보고 위의 화일 끝에 그대로 적어주어야만 할 것입니다.
이 파일을 bdlilo.conf 라는 이름으로 저장하십시오.
이제 커널 파일시스템이라 불리우는 작은 파일시스템을 만들어야만 합니다. 이것은 루트 파일시스템과는 별개의 것입니다.
먼저, 파일시스템의 크기를 얼마로 해야할지 알아내야 합니다. 만들어낸 커널의 블록 단위 크기가 얼마인지 확인하고(ls -l KERNEL" 로 출력된 값을 1024로 나누어서 올림한 값입니다) 거기에 50 을 더합니다. 50 블록은 inode 와 그 밖의 몇 가지 파일들에 필요한 대략적인 크기입니다. 원하신다면 정확히 계산해 볼 수도 있습니다. 아니면 그냥 50 을 사용하세요. 두장의 디스켓으로 하신다면 이 크기를 좀 넉넉히 잡아도 좋습니다. 왜냐하면 첫번째 디스크는 어쨌든 커널전용으로만 사용되기 때문입니다. 계산한 숫자를 KERNEL_BLOCKS 라고 부르기로 합시다.
플로피 디스켓을 드라이브에 넣고 그 위에 ext2 커널 파일시스템을 만듭시다(편의상 드라이브의 이름은 /dev/fd0라 가정합니다).
mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS
“ -i 8192 ” 는 8192 바이트 당 하나의 inode 를 할당합니다. 그 다음, 이 파일시스템을 마운트하고 lost+found 디렉토리를 삭제한 후 LILO 를 위한 dev 와 boot 디렉토리를 만듭니다.
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/{boot,dev}
그 다음, 디바이스 /dev/null 과 /dev/fd0 를 만듭니다. 디바이스 넘버를 찾는 대신 그냥 당신의 리눅스 시스템로부터 -R 옵션을 주어 복사해오면 됩니다.
cp -R /dev/{null,fd0} /mnt/dev
LILO 는 그 부트로더인 boot.b 의 복사본을 필요로 하는데, 이 boot.b 는 당신의 리눅스 시스템에서 가져오면 됩니다. 보통 이 파일은 /boot 디렉토리에 있습니다.
cp /boot/boot.b /mnt/boot
마지막으로 앞 절에서 만든 LILO 설정파일을 커널과 함께 플로피로 복사해 넣습니다. 두 가지 모두 루트디렉토리에 들어갑니다.
cp bdlilo.conf KERNEL /mnt
이제 LILO 가 필요로 하는 모든 것들이 커널 파일시스템에 들어갔으므로 준비는 모두 끝났습니다. LILO 의 -r 플래그는 부트로더를 다른 루트에 설치할 때 사용됩니다.
lilo -v -C bdlilo.conf -r /mnt
LILO가 아무 에러도 없이 제대로 동작했다면 커널 파일시스템은 다음과 비슷한 모습이 될 것입니다.
total 361
1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf
1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/
1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/
358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz
boot:
total 8
4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b
4 -rw------- 1 root root 3584 Jan 10 07:23 map
dev:
total 0
0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0
0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
당신이 만든 것과는 파일 크기가 약간 틀릴 수도 있으니 걱정하지 마십시요.
이제 드라이브의 디스켓은 그대로 두고 램디스크 워드의 설정 편으로 가시기 바랍니다.
LILO 를 사용하지 않겠다면 dd 명령을 써서 커널을 부트디스크에 담아야 합니다.
% dd if=KERNEL of=/dev/fd0 bs=1k
353+1 records in
353+1 records out
위의 예에서 dd 는 353 개의 완전한 레코드와 1개의 부분레코드를 써넣었습니다. 따라서 커널은 디스켓 앞부분의 354 블록들을 점유하게 됩니다. 이 숫자를 KERNEL_BLOCKS 라고 부르겠으니 기억해 두십시오. 다음 절에서 사용할 것입니다.
마지막으로 루트디바이스를 디스켓 자체로 설정한 후 루트가 read/write 로 로드되도록 설정해 둡니다.
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
두 번째 줄의 rdev 명령에서 대문자 -R 을 써야함에 주의하세요.
커널 이미지 내에는 램디스크 워드라는 것이 있습니다. 이것은 다른 옵션들과 더불어서 루트 파일시스템을 어디에서 찾을 것인지를 설정합니다. 이 워드는 rdev 명령을 써서 확인 및 설정이 가능합니다. 그 내용은 다음과 같이 해석합니다.
bits 0-10: 램디스크가 시작하는 오프셋. 1024 byte 블록 내의 오프셋입니다 bits 11-13: 사용하지 않습니다 bit 14: 램디스크로 로딩될지를 나타내는 플래그 bit 15: 루트 파일시스템을 로딩하기 전에 한번 멈출지를 결정하는 플래그
만약 15번 비트가 설정되어 있으면 부팅시에 새로운 디스켓을 집어넣으라는 메시지를 받게 될 것입니다. 이 기능은 두 개의 디스크로 부팅할 경우 필요합니다.
한 개의 boot/root 디스켓을 만들 것인지 아니면 두개의 "boot+root" 디스켓 세트를 만들 것인지에 따라 다음 두 가지 경우가 생길 수 있습니다.
KERNEL_BLOCKS 값과 동일)이 됩니다. 비트 14 는 1 로, 비트 15 는 0 으로 설정해야 합니다.
예를 들어, 당신이 한장짜리 디스크를 만드는데 루트 파일시스템이 253 블록(십진수입니다)에서 시작한다고 칩시다. 램디스크 워드의 값은 253(십진수)에다 비트 14 는 1, 비트 15 는 0 으로 세팅한 값입니다. 이 램디스크 워드 값을 구하려면 단순히 모두 십진수로 변환해 더하면 됩니다. 253 + (2^14) = 253 + 16384 = 16637 입니다. 이 값이 어디서 온 건지 아무래도 이해를 못시겠다면 전자계산기를 써서 이 값을 이진수로 변환해 보시면 이해가 가실 것입니다.
램디스크 워드에 해당하는 값을 주의깊게 계산한 다음, 그 값대로 rdev -r 명령으로 설정합니다. 십진수를 사용해야 함에 주의하십시요. LILO를 사용하겠다면 마운트될 커널의 경로, 예를 들면 /mnt/vmlinuz 같은 것을 rdev 명령어에 파라메터로 써주어야 합니다. LILO 를 쓰지 않고 커널을 직접 dd 명령으로 복사했다면 대신 플로피 디바이스의 이름을 써줍니다 (예를들면 /dev/fd0).
rdev -r KERNEL_OR_FLOPPY_DRIVE VALUE
LILO를 사용한다면 이제 디스켓을 언마운트 시키십시오.
마지막 단계는 루트 파일시스템을 플로피 디스켓에 담는 것입니다.
dd 명령에 seek 옵션을 주십시오. 이 옵션은 얼마만큼의 블록을 건너뛰어야 하는지를 설정합니다.
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
dd if=rootfs.gz of=/dev/fd0 bs=1k
축하합니다. 이제 끝났습니다! 응급상황용으로 따로 보관해 두기전에 먼저 이 부트디스크가 제대로 동작하는지 항상 확인해보시기 바랍니다! 만일 부트에 실패하셨다면 이 문서를 계속 읽어나가십시오.