Прежде чем приступить к экспериментам по установке Linux в качестве второй ОС, очень рекомендую принять некоторые меры предосторожности. Дело в том, что придется выполнить переразбиение диска, изменить загрузочные записи и подредактировать загрузочные и конфигурационные файлы. Все эти действия далеко не безобидны. Их результатом может стать то, что компьютер вообще перестанет загружаться. Поэтому, во-первых, необходимо изготовить загрузочную или «спасательную» дискету для старой системы. Во-вторых, стоит сохранить всю ценную информацию, наработанную в старой системе. И, в-третьих, подготовить комплект установочных файлов для старой системы. И еще один полезный совет: если что-то пошло не так, не пугайтесь.

После того, как необходимые меры предосторожности приняты, необходимо решить, каким образом будет осуществляться многовариантная загрузка, и подготовить диск к установке нескольких операционных систем.

Разделы на диске и процесс загрузки

Жесткие диски — это блочные устройства и минимальной адресуемой единицей дискового пространства является сектор размером 512 байт. Адрес сектора задается путем указания номера цилиндра, номера считывающей головки (или дорожки) и порядкового номера сектора на дорожке. Поэтому диски часто характеризуются совокупностью трех показателей, называемых «геометрией» диска: число цилиндров/число дорожек в цилиндре/число секторов на дорожке (или C/H/S от первых букв соответствующих английских терминов: «цилиндр» — cylinder, «головка» — head, «сектор» — sector). Диск с геометрией C/H/S имеет емкость CXHXSX512 байт.

Физические диски в компьютерах на платформе Intel принято разбивать на разделы. Повелось это из-за того, что первые версии MS-DOS не могли обеспечить доступ к дискам большой емкости; тогда и придумали разбиение дисков на разделы. Для этого в нулевой сектор первой дорожки на нулевом цилиндре стали записывать таблицу разбиения диска на разделы (partition table). Каждый раздел может трактоваться как отдельный физический диск. В частности, в разные разделы могут быть установлены разные операционные системы. Таблица разделов содержит 4 записи по 16 байт для 4 разделов, которые называют первичными. Каждая запись имеет следующую структуру:

struct partition { 
char active; 
/* 0x80: раздел активный
 (загрузочный), 0: не активный */
char begin[3]; 
/* геометрия первого сектора */
char type; /* тип раздела 
(например, 83 — LINUX_NATIVE) */
char end[3]; 
/* геометрия последнего сектора */
int start; /* номер начального сектора; 
нумерация начинается с 0 */
int length; /* число секторов
 в разделе */
};

DOS использует поля begin и end таблицы разбиения диска и функции прерывания 13 BIOS (Int 13h) для доступа к диску и поэтому не может использовать диски емкостью более 8,4 Гбайт, а разделы из-за ограничений файловой системы FAT16 не могут быть более 2,1 Гбайт. Linux использует только поля start и length таблицы и поддерживает разделы, содержащие до 2 в степени 32 секторов, поэтому размер раздела может достигать 2 Тбайт.

Поскольку в главной загрузочной записи (MBR) только четыре строки для задания разделов, то число первичных разделов на диске ограничено: их может быть не более четырех. Когда стало ясно, что и этого мало, были изобретены логические разделы. Для этого один из первичных разделов объявляется «расширенным» и в нем создаются «логические разделы». Расширенные разделы сами по себе не используются и могут лишь хранить логические разделы. Первый сектор расширенного раздела хранит таблицу разделов с четырьмя входами: один используется для логического раздела, другой для еще одного расширенного раздела, а два не используются. Каждый расширенный раздел имеет свою таблицу разбиения, в которой, как и в первичном расширенном разделе, заняты только две строки, задающие один логический и один расширенный раздел. Таким образом, образуется цепочка из таблиц разделов, где первая описывает три основных раздела, а каждая следующая — один логический раздел и местоположение следующей таблицы.

Число логических разделов в принципе не ограничено, поскольку каждый логический раздел может содержать таблицу разделов и вложенные логические разделы. Однако реально ограничения все же есть; так, Linux может работать не более чем с 15 разделами на SCSI-дисках и не более чем с 63 разделами на IDE-дисках. Расширенный раздел как на физическом диске, так и в расширенном разделе вложенного расширенного раздела (предыдущего уровня) может быть только один: ни одна из существующих программ разбиения дисков не умеет создавать более одного расширенного раздела.

В Linux физический диск доступен по имени устройства: /dev/hda, /dev/hdb, /dev/sda и т.п. Первичные разделы обозначаются дополнительной цифрой в имени устройства: /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda4; логические же разделы доступны по именам /dev/hda5, /dev/hda6 и т.д. Имена /dev/hda3 и /dev/hda4 могут быть пропущены, если третий и четвертый первичные разделы не были созданы, тогда сразу после /dev/hda2 пойдет /dev/hda5 (логический раздел в расширенном разделе /dev/hda2), а далее нумерация идет последовательно.

В Windows логические разделы получают однобуквенные имена, начиная с последнего задействованного имени первичного раздела. Если, скажем, есть один жесткий диск с двумя простыми первичными разделами (C: и D:) и одним расширенным разделом, в котором созданы два логических раздела, то эти логические разделы будут поименованы E: и F:. Впрочем, в Windows NT и

