Загрузка Линукс из загрузочного меню НТ

  Автор: © Pradeep Padala
Перевод: © Павел Ступин (Кобальт)


 

Зачем нужна статья о Линуксе и загрузочном меню НТ? Ведь существуют специальные руководства, с пошаговыми инструкциями, правильно? Да, но, к сожалению, в этих руководствах есть далеко не все, чтобы нам хотелось там видеть. Эти руководства ориентированы на тех, кто только начинает изучение Линукс, и у них это получается достаточно хорошо - все очень понятно. Однако, когда приходится столкнуться с какой-то неординарной проблемой - эти руководства становятся бесполезными. Данная статья призвана заполнить эти пробелы.

Такая неординарная проблема возникла у меня, когда я слегка потерял рассудок, решив, что было бы неплохо иметь один единственный загрузчик, который бы загружал все, вместо того, чтобы пользоваться двумя: LILO и NT boot manager. Встала дилемма: какой загрузчик выбрать? Я остановился на NT boot manager, потому что, когда мы устанавливаем LILO и выбираем в нем при загрузке NT, все равно появляется меню NT, что чертовски раздражает: дважды отвечать на вопрос о том, что загружать - это уже слишком. Итак, я выбрал следующую стратегию: удаляем LILO и используем NT boot loader для загрузки всех операционных систем, которые у меня есть. Хорошо, но как это сделать? Я решил начать с изучения документации (HOWTOs). Руководство HOWTO NT OS Loader + Linux mini-HOWTO дает общее представление о процессе. К сожалению мой /dev/brain не смог уловить суть. В результате, моя первая попытка закончилась тем, что система отказалась загружаться вообще. После трех дней напряженного работы, суть дела начала проясняться.

Вот что я проделал.

 

NT Boot Loader.

NT Boot Loader загружает образ операционной системы, читая информацию из файла инициализации boot.ini. Взгляните на него. Он выглядит примерно так:

