Использование Lilo, когда BIOS не видит загрузить корневой раздел

У меня на работе в системе установлен IDE-диск размером 1Гб. BIOS может видеть только первые 504 Мб этого диска. (Здесь Мб означает 2**10 байт, а не 10**6.) Поэтому у меня MS-DOS на 350 Мб разделе /dev/hda1 и мой корневой раздел Linux размером 120 Мб - /dev/hda2.

MS-DOS не смог установиться правильно, когда диск был чистый. У Novell DOS 7 была та же проблема. К счастью для меня, "Аксессуары от IBM" были неполными - забыли положить дискету с программой "OnTrack" в коробку с винчестером. Винчестер должен был поставляться с продуктом под названием "OnTrack Disk Manager." Если у вас только MSDOS, я думаю, вам он понадобится.

Поэтому я создал таблицу разделов при помощи команды fdisk в Linux-е. MSDOS-6.2 отказался от инсталляции в /dev/hda1. Он сказал что-то типа "Эта версия MS-DOS только для новых установок, а на вашем компьютере уже есть MS-DOS, поэтому получите версию обновления (upgrade release) от вашего дилера." А на самом деле диск был новый.

Какая неудача! Поэтому я снова запустил fdisk в Linux-е снова и удалил раздел 1. Удовлетворенная этим MS-DOS 6.2 создала такой же в точности раздел, который я только что удалил и туда себя установила. MS-DOS 6.2 также записала свой MBR на диск, но он не загружался.

К счастью, у меня было ядро Slackware на флоппи (созданное программой установки дистрибутива Slackware), поэтому я загрузил Linux и перезаписал Lilo поверх сломанного MBR MS-DOS-а. И все заработало. Вот файл /etc/lilo.conf, который я использовал:

boot = /dev/hda
map = /lilo-map
delay = 100
ramdisk = 0             # Отключить электронный диск (ramdisk) в ядре Slackware
timeout = 100
prompt
disk = /dev/hda         # BIOS видит только первые 500 Мб.
   bios = 0x80          # выбрать первый IDE.
   sectors = 63         # возьмите количество секторов из руководства по диску.
   heads = 16
   cylinders = 2100
image = /vmlinuz
  append = "hd=2100,16,63"
  root = /dev/hda2
  label = linux
  read-only
  vga = extended
other = /dev/hda1
  label = msdos
  table = /dev/hda
  loader = /boot/chain.b

После того, как я это все установил, я выяснил, что раздел, содержащий файлы zImage, boot.b, map, chain.b и файлы сообщений, может иметь файловую систему msdos, если только она не испорчена "Stacker"-ом или "Doublespace"-ом. Поэтому мой раздел DOS на /dev/hda1 мог стать размером 500 Мб.

Я также выяснил, что система "OnTrack" записала бы таблицу разделов немного в другое место, чем обычно, и, возможно, для совместимости изменила IDE-драйвер Linux-а. Но установка этого "OnTrack" сделала бы невозможной загрузку со стандартного ядра, входящего в поставку Slackware. Кстати, потом IBM прислал мне дискету с "OnTrack". Я позвонил в службу поддержки OnTrack. Они сказали мне, что Linux - плохая система, потому что не использует BIOS. Я выкинул их дискету.