Windows 2000 с помощью диспетчера дисков разделам можно присвоить другие буквенные имена.

Процесс загрузки Windows

При включении компьютера прежде всего запускается программа тестирования аппаратной части POST (Power On Self Test). После ее завершения выдается прерывание Int 19h, задача которого — попытаться найти загрузочное устройство. Поиск производится в порядке, заданном в Setup BIOS и осуществляется путем опроса нулевых секторов соответствующих устройств. Если диск загрузочный, то в его нулевом секторе находится главная загрузочная запись, MBR. Последние два байта MBR — это «магическое число», служащее признаком того, что данный сектор и есть MBR, а, следовательно, диск является загрузочным. Помимо «магического числа» типичная MBR содержит таблицу разделов диска и программу — первичный загрузчик размером 446 байт.

Но вернемся к описанию процесса загрузки. Прерывание 19h BIOS загружает из MBR и запускает первичный загрузчик, задача которого — найти в таблице разделов активный раздел и загрузить вторичный загрузчик, который располагается начиная с первого логического сектора активного раздела. Обратим внимание на слово «начиная». Дело в том, что вторичный загрузчик в разных системах имеет разную длину. В разделе, сформатированном под файловую систему FAT, вторичный загрузчик занимает один сектор (512 байт). В разделе, сформатированном под NTFS, вторичный загрузчик занимает уже несколько секторов. Вторичный загрузчик загружает первый слой программ, необходимых для запуска операционной системы. Так, в случае MS-DOS это IO.SYS, затем

MSDOS.SYS и потом SYSINIT модуля IO.SYS.

Для других операционных систем от Microsoft процесс загрузки происходит аналогичным образом.

  1. Windows 95 загружается так же, как и DOS, но заменяет IO.SYS и MSDOS.SYS своими файлами. Файлы DOS сохраняются в файлах IO.DOS и MSDOS.DOS соответственно. Когда же выбирается загрузка сохраненного DOS, Windows 95 переименовывает свои файлы в файлы с расширением *.W40 и восстанавливает первоначальные имена системных файлов DOS. Процесс продолжается с загрузки IO.SYS. Таким образом, загрузочные сектора DOS и Windows 95 одинаковы.
  2. Windows NT 4 использует главную загрузочную запись DOS, но заменяет загрузочную запись активного раздела таким образом, что вместо IO.SYS загружается NTLDR. Это уже мощная программа, многое способная сделать. В частности, она находит файл boot.ini и, если значение параметра timeout больше нуля, предлагает меню загрузки. Каждая строка секции [operating systems] файла boot.ini определяет один из вариантов загрузки и строится по шаблону: адрес_вторичного_загрузчика=«название_варианта».

Адресом вторичного загрузчика может являться указание на конкретный раздел диска или на файл загрузчика. Вот пример файла boot.ini:

[operating systems]
multi(0)disk(0)rdisk(0)partition(3)
 WINNT
 =«Windows NT Workstation 4.00 RUS»
multi(0)disk(0)rdisk(0)partition(3)
 WINNT
 =«Windows NT Workstation 4.00 RUS
 [VGA mode]» /basevideo /sos 
C:=«Microsoft Windows» 
C:BOOTSECT.LNX=«Linux»

В строке, соответствующей Microsoft Windows, указан просто диск «C:», так как имя загрузочного файла берется по умолчанию: bootsect.dos. Файл грузится в память и загрузка продолжается так, как если бы загрузочная запись раздела была загружена программным кодом из главной загрузочной записи. Для загрузки других систем нужно добавить в boot.ini строки, содержащие ссылки на другие загрузочные файлы. При выборе такой строки будет загружаться соответствующая операционная система. В приведенном примере так организуется загрузка Linux. Для этого в файле C:BOOTSECT.LNX должно быть предварительно записано содержимое загрузочной записи LILO.

Проблемы с большими дисками

В MS-DOS и ранних версиях Windows доступ к дискам был организован через прерывание 13 BIOS. При этом использовалась адресация секторов на диске на основе указания номеров цилиндра, головки и сектора на дорожке (нумерацию физических цилиндров и дорожек принято начинать с нуля, а сектора на дорожке с единицы). Однако практически головок было не более 16, а число секторов на дорожке не более 63, и, хотя для указания цилиндра использовалось 10 разрядов, BIOS не мог работать с дисками емкостью более 1024X63X16X512 = 528 Мбайт. Чтобы преодолеть это ограничение, применяются разные приемы. Так, Extended CHS или Large disk support (его иногда называют просто Large) использует незанятые разряды номера головки и номера сектора на дорожке для увеличения числа адресуемых цилиндров. Но на данный момент и DOS, и Windows 95 не поддерживают 256 считывающих головок, поэтому можно использовать «фальшивую геометрию диска» только в 1024 цилиндра, 128 считывающих головок и 63 сектора/дорожку. Преобразование Extended CHS в реальный CHS-адрес (который может иметь до 8192 цилиндров) осуществляет BIOS. Это позволяет работать с дисками емкостью до 8192X16X63X512 = 4227858432 байт или 4,2 Гбайт.

Однако плотность записи, число пластин и дорожек все увеличивались, изобретались другие способы увеличения емкости дисков. В результате формула C/H/S уже перестала правильно отражать «геометрию диска», а старые версии BIOS перестали обеспечивать доступ ко всему дисковому пространству. Тогда придумали еще один прием для работы с большими дисками через Int 13h — линейную адресацию блоков (Linear Block Addressing — LBA). Не вдаваясь в подробности, можно сказать, что все сектора на диске нумеруются последовательно, начиная с нулевого сектора на первой дорожке нулевого цилиндра. Вместо CHS-адреса каждый сектор получает логический адрес, которым выступает просто его порядковый номер в общем массиве секторов. Нумерация логических секторов начинается с нуля, причем нулевой сектор содержит MBR. В Setup BIOS поддержка преобразования линейного номера в CHS-адрес обозначается как «поддержка LBA». Таким образом, в новых версиях BIOS обычно имеется выбор из трех вариантов: Large, LBA и Normal (последнее означает, что преобразование не производится).

Но и в режиме LBA обращение к физическому диску все равно осуществляется через функции Int 13h, которые используют нотацию C/H/S. В силу этого возникает ограничение на возможный объем диска: BIOS не может адресовать все сектора на дисках объемом более 8,5 Гбайт. Надо заметить, что это ограничение относится только к дискам с интерфейсом IDE. В контроллерах SCSI-дисков номер сектора переводится в команды SCSI, а далее сам диск находит нужную позицию, поэтому такого ограничения на объем диска не возникает.

Linux и последние версии Windows при работе с дисками уже не используют прерывание 13 BIOS, а работают с собственными драйверами дисков. Но прежде чем система сможет использовать такой драйвер, она должна как минимум его загрузить, поэтому на этапе начальной загрузки любая система вынуждена опираться на BIOS. Это вызывает ограничения на размещение многих систем за пределами 8 Гбайт: они не способны оттуда загружаться, хотя после успешной загрузки могут работать с дисками гораздо большего объема. Чтобы понять, как можно обойти эти ограничения, рассмотрим процесс загрузки ОС Linux.

Загрузчик LILO

Загрузчик LILO (LInux LOader), созданный Вернером Альмесбергером, может загружать ядро Linux как с дискеты, так и с жесткого диска. Он позволяет также загружать другие операционные системы: PC/MS-DOS, DR DOS, OS/2, Windows 95, Windows 98, Windows NT, 386BSD, SCO Unix, UnixWare и т.п. На этапе загрузки может быть задан выбор до 16 разных операционных систем.

LILO — это комплект из нескольких программ: собственно загрузчика, программ, используемых для установки и настройки загрузчика, и служебных файлов.

  • Программа /sbin/lilo, служащая для изменения конфигурации самого загрузчика. Ее необходимо перезапускать каждый раз после внесения изменений в ядро или в конфигурационный файл LILO.
  • Служебные файлы, необходимые LILO. Обычно располагаются в каталоге /boot. Самые важные из них — собственно загрузчик, файл /boot/map, в котором указывается местоположение ядра, и файл конфигурации LILO /etc/lilo.conf.
  • Собственно загрузчик, т.е. та часть LILO, которая первой загружается по прерыванию BIOS и заводит на компьютер ядро Linux или загрузочный сектор другой ОС. Загрузчик тоже состоит из двух частей: первая записывается в загрузочный сектор и служит для загрузки второй части, которая значительно больше по размеру. Обе части обычно хранятся на диске в файле /boot/boot.b.

Надо иметь в виду, что формат загрузочного сектора, создаваемого LILO, отличается от формата MBR в MBR; поэтому, если записать загрузочный сектор LILO в MBR, то ранее использовавшиеся операционные системы от Microsoft перестанут загружаться. Загрузочный сектор LILO организован так, чтобы его можно было использовать как загрузочный сектор раздела; в частности, в нем есть место для таблицы разделов. Загрузочный сектор LILO при установке системы можно разместить в следующих местах:

  • загрузочный сектор дискеты в формате Linux (/dev/fd0, ...);
  • MBR первого жесткого диска (/dev/hda, /dev/sda,...);
  • загрузочный сектор первичного раздела файловой системы Linux на первом жестком диске (/dev/hda1, /dev/hda2, ...);
  • загрузочный сектор логического раздела в расширенном разделе первого жесткого диска (/dev/hda5, ...). Большинство программ типа fdisk не предполагают, что можно загружаться из расширенного раздела и отказываются объявлять его активным, поэтому в состав LILO включена специальная программа activate, позволяющая обойти это ограничение. Программа fdisk с опцией -b или с переменной BOOT поддерживает возможность активизации расширенного раздела.

Укажем также места, где размещать загрузочный сектор LILO нельзя:

  • загрузочный сектор дискеты или первичного раздела, отформатированных в других файловых системах;
  • раздел подкачки Linux;
  • второй жесткий диск.
Рис. 1. Структура главной загрузочной записи раздела

Из сказанного следует, что должны быть доступны через BIOS, а, значит, должны находиться в пределах первых 1024 цилиндров на первом жестком диске: загрузочный сектор LILO; файлы /boot/boot.b, /boot/map, /etc/lilo.conf; все версии ядра (в том числе те, которые будут устанавливаться впоследствии); загрузочные сектора других операционных систем, которые будут загружаться через LILO; выдаваемые при загрузке сообщения (если таковые определены).

Выбор загрузчика

Прежде чем приступать к установке второй операционной системы, надо решить, с помощью каких средств будет организован выбор ОС и ее загрузка. Вообще говоря, существуют отдельные программы, предназначенные только для организации загрузки, например, программа System Commander или многовариантный загрузчик из пакета PartitionMagic компании Power Quest. Для Linux тоже разработаны несколько загрузчиков, скажем, GRUB или ASP Loader. Несколько загрузчиков можно найти в каталоге public/ftp/ pub/Linux/system/boot/ loaders. Однако искать отдельную программу нет необходимости, поскольку в комплект любого дистрибутива Linux входит загрузчик LILO, способный обеспечить выбор ОС. Если же на компьютере установлена Windows NT или Windows 2000, то эту функцию может взять на себя NT Loader. По сравнению с LILO загрузчик NT Loader имеет, по крайней мере, два преимущества: сохраняется вся старая конфигурация, а кроме того, можно установить Linux на диск, который не может быть загрузочным для этой ОС, например, на второй диск на втором контроллере.

Если на компьютере была установлена только Windows 95/98 и не было Windows NT или Windows 2000, значит OS Loader не установлен. Единственной известной мне альтернативой LILO является использование загрузчика Loadlin.exe, также поставляемого вместе с дистрибутивом Linux. Почему-то во многих HOWTO утверждается, что использовать LILO не следует, если активный раздел форматирован в системе FAT32, хотя толкового объяснения этому я не нашел. Моя собственная попытка загружать Linux через NT Loader, установленный в разделе FAT32, окончилась неудачей, а вот loadlin.exe с задачей справилась с успехом.

Таким образом, организовать многовариантную загрузку можно с помощью уже имеющихся стандартных средств. Ими и ограничимся. Рассмотрим три варианта организации загрузки: с помощью LILO, с помощью NT Loader и с помощью loadlin.exe.

Подготовка разделов на диске

Разбивать диск на разделы необходимо, потому что Windows и Linux используют разные способы организации хранения информации на диске и разные способы организации доступа. Рекомендации относительно того, каким образом поделить диск на разделы, давать довольно сложно, так как это во многом зависит от конфигурации дисков и от прихоти хозяина диска. Но все же попробую сформулировать несколько советов. При этом диски и разделы я буду именовать так, как это принято в Linux.

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

  1. В Linux оперативная память и пространство подкачки складываются, образуя общую виртуальную память. Например, если емкость оперативной памяти 8 Mбайт RAM, а под пространство подкачки отведено 12 Mбайт, то размер виртуальной памяти будет равен 20 Mбайт.
  2. Для работы Linux требуется, по крайней мере, 16 Mбайт виртуальной памяти.
  3. В Linux размер одного раздела подкачки не может превышать 128 Mбайт. Если требуется больше виртуальной памяти, надо создать два раздела подкачки или использовать файл подкачки.
  4. Рассчитывая емкость пространства подкачки, следует иметь в виду, что слишком большой его размер может оказаться бесполезным. На компьютере с 16 Mбайт памяти со стандартной конфигурацией Linux и типичном наборе программ вполне достаточно 48 Mбайт пространства подкачки, а для минимальной конфигурации ОС можно вообще обойтись без него.

Теперь оценим размер основных разделов. Если объем диска не превышает 8,4 Гбайт (число цилиндров не более 1024), то диск надо просто разделить пропорционально тому, сколько места требуется для установки каждой из операционных систем. По моему опыту, для нормальной работы с Windows 95/98, Windows NT и Linux вполне достаточно выделить разделы размером 800-1000 Мбайт, а для Windows 2000 надо оставить не менее 1500.

Рассмотрим теперь случай диска с числом цилиндров более 1024. Программы-загрузчики должны располагаться в пределах первых 1024 цилиндров. Между прочим, NT Loader не обязательно должен располагаться в разделе NTFS, да и вообще не в том разделе, где расположены остальные файлы ОС. Для Linux также можно расположить каталог /boot в «нижних» цилиндрах, а остальное — где угодно. Поэтому мои предложения сводятся к следующему:

  • загрузочные части всех систем от Microsoft поместить в первый первичный раздел диска, отформатированный в системе FAT16 (в DOS);
  • следующий первичный раздел выделить для корневого каталога Linux (/), размер которого положить равным примерно 1 Мбайт;
  • выделить раздел подкачки для Linux, а все остальное дисковое пространство сделать расширенным разделом;
  • в расширенном разделе создать логические разделы для каждой из устанавливаемых операционных систем (для Linux можно создать отдельные разделы для каталогов /home и /usr, причем в /home располагаются файлы пользователей, а в /usr устанавливаются все приложения).

Если имеется только Windiws 95 с FAT16, то можно оставить ее в первом разделе. Если же была установлена Windows NT или FAT32, то наличие небольшого раздела с FAT16 будет не лишним. Во-первых, даже в случае любого краха системы всегда можно загрузиться с загрузочной дискеты DOS и хотя бы увидеть, что жесткий диск работоспособен. Во-вторых, файловая система FAT16 видна в любой ОС, так что этот раздел может служить для обмена файлами между разными системами. Но делать этот раздел большим не стоит (FAT16 очень нерационально использует дисковое пространство); достаточно 256 или 512 Мбайт.

Спланировав разделы, приступим к разбиению диска. Во всех ОС имеется тот или иной вариант программы fdisk, предназначенной для создания разделов. Ничего другого, может быть, и не потребовалось бы, если бы речь шла о разбиении чистого диска. Однако мы рассматриваем случай, когда какая-то ОС на диске уже имеется, и надо переразбить диск, не потеряв информации на нем. fdisk для таких операций не подходит.

Лучше всего производить переразбиение с помощью программы PartitionMagic компании Power Quest. Эта программа не только создает новый раздел на свободном месте на диске, но и произвольным образом перемещает существующие разделы. Кроме того, даже для DOS-варианта этой программы предусмотрен графический интерфейс. Программа не работает под Windows NT, однако в ее дистрибутиве есть возможность изготовить две дискеты, служащие для загрузки компьютера в режиме DOS и последующего запуска программы. Эти дискеты позволяют переразбить и диск, на котором установлена NT.

NT и Linux: загрузчик NT Loader

Теперь обратимся непосредственно к процессу установки Linux. Будем предполагать, что Windows NT/Windows 2000 установлена в разделе /dev/hda2.

  1. Изготовим загрузочные дискеты для загрузки и восстановления NT. Для создания загрузочной дискеты достаточно скопировать на отформатированную дискету файлы ntldr, ntdetect.com и boot.ini из корневого каталога загрузочного диска. Программу создания дискеты аварийного восстановления для Windows 2000 можно запустить из панели управления (пункт «Архивация данных»), а в Windows NT 4.0 найдите ее с помощью поиска в справочной системе («Создание диска аварийного восстановления»).
  2. С помощью программы PartitionMagic освободим часть дискового пространства и создадим на свободном месте раздел типа ext2 (файловая система Linux) и раздел подкачки.
  3. Проведем процедуру инсталляции Linux. В процессе установки необходимо изготовить загрузочную дискету. Этот диск понадобится нам на одном из следующих этапов. Кроме того, в последующем можно будет просто каждый раз, когда надо загрузить Linux, использовать эту дискету. Это тоже вариант загрузки, тем более что, в отличие от DOS, после загрузки система о дискете уже не вспоминает. Установим LILO не в главный загрузочный сектор диска, а в первый сектор того раздела, который отведен для Linux. Для определенности предположим, что Linux устанавливается в первый сектор раздела hda3. В принципе, если установить LILO в MBR, то и это не смертельно. Конечный результат (загрузка через NT Loader) может быть получен и в этом случае, но усилий потребуется больше, так как формат главного загрузочного сектора, создаваемого LILO и Windows, различен. Поэтому, если поставить LILO в MBR, придется потом восстанавливать MBR от Windows.
  4. После завершения инсталляции загрузим Linux с помощью загрузочной дискеты.
  5. Скопируем загрузочный сектор Linux в файл; он понадобится для того, чтобы загрузчик Windows NT мог запускать Linux. Для этого надо смонтировать чистую дискету, например:
    [root]# mount -t vfat
     /dev/fda1 /mnt/floppy
    перейти в каталог /mnt/floppy
    [root]# cd /mnt/floppy

    и выполнить команду:
    [root]# dd if=/dev/hda3 of=
    /mnt/floppy/bootsect
    .lnx bs=512 count=1,

    которая позволяет записать содержимое загрузочного сектора диска /dev/hda3 в файл /mnt/floppy/bootsect.lnx.

    Если раздел hda1 сформатирован в системе FAT, можно сразу создать файл bootsect.lnx в корневом каталоге диска C:.

  6. Далее необходимо перезагрузиться, чтобы запустить Windows NT, для чего в Linux следует выполнить команду:
    [root]# shutdown -h now

    Поскольку главная загрузочная запись не была изменена, должна загрузиться NT. После завершения загрузки необходимо перенести файл /mnt/floppy/bootsect.lnx в корневой каталог диска C:, точнее, в корневой каталог того раздела, с которого загружается NT. В зависимости от того, как устанавливалась NT, это может быть как раздел FAT16, так и раздел NTFS. Признаком нужного раздела является наличие в нем файлов ntldr и boot.ini (эти файлы могут быть скрытыми). Файлу bootsect.lnx можно присвоить атрибут read-only.

  7. После завершения загрузки NT найдем файл boot.ini в корневом каталоге и добавим в него строчку:
    C:ootsect.lnx=«LINUX» 
  8. Осталось перезапустить компьютер еще раз, причем при загрузке уже будет возможность выбора. Если выбрать пункт Linux, будет запущен LILO, который и загрузит Linux.