[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos

Эта строка говорит о том, какую операционную систему с какой партиции загружать. То есть берутся первые 512 байтов информации, необходимой для загрузки соответствующей операционной системы. И как использовать вот это для загрузки Линукс? Очень просто! Просто в файле boot.ini нужно указать NT boot manager'у те заветные 512 байтов загрузочного сектора Линукса.Нужно внести в него следующие изменения:

[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\boot.lnx="Redhat Linux 6.2"

В этой строке boot.lnx является тем файлом, который содержит в себе те необходимые 512 байтов. Но ведь нужно где-то достать эти 512 байтов. Как это сделать? В уже упомянутом HOWTO есть хороший пример того, как это можно сделать. Итак, нам нужны первые 512 байтов загрузочной партиции Линукса, которые бы сказали NT, что нужно згружать именно Линукс. Для этого мы создаем "тренировочный" lilo.conf, даем его LILO и говорим LILO установить загрузочный сектор в начало Линукс-партици. Затем вычленяем оттуда первые 512 байт, сохраняем в файл и даем его NT. Потом, устанавливаем LILO в главную загрузочную запись и устанавливаем WinNT как ОС, загружаемую по умолчанию. Мы создаем lilo.conf, где указываем NT как загружаемую по умолчанию и затем устанавливаем этот файл.

 

Приступим к делу.

Сначала я бы хотел рассказать о той конфигурации, при которой осуществлялись все манипуляции. Я установил Red Hat, приняв при инсталляции опции, назначенные по умолчанию. Red Hat установил LILO в главную загрузочную запись и модифицировал его в соответствии с параметрами моей системы (то есть учитывая то, какие другие операционные системы были установлены - NT, например). В данном случае, у меня была только NT. Когда я перезагрузился после инсталляции, то LILO предложид на выбор две опции: Linux и DOS. при выборе DOS, я переходил в NT boot manager. Итак, что же мы путаемся сделать? Мы хотим, чтобы LILO загружал по умолчанию NT boot manager, а в меню последего нам нужна возможность выбора Линукса.

Начинаем. Сначала загрузите Линукс. Создайте "тренировочный" (dummy) lilo.conf, например, таким способом: скопируйте lilo.conf в lilo.dummy, затем отредактируйте lilo.dummy, например, vi. В результате должно получиться примерно такое:

# lilo.dummy file
 boot = /dev/hda3
 # На моей машине Линукс находится на /dev/hda3
 # Сделайте соответствующие изменения (в зависимости от вашей конфигурации)      
 timeout=0  # Приравниваем время ожидания к нулю 
 vga = normal           
 read-only 
 default=linux
 image = /boot/vmlinuz
 label = linux
 root = /dev/hda3

Затем запустите LILO, используя lilo.dummy как аргумент. Это установит загрузочный сектор Линукс на /dev/hda3

sbin/lilo -C lilo.dummy

Вычленяем первые 512 байтов:
dd if=/dev/hda3 of=boot.lnx bs=512 count=1 

Затем копируем файл boot.lnx на диск c:\. Если диск с:\ смонтирован как /win/c, тогда копируем это так:

cp boot.lnx /win/c


или же монтируем с:\ и затем копируем:

mount /dev/hda1 /win/c
cp boot.lnx /win/c

Потом, изменяем boot.ini следующим образом:

[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\boot.lnx="Redhat Linux 6.2"

 

Установка LILO в MBR (главную загрузочную запись).

Просто измените файл lilo.conf так, чтобы WinNT загружалась по умолчанию без задержки, и установите LILO в MBR.

 boot = /dev/hda # Устанавливаем в MBR        
 timeout=0
 vga = normal
 read-only
 default=win # NT - по умолчанию
 image = /boot/vmlinuz           
 # Эту секцию можно удалить, так как теперь мы не пользуемся LILO для загрузки Линукса
 label = linux           
 root = /dev/hda3
 other = /dev/hda1  
 label = win

Затем снова перезaпустите LILO. Перед перезагрузкой, убедитесь, что у вас есть загрузочный диск. Можно использовать установочный диск Red Hat. Также прочитайте раздел данной статьи "Ловушки" (там еть информация о том, как использовать загрузочный диск). Или, вы можете сами создать загрузочный диск командой:

mkbootdisk,

Обратитесь к Bootdisk-HOWTO за подробностями.

Теперь перезагружайтесь и смотрите на то, какие чудеса происходят.

Вам этого мало? Я знаю, что не дает вам покоя - вы хотите удалить LILO полностью. Так сделайте это! Раздобудьте DOS-дискету, на которой есть fdisk и загрузитесь с этой дискеты. Затем запустите 'fdisk /mbr", чтобы перезаписать главную загрузочную запись... Я, честно говоря, не понимаю, что происходит при использовании этой опции. Если у кого-то есть соображения на этот счет, пожалуйста, напишите мне.

 

Ловушки.

  1. Запомните, что после каждого изменения ядра или файла lilo.conf, вам придется повторить весь процесс сначала, сделать новую копию boot.lnx и "поделиться" ей с NT.
  2. Если вы допустили какую-то ошибку и не можете загрузить Линукс, тогда загрузитесь с загрузочного диска и переустановите LILO:

    (Можно использовать установочный диск Red Hat в качестве загрузочного. При появлении меню установки, введите 'rescue' и нажмите 'Enter'.)

     

    • Загрузитесь с загрузочного диска
    • Примонтируйте Линукс-партицию: mount /dev/hda3 /mnt
    • Измените корневой каталог: chroot /mnt
    • Измените lilo.conf:

       boot = /dev/hda       
       timeout=500        
       prompt        
       vga = normal        
       read-only        
       default=linux        
       image = /boot/vmlinuz            
       label = linux            
       root = /dev/hda3        
       other = /dev/hda1            
       label = win     
      
    • Установите LILO: /sbin/lilo
    • Осуществите синхронизацию: sync
    • Отмонтируйте /dev/hda3: umount /mnt
    • Перезагрузите систему: /sbin/reboot

 


Copyright © 2000, Pradeep Padala.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 61 of Linux Gazette, January 2001

Вернуться на главную страницу