The Linux Bootdisk HOWTO: Совмещение их вместе: Создание диска (ов).

Next Previous Contents

## 6. Совмещение их вместе: Создание диска (ов).

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

Вы должны решить, использовать LILO для загрузки или bootdisk ядро. Альтернатива - копировать ядро непосредственно на дискету и загружаться без LILO. Преимущество использования LILO - возможность указать некоторые параметры ядра, которые могут быть необходимы для инициализации аппаратных средств (проверьте файл /etc/lilo.conf в вашей системе. Если он существует и имеет строку ```append=...`'', Вам вероятно нужно это свойство. Неудобство использования LILO - усложнение создания загрузочного диска, и немного большее количество пространства. Вы должны установить маленькую отдельную файловую систему, которую мы назовем файловой системой ядра, куда Вы перенесете ядро и несколько других файлов необходимых LILO.

Если Вы собираетесь использовать LILO - читайте; если Вы собираетесь перемещать ядро непосредственно, пропустите до секции Без использования LILO.

## 6.1 Перенос ядра с 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 -l KERNEL`'' разделенный 1024 и округлите вверх) и добавьте 50. Пятьдесят блоков - приблизительное пространство, необходимое для inodes плюс другие файлы. Вы можете вычислить это число точно, если Вы хотите, или используете 50. Если вы создаете двух-дисковый набор, Вы можете также переоценить пространство, т.к первый диск используется только для ядра. Назовите это число `KERNEL_BLOCKS`.

Поместите дискету в привод (для простоты, которую мы примем /dev/fd0) и создайте ext2 файловую систему ядра на ней:

            mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS

```-i 8192`'' означает, что мы хотим один inode на 8192 байта. Затем, примонтируйте файловую систему, удалите `lost+found` каталог, и создайте `dev` и `boot` каталоги для LILO:

            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` каталоге.

            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 слова.

## 6.2 Перенос ядра без 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` команде.

## 6.3 Установка ramdisk слова.

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

            bits  0-10:     Смещение начала ramdisk, в 1024 байтовых блоках
            bits 11-13:     не используется
            bit     14:     Флаг указывающий, что ramdisk будет загружаться
            bit     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.

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

            rdev -r KERNEL_OR_FLOPPY_DRIVE  VALUE

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

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

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

- если корневая файловая система будет помещена в диск с ядром, перенесите ее, используя `dd` с опцией `seek`, которая определяет сколько проскочить блоков:

              dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS

- если корневая файловая система будет помещена на второй диск, удалите первую дискету, вставьте вторую, затем перенесите корневую файловую систему:

              dd if=rootfs.gz of=/dev/fd0 bs=1k

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

Next Previous Contents