Отдельно рассмотрим случай, когда по ошибке или намеренно LILO был установлен в MBR. В этом случае загрузочная запись Windows NT будет затерта, сделав невозможной загрузку NT. Если есть намерение пользоваться загрузчиком OS Loader от NT, а не LILO, последовательность действий несколько изменяется: вместо шага 6 необходимо проделать приведенную ниже последовательность действий.

  • Загрузить Windows NT/2000 с загрузочных дискет. При этом необходимо выбрать в меню загрузчика пункт Recover, а затем — режим Command mode. При запросе следует зарегистрироваться с учетной записью администратора системы.
  • Восстановить главную загрузочную запись диска, например, при помощи команды fdisk /mbr. (У меня это получалось, хотя в некоторых статьях и утверждается, что восстановить таким образом MBR удается не всегда.) В Windows 2000 имеются специальные команды fixboot и fixmbr; они запускаются из консоли восстановления. Если выполнить их обе в указанном порядке, Windows 2000 вновь будет загружаться нормально.
  • Перезапустить компьютер с загрузочной дискеты Linux и зарегистрироваться в системе с полномочиями root.
  • Ввести команду cd /etc и открыть файл lilo.conf. В начале файла есть ссылка на загрузочный раздел по умолчанию, например, /dev/hda.
  • С помощью любого редактора следует изменить это значение на те диск и раздел, куда была установлена Linux. Если она установлена в раздел /dev/hdc1, именно это и следует записать, т.е. поменять /dev/hda на /dev/hdc1. Если вы не помните, куда именно установлена Linux, найдите переменную image файла /etc/lilo.conf: в ней хранится нужное значение.
  • Выполнить команду /etc/lilo (без аргументов) для записи загрузчика в раздел /dev/hdc1. В ответ будет выдано предупреждение о том, что раздел не является первым на диске; именно это и нужно, чтобы загрузочная запись Windows 2000 осталась в целости и сохранности.

После этого следует выполнить шаги 6-8 приведенного ранее алгоритма.

Заметим, что эта сложная последовательность операций с двумя лишними перезагрузками потребовалась только для того, чтобы перенести загрузочный сектор Linux из MBR в первый сектор раздела, отведенного для Linux, и восстановить MBR от Windows.

Использование загрузчика LILO

Приведем сценарий загрузки с использованием LILO.

  1. Освободим часть дискового пространства и создадим на свободном месте раздел типа ext2 и раздел подкачки.
  2. Проведем процедуру инсталляции Linux, следуя рекомендациям из дистрибутива. При инсталляции установим LILO в MBR. (LILO можно расположить и в загрузочной записи раздела Linux, однако в таком случае в MBR должно быть нечто, способное его загрузить, скажем, стандартный загрузчик MS-DOS или Windows. Впрочем, необходимости применения такого варианта я не вижу).
  3. На следующем шаге нужно заставить LILO загружать операционную систему по выбору. LILO конфигурируется с помощью файла /etc/lilo.conf и команды /etc/lilo. Эта команда устанавливает (или переустанавливает) LILO.
  4. После того, как откорректирован файл /etc/lilo.conf, необходимо выполнить команду /etc/lilo, чтобы изменения вступили в силу. Эта команда устанавливает загрузчик системы, который будет активизирован во время следующей загрузки машины. Прежде, чем запускать /etc/lilo для модификации загрузочных процедур, следует выполнить эту команду с параметром -t. При этом будет выполнена вся процедура инсталляции загрузчика, кроме изменения map-файла, записи модифицированного загрузочного сектора и изменения таблицы разбиения диска, т.е. выполнен тест нового варианта. Если добавить опцию -v, это позволит убедиться в том, насколько сделанные изменения разумны.

    Когда /sbin/lilo перезаписывает загрузочный сектор, он автоматически сохраняет старое содержимое в файле. Название файла по умолчанию — /boot/boot.NNNN, где NNNN соответствует номеру устройства, например, 0300 — это /dev/hda, 0800 — /dev/sda и т.д. Если такой файл уже существует, он не перезаписывается. Можно задать альтернативный файл для сохранения загрузочного сектора. Файл /boot/ boot.NNNN можно использовать для восстановления старого содержимого загрузочного сектора, если более простой метод его восстановления недоступен. Соответствующие команды таковы:

    [root:~#] dd if=/boot/boot.0300
     of=/dev/hda bs=446 count=1

    или

    [root:~#] dd if=/boot/boot.0800
     of=/dev/sda bs=446 count=1

    (bs равно 446, потому что восстанавливается только программа-загрузчик, не трогая таблицы разбиения диска).

    Копию загрузочного сектора лучше иметь на дискете. В этом случае можно восстановить старую загрузочную запись MBR следующей командой (предполагается, что дискета смонтирована в каталог /mnt):

    [root:~#] dd if=/mnt/MBR
     of=/dev/hda bs=446 count=1

    Восстановить MBR при необходимости можно также командой /sbin/lilo с опцией -u. Надо только иметь в виду, что эта команда выполняется корректно при условии, что каталог LILO (а именно /boot) не изменялся со времени инсталляции.

  5. Перезагрузить компьютер.

Установка других операционных систем после Linux

При инсталляции MS-DOS и Windows 95/98 ее стандартный загрузчик автоматически записывается в MBR, а признак активности в таблице разделов ставится на раздел MS-DOS (Windows). Этот загрузчик умеет только передавать управление на первый сектор активного раздела. Поэтому, если вначале будет установлена Linux, а затем Windows или MS-DOS, то Linux перестанет загружаться. Говорят, что Windows NT и Windows 2000 загрузчик из MBR не трогают (правда, я этот факт не проверял).

С проблемами, возникающими при установке после Linux другой ОС обычно можно справиться, загрузившись в Linux с помощью загрузочной дискеты, откорректировав конфигурационный файл LILO (добавив в него вызов новой ОС) и запустив /sbin/lilo (если LILO установлен в MBR), либо сделав активным раздел LILO (если он установлен в первичный раздел).

Перенос каталога /boot в раздел DOS

Последние версии ядра Linux поддерживают возможность размещения файлов, необходимых на этапе загрузки, в файловой системе MS-DOS (или UM-DOS). Поскольку в большинстве случаев разделы DOS занимают как раз те области диска, где связанные с BIOS ограничения не действуют, это позволяет решить многие проблемы больших дисков, возникающие в тех случаях, когда раздел, отведенный для Linux, не может быть использован для размещения в нем каталога /boot. Для того чтобы реализовать такой вариант загрузки, раздел DOS монтируется в режиме чтение/запись, создается каталог (например, /dos/linux), в который перемещаются все файлы из каталога /boot и образы ядер Linux, каталог /boot заменяется символической ссылкой на каталог /dos/linux, новое местоположение каталога /boot указывается в файле /etc/lilo.conf, и, наконец, запускается /sbin/lilo.

Загрузка с помощью loadlin.exe

Не только загрузочные файлы и образы ядра могут располагаться в разделе DOS, но и вообще вся загрузка Linux может быть организована из DOS. Для этого используется программа LOADLIN.EXE, разработанная Хансом Лерменом. В частности, она используется в дистрибутиве Red Hat для организации процедур установки с компакт-диска.

LOADLIN предоставляет самый безопасный способ загрузки с жесткого диска, если на нем есть загрузочный (активный) раздел DOS или Windows. Этот вариант организации загрузки Linux можно особенно рекомендовать начинающим пользователям. Большинство новичков слишком нетерпеливы, для того чтобы прочитать очень хорошее, но длинное описание загрузчика LILO. Программа LOADLIN не требует какой-либо установки, надо только разместить ее саму и образы ядра на одном из дисков, доступных в DOS. С помощью LOADLIN можно загрузить систему с компакт-диска или сетевого диска, не используя загрузочной дискеты. Это делает LOADLIN великолепным инструментом на случай, когда необходимо загрузить Linux после сбоя в работе загрузчика LILO.

Рассмотрим последовательность действий по установке системы с помощью LOADLIN.

  1. Выделить раздел для Linux.
  2. Установить Linux в выделенный раздел (LILO следует установить в первый сектор раздела Linux, чтобы не перезаписать MBR и не потерять возможность загружаться в Windows).
  3. Загрузить Linux (если не получается по-другому, то используйте загрузочную дискету). Смонтировать раздел DOS (будем считать, что в Linux раздел DOS именуется как /dev/hda1, а раздел Linux — как /dev/hda3):
    [root]# mount -t vfat
     /dev/hda1 /mnt/C

    Создать каталог /mnt/C/loadlin и разархивировать в него содержимое файла LODLIN16.TGZ из дистрибутива Linux. Поместить туда же файл с образом ядра из каталога /boot. Найти нужный файл образа ядра можно в файле /etc/lilo.conf: нужное имя справа от знака равенства содержится в строке «image=...». У меня, например, полное имя этого файла — vmlinuz-2.2.16-3bc, но я при копировании в каталог /mnt/C/loadlin переименовал его в vmlinuz; это имя и буду использовать в примере.

  4. Перезагрузить компьютер в DOS. Если есть возможность загрузить непосредственно DOS, это надо сделать сразу, а если нет, то следует загрузить Windows, при появлении сообщения «Загрузка Windows 95» нажав клавишу F8 и выбрав вариант «Command prompt only». Если вы не успели нажать F8, можно дождаться завершения загрузки Windows 95, после чего в меню «Пуск» выбрать пункт «Завершение работы» и в нем — «Перезагрузить компьютер в режиме эмуляции DOS».

После выхода в режим DOS перейти в каталог C:LOADLIN и выполнить команды:

C:LOADLIN> LOADLIN
 vmlinuz /dev/hda3 ro vga=ask

или, при желании загрузить ядро с установкой диска в оперативной памяти:

C:LOADLIN> LOADLIN
 vmlinuz /dev/ram rw initrd=diskimage

Чтобы избавиться от необходимости каждый раз при загрузке вводить команду loadlin со всеми параметрами, можно создать bat-файл или прописать вызов loadlin в файл config.sys. Надо только учесть, что для некоторых графических адаптеров Linux может выдавать после загрузки «пустой» экран, если перед его загрузкой отображался логотип Windows. Поэтому в файле C:MSDOS.SYS надо указать:

BootGUI=0
Logo=0

Это позволит избежать загрузки графической оболочки, и выбор пункта меню Windows 95 будет вызывать переход к обычной командной строке DOS.

Полезные источники
После установки Linux можно найти много документации в каталогах /usr/doc/lilo-x.y (здесь x.y — версия LILO) и /usr/doc/HOWTO.
1.  Werner Almesberger, LILO — Generic Boot Loader for Linux. Version 21, User?s Guide, 4 December 1998.
2. Andries Brouwer, Large Disk HOWTO. v2.0, 22 January 1999. 
3. Kristan Koehntopp, Linux Partition HOWTO. v2.4, 3 November 1997.
4. Stein Gjoen, HOWTO: Multi Disk System Tuning. v0.17, 3 February 1998.
5. Tom Fawcett, The Linux Bootdisk HOWTO, v3.3, November 1998.
6. Cameron Spitzer, Alessandro Rubini, LILO mini-HOWTO. v2.02, 16 August 1998.
7. Bernd Reichert, NT OS Loader + Linux mini-HOWTO. v1.11, 2 September 1997.
8. Mike Harlan, The Linux «Linux-DOS-Win95-OS2» mini-HOWTO. v1.3.1, 11 November 1997.
9. Jonathan Katz, Linux+Win95-HOWTO. October 26, 1996. Имеется перевод на русский язык.
10. Renzo Zanelli, Win95+WinNT+Linux multiboot using LILO mini-HOWTO. v1.0, 26 March 1998.
11. Chris Fischer, The Loadlin+Win95 mini-HOWTO. v1.4.6, 13 March 1999.
12. Paul Gortmaker, The Linux BootPrompt-HOWTO. v1.14, 1 February 1998.
13. А. Московских, Как поставить много операционных систем на одном компьютере.
14 Джон Сэвилл, Двойная загрузка Windows 2000 и Linux с помощью NT Loader.

Виктор Костромин (linux-ve.chat.ru) — независимый эксперт.


Пример выполнения sfdisk в среде Linux

Программа sfdisk в Linux показывает всю цепочку:

[root]# sfdisk -l -x /dev/hda
Disk /dev/hda: 784 cylinders,
 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes,
 blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 189 190- 1526143+ 6 FAT16
/dev/hda2 190 783 594 4771305 5 Extended
/dev/hda3 0 - 0 0 0 Empty
/dev/hda4 0 - 0 0 0 Empty
/dev/hda5 190+ 380 191- 1534176 6 FAT16
- 381 783 403 3237097+ 5 Extended
- 190 189 0 0 0 Empty
- 190 189 0 0 0 Empty
/dev/hda6 381+ 783 403- 3237066 7 HPFS /NTFS  
- 381 380 0 0 0 Empty
- 381 380 0 0 0 Empty
- 381 380 0 0 0 Empty

 


Пример файла конфигурации LILO

Будем считать, что устройство /dev/hda1 является разделом с DOS/Windows, а раздел /dev/hda2 содержит Linux. В таком случае файл /etc/lilo.conf может иметь примерно такой вид:

boot = /dev/hda2
compact
delay = 50
# message = /boot/bootmesg.txt
root = current
image = /boot/vmlinuz-2.2.11-4bc
label = linux
read-only
other = /dev/hda1
table = /dev/hda
label = dos 

Строка boot указывает загрузочное устройство. Строка compact включает режим сжатия map-файла, содержащего характеристики загрузочных ядер; это ускоряет начальную загрузку. С помощью команды message можно заставить загрузчик выдавать при загрузке произвольное сообщение. Начиная со строки image, идут секции конфигурационного файла, соответствующие разным операционным системам. В каждой такой секции имеется строка label. В этой строке записывается имя, которое вводится в ответ на приглашение LILO и служит для выбора пользователем загружаемой ОС. Если имя не введено по истечении времени, заданного строкой delay (задается в десятых долях секунды), будет загружена ОС, выбираемая по умолчанию. В данном случае по умолчанию будет загружаться Linux, поскольку соответствующая ей секция стоит первой в файле. Можно указать загружаемую по умолчанию систему с помощью строки вида default=dos (т.е. используя метку из соответствующей строки label).

Строка TABLE= содержит указание на устройство, на котором находится таблица разбиения диска. LILO не передает информацию о разбиении загружаемой операционной системе, если эта переменная не задана. (Некоторые ОС имеют другие средства для определения того, из какого раздела они загружены.) Необходимо выполнить команду /sbin/lilo, если ссылка на таблицу разбиения, задаваемую переменной TABLE, изменена.

Если задать строку (секцию) other = /dev/hda1 в файле /etc/lilo.conf, то в корневом каталоге диска /dev/hda1 (диска C:) должен находиться вторичный загрузчик, например, NT Loader. Если нет желания видеть меню загрузки NT Loader, следует установить значение timeout в файле boot.ini равным 0 (задается в секундах).

Если из LILO предполагается загружать Windows 95/98, в /etc/lilo.conf надо добавить следующие строки:

other = /boot/bootsect.dos
label = win

где файл bootsect.dos берется из корневого каталога того диска, на котором стоит NT Loader.