Теперь у Вас есть ядро и сжатая корневая файловая система. Если Вы создаете загрузочный/корневой диск, проверьте их размеры и убедитесь, что они оба поместятся на одном диске. Если Вы делаете две дискеты загрузочную + корневую, проверьте, помещается ли корневая файловая система на одной дискете.
Вы должны решить, использовать ли 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 |
Сохраните этот файл как bdlilo.conf.
Вы теперь создайте маленькую файловую систему, которую мы будем называть файловой системой ядра, чтобы отличить ее от корневой файловой системы.
Сначала вычислите, насколько большой должна быть файловая система. Возьмите размер вашего ядра в блоках (размер выводимый ``ls -s KERNEL'') и добавьте 50. Пятьдесят блоков - пространство, приблизительно необходимое для inodes плюс другие файлы. Если хотите, можете вычислить это число точно, или используйте 50. Если вы создаете двухдисковый набор, Вы можете завысить необходимое пространство, так как первый диск все равно используется только для ядра. Назовем это число KERNEL_BLOCKS.
Поместите дискету в привод (для простоты, предположим /dev/fd0) и создайте на ней файловую систему ext2:
mke2fs -N 24 -m 0 /dev/fd0 KERNEL_BLOCKS |
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 |
cp /boot/boot.b /mnt/boot |
cp bdlilo.conf KERNEL /mnt |
lilo -v -C bdlilo.conf -r /mnt |
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, перенесите ядро на загрузочный диск командой dd:
% dd if=KERNEL of=/dev/fd0 bs=1k 353+1 records in 353+1 records out |
В заключение, установите дискету как корневое устройство, затем установите загрузку корневой файловой системы в режиме чтение-запись:
rdev /dev/fd0 /dev/fd0 rdev -R /dev/fd0 0 |
Внутри образа ядра есть слово ramdisk, которое, наряду с другими опциями, указывает расположение корневой файловой системы. Слово может быть считано и установлено посредством команды rdev и интерпретируется следующим образом:
Бит(ы) | Описание |
---|---|
0-10 | Смещение начала ramdisk, в 1024 байтовых блоках |
11-13 | не используется |
14 | Флаг указывающий, что нужно загружаться в ramdisk |
15 | Флаг, указывающий необходимость запроса подтверждения перед загрузкой корневой файловой системы |
Если бит 15 установлен, в процессе загрузки у Вас запросят поместить новую дискету в привод. Это необходимо для двухдискового загрузочного набора.
В зависимости от того, создается ли одиночная загрузочная дискета или набор из двух дискет ``загрузочная + корневая'', возможны два варианта:
Если Вы создаете один диск, сжатая корневая файловая система будет помещена сразу после ядра, так что смещением будет первый свободный блок (который должен быть такой же, как KERNEL_BLOCKS). Бит 14 должен быть 1, и бит 15 должен быть 0. Например, пусть Вы создаете одиночный диск, и корневая файловая система будет начинаться с блока 253 (десятичное число). Значение слова ramdisk должно быть 253 (десятичное) с битом 14 установленным в 1 и битом 15 установленным в 0. Для вычисления значения Вы можете просто сложить десятичные значения. 253 + (2^14) = 253 + 16384 = 16637. Если Вы не совсем поняли, откуда взялось это число, вставьте его в инженерный калькулятор и преобразуйте в двоичное.
Если Вы формируете двухдисковый набор, корневая файловая система начинается в блоке 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.
Последний шаг - перенос корневой файловой системы.
Если корневая файловая система будет помещена на диск с ядром, перенесите ее, используя dd с опцией seek, которая определяет, сколько блоков проскочить:
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS |
Если корневая файловая система будет помещена на второй диск, удалите первую дискету, вставьте вторую, затем перенесите на нее корневую файловую систему:
dd if=rootfs.gz of=/dev/fd0 bs=1k |
Поздравляю, Вы закончили!
Важно: Вы должны всегда проверять загрузочный диск перед тем, как отложить его в сторону до критической ситуации! Если он не загружается - читайте дальше.