Собираем все вместе: Создание диска (ов).

Теперь у Вас есть ядро и сжатая корневая файловая система. Если Вы создаете загрузочный/корневой диск, проверьте их размеры и убедитесь, что они оба поместятся на одном диске. Если Вы делаете две дискеты загрузочную + корневую, проверьте, помещается ли корневая файловая система на одной дискете.

Вы должны решить, использовать ли LILO для загрузки ядра с загрузочного диска. Или же копировать ядро непосредственно на дискету и загружаться без LILO. Преимущество использования LILO - возможность указать некоторые параметры ядра, которые могут быть необходимы для инициализации аппаратных средств (проверьте в вашей системе файл /etc/lilo.conf, если он существует и содержит строку ``append=...'', то, скорее всего, Вам нужно это свойство). Недостатками LILO являются: усложнение создания загрузочного диска, и немного большее занимаемое пространство. Вы должны установить отдельную маленькую файловую систему, которую мы назовем файловой системой ядра, куда Вы перенесете ядро и несколько других необходимых 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. Вероятно, Вы захотите добавить к этому файлу строку append=... из файла /etc/lilo.conf на вашем жестком диске.

Сохраните этот файл как bdlilo.conf.

Вы теперь создайте маленькую файловую систему, которую мы будем называть файловой системой ядра, чтобы отличить ее от корневой файловой системы.

Сначала вычислите, насколько большой должна быть файловая система. Возьмите размер вашего ядра в блоках (размер выводимый ``ls -s KERNEL'') и добавьте 50. Пятьдесят блоков - пространство, приблизительно необходимое для inodes плюс другие файлы. Если хотите, можете вычислить это число точно, или используйте 50. Если вы создаете двухдисковый набор, Вы можете завысить необходимое пространство, так как первый диск все равно используется только для ядра. Назовем это число KERNEL_BLOCKS.

Поместите дискету в привод (для простоты, предположим /dev/fd0) и создайте на ней файловую систему ext2:
        mke2fs -N 24 -m 0 /dev/fd0 KERNEL_BLOCKS
``-N 24'' определяет 24 inode, все что вам нужно на этой файловой системе. Затем, примонтируйте файловую систему, удалите каталог lost+found, и создайте для LILO каталоги dev и boot:
        mount -o dev/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.
        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           

Не волнуйтесь, если размеры ваших файлов немного отличаются.

Теперь оставьте диск в приводе, и идите к секции Разд. Установка слова ramdisk>.

Перенос ядра без LILO

Если Вы не используете LILO, перенесите ядро на загрузочный диск командой dd:
        % dd if=KERNEL of=/dev/fd0 bs=1k
        353+1 records in
        353+1 records out
В этом примере, dd записала 353 полных записи + 1 частичную запись, так что ядро занимает первые 354 блока дискеты. Назовем это число KERNEL_BLOCKS, и запомним его для использования в следующей секции.

В заключение, установите дискету как корневое устройство, затем установите загрузку корневой файловой системы в режиме чтение-запись:
        rdev /dev/fd0 /dev/fd0
        rdev -R /dev/fd0 0
Будьте внимательны - используйте прописную букву -R во второй rdev команде.

Установка слова ramdisk

Внутри образа ядра есть слово ramdisk, которое, наряду с другими опциями, указывает расположение корневой файловой системы. Слово может быть считано и установлено посредством команды rdev и интерпретируется следующим образом:

Бит(ы)Описание
0-10Смещение начала ramdisk, в 1024 байтовых блоках
11-13не используется
14Флаг указывающий, что нужно загружаться в ramdisk
15Флаг, указывающий необходимость запроса подтверждения перед загрузкой корневой файловой системы

Если бит 15 установлен, в процессе загрузки у Вас запросят поместить новую дискету в привод. Это необходимо для двухдискового загрузочного набора.

В зависимости от того, создается ли одиночная загрузочная дискета или набор из двух дискет ``загрузочная + корневая'', возможны два варианта:

  1. Если Вы создаете один диск, сжатая корневая файловая система будет помещена сразу после ядра, так что смещением будет первый свободный блок (который должен быть такой же, как KERNEL_BLOCKS). Бит 14 должен быть 1, и бит 15 должен быть 0. Например, пусть Вы создаете одиночный диск, и корневая файловая система будет начинаться с блока 253 (десятичное число). Значение слова ramdisk должно быть 253 (десятичное) с битом 14 установленным в 1 и битом 15 установленным в 0. Для вычисления значения Вы можете просто сложить десятичные значения. 253 + (2^14) = 253 + 16384 = 16637. Если Вы не совсем поняли, откуда взялось это число, вставьте его в инженерный калькулятор и преобразуйте в двоичное.

  2. Если Вы формируете двухдисковый набор, корневая файловая система начинается в блоке 0 на втором диске, так что смещение будет нулевое. Бит 14 должен быть 1, и бит 15 должен быть 1. В этом случае десятичное значение будет 2^14 + 2^15 = 49152.

После тщательно вычисления значения слова ramdisk, установите его с помощью rdev -r. Используйте десятичное значение. Если Вы использовали LILO, аргументом rdev должен быть - путь где смонтировано ядро, например /mnt/vmlinuz; если Вы скопировали ядро с помощью dd, взамен используйте имя флоппи-устройства (такое как /dev/fd0).
        rdev -r KERNEL_OR_FLOPPY_DRIVE  VALUE

Если Вы использовали LILO, размонтируйте сейчас дискету.

Важно: Не верьте тому, что man страница rdev/ramsize говорит о размере ramdisk. Эта man страница устарела. Начиная с ядра 2.0 или около этого, слово ramdisk больше не определяет размер ramdisk; вместо этого слово интерпретируется в соответствии с таблицей в начале секции Разд. Установка слова ramdisk>. Более детальное объяснение смотрите в файле документации ramdisk.txt или http://www.linuxhq.com/kernel/v2.4/doc/ramdisk.txt.html.

Перенос корневой файловой системы.

Последний шаг - перенос корневой файловой системы.

Поздравляю, Вы закончили!

Важно: Вы должны всегда проверять загрузочный диск перед тем, как отложить его в сторону до критической ситуации! Если он не загружается - читайте дальше.