2003 г
Инсталляция ОС Linux на компьютер с Windows
В. Костромин
Настоящий текст является главой 2 из книги В.Костромина "Linux для пользователя", которая вышла в издательстве "БХВ-Петербург" в серии "Самоучитель" в 2002 году. Разрешается копировать и публиковать данный текст при условии сохранения ссылки на источник.
Купить книгу В. Костромина "Linux для пользователя", изд-во БХВ, Санкт-Петербург, 2002
К фирменным русифицированным дистрибутивам Linux прилагается краткое руководство по инсталляции системы. А на дистрибутивном диске (дисках) обычно имеется и достаточно полное руководство по установке Linux в электронной версии (такое руководство для Red Hat Linux Russian Edition вы можете найти на сайте http://www.linux-ve.net). Кроме того, на русском языке опубликована отличная книга М. Уэлша и др. [П 4.1], которую легко найти и в Интернете под названием "Инсталляция Linux и первые шаги" (правда, в одной из более ранних редакций). Поэтому я не буду в этой книге подробно излагать этапы инсталляции системы, отсылая читателя к упомянутым руководствам. Вместо этого расскажу только о том, что нужно знать и приготовить до начала инсталляции, а также подробно рассмотрю вопрос об особенностях установки Linux на компьютер, уже работающий под одной из ОС семейства Windows, и об организации многовариантной загрузки.
Дело в том, что большинство из тех, кто начинает осваивать Linux, являются уже опытными пользователями ОС Windows, чаще всего Windows 95 или Windows 98. Действительно, пока еще вряд ли Linux является той операционной системой, с которой пользователь начинает свое знакомство с компьютером. И, естественно, если пользователь раньше работал с ОС Windows и решил поэкспериментировать с Linux, то ему не хочется терять свою привычную среду и все, что было наработано, настроено и отлажено под Windows. К счастью, терять и не обязательно, потому что на одном компьютере вполне могут ужиться две и даже больше ОС (хватило бы места на диске!). Именно поэтому ниже будет рассказано о том, как установить ОС Linux на компьютер, который до тех пор работал под одной из операционных систем фирмы Microsoft
2.1. Подготовка к инсталляции.
Устанавливать Linux можно одним из следующих способов:
- с локального CD-ROM;
- с жесткого диска, на который скопирован дистрибутив Linux;
- с файл-сервера локальной сети по NFS;
- с другого компьютера в локальной сети через SMB;
- с удаленного компьютера (в том числе из Интернета) по протоколу FTP;
- с одного из WWW-серверов Интернета по протоколу HTMP.
На мой взгляд, наиболее удобен и практичен вариант установки Linux с CD-ROM, тем более, что купить нужный компакт-диск теперь не проблема.
Прежде чем приступить к инсталляции, соберите (запишите на листе бумаги) всю необходимую информацию о конфигурации вашего компьютера. Если ваш компьютер пока что работает под ОС Windows 95/98, то многое можно найти, щелкнув правой кнопкой мыши по значку My Computer (Мой компьютер), а затем выбрав команду Properties (Свойства). Там можно найти почти всю необходимую информацию. Если чего-то не найдете, придется искать другими способами, вплоть до того, что открыть компьютер и прочитать надписи на самих устройствах.
Чтобы ничего не забыть, предлагаю вам пользоваться следующим списком. Не ленитесь и постарайтесь записать о каждом устройстве как можно больше данных (какие только сможете найти), это все может пригодиться при установке и настройке, когда искать эти данные будет сложнее.
- BIOS:
- фирма-производитель;
- версия.
- Контроллеры жестких дисков: тип (IDE или SCSI) и объем ваших жестких дисков (если у вас IDE диски, вы должны проверить, что BIOS вашего компьютера обеспечивает доступ к ним в режиме LBA):
- hda (Master на 1 контроллере или Primary Master);
- hdb (Slave на 1 контроллере или Primary Slave);
- hdc (Master на 2 контроллере или Secondary Master);
- hdd (Slave на 2 контроллере или Secondary Slave).
- фирма-производитель и номер модели SCSI адаптера (если имеется).
- Объем оперативной памяти (в килобайтах).
- CD-ROM:
- тип интерфейса (IDE, SCSI, или иной);
- для не-IDE, не-SCSI CD-ROM — фирма-производитель и номер модели.
- Мышь:
- тип (serial, PS/2, или bus mouse);
- протокол (Microsoft, Logitech, MouseMan, и т. д.);
- число кнопок;
- для мыши на последовательном порту также номер порта, к которому она подсоединена.
- Адаптер дисплея:
- фирма-производитель;
- номер модели (или чипсет, который использован);
- количество видео-памяти;
- Монитор:
- фирма-производитель;
- номер модели;
- граничные значения (min, max) частоты вертикальной и горизонтальной развертки (эти данные вы можете найти только в документации на монитор, их Windows не выдает, а между тем они очень важны при настройке графического интерфейса).
- Если вы собираетесь работать в сети (а UNIX вообще в первую очередь — сетевая ОС), то запишите следующие данные:
- фирма-производитель и номер модели сетевой карты;
- ваш IP адрес;
- сетевое имя вашего компьютера;
- маска подсети;
- IP адрес шлюза (gateway IP address);
- IP адреса серверов (основного и резервных) доменных имен (DNS server);
- IP адреса серверов WINS (Windows Internet Name Service);
- имя домена вашей организации.
- Тип и производитель звуковой карты и игровых контроллеров (если таковые имеются).
2.2. Предостережения и рекомендации
Перед тем, как приступить к экспериментам по установке Linux как второй ОС, очень рекомендую принять некоторые меры предосторожности. Дело в том, что вам, возможно, придется произвести переразбиение диска, изменить загрузочные записи и поэкспериментировать с загрузочными и конфигурационными файлами. Все эти действия далеко не безобидны, и результатом может стать то, что компьютер вообще перестанет загружаться. Сумеете ли вы восстановить после этого всю нужную вам информацию с диска — это еще вопрос. Мой опыт говорит о том, что оказаться в такой ситуации очень легко.
Поэтому, во-первых, необходимо изготовить загрузочную или спасательную дискету для вашей старой системы (если вы это еще не сделали). Во-вторых, стоит сохранить все ценную для вас информацию, наработанную в старой системе (сделать back-up всех ценных файлов). И, в-третьих, подготовить (разыскать, запасти) комплект установочных файлов для вашей старой системы.
И еще одна важная рекомендация: если что-то пошло не так, не паникуйте. Могу поделиться своим печальным опытом: когда я первый раз устанавливал Linux на компьютере, на котором стояла Windows NT, я быстро потерял возможность ее загружать, и, не разобравшись в ситуации, посчитал, что ничего другого не остается, как отформатировать диск и установить все заново. Теперь я понимаю, что мог бы все восстановить, если бы не принял поспешного решения. Поэтому могу сказать, что Вернер Альмесбергер прав, когда в своем руководстве по загрузчику LILO дает следующие советы оказавшимся в затруднительной ситуации.
- Не паникуйте. Если что-то не работает, попробуйте выяснить, что не так, перепроверьте свои предположения и только затем пытайтесь внести необходимые исправления.
- Читайте документацию. Особенно в тех случаях, когда система делает не то, что вы от нее ожидаете.
Можно добавить еще один общеизвестный совет.
- Смотрите log-файлы, т. е. протоколы работы системы (забегая вперед, скажу, что искать их надо в каталоге /var/log).
Как уже было сказано, собственно процедуру установки ОС Linux я здесь не описываю, отсылая читателя к подробным руководствам. Однако несколько советов, касающихся тех решений, которые вы принимаете в ходе инсталляции, мне все же хотелось бы дать.
Во-первых, не спешите и внимательно читайте те сообщения, которые появляются на экране, а также вдумывайтесь в то, какие варианты вы выбираете из числа предлагаемых вам на появляющихся экранных формах. В подтверждение этого совета могу рассказать, что когда я ставил Red Hat 7.1, то автоматически давил на кнопку Next, считая, что предлагаемый по умолчанию вариант вполне приемлем. В результате, после завершения инсталляции, я не смог достучаться до компьютера ни по одному из сетевых протоколов (telnet, ftp, NFS, Samba), хотя вроде бы задавал работу компьютера в сети. Оказалось, что в варианте, предлагаемом по умолчанию, устанавливается firewall, который закрывает доступ из сети. Чтобы такой доступ открыть, надо в ходе инсталляции явно задать, какие сервисы оставить открытыми. Но мы же так спешим!
Во-вторых, я не рекомендую соглашаться с тем, что система при загрузке автоматически выходит в графический режим. В конце концов, набрать в командной строке startx вовсе не сложно, а справиться с настройками графической оболочки новичку вряд ли удастся, если с ее загрузкой что-либо не в порядке.
После того, как необходимые меры предосторожности приняты, необходимо решить, каким образом вы будете осуществлять многовариантную загрузку, и подготовить диск к установке нескольких ОС, для чего разбить его на соответствующее число разделов (partition). Но прежде, чем перейти к конкретным процедурам подготовки диска, мне представляется необходимым хотя бы кратко рассмотреть устройство диска и процедуры загрузки ОС, чтобы не вклинивать теоретические вопросы и объяснения в изложение конкретных процедур. У кого не хватает терпения на чтение этих теорий, тот может пропустить их и перейти сразу к вопросу о выборе программы-загрузчика.
2.3. Разделы на диске и процесс загрузки
2.3.1. Что такое "геометрия диска"?
Как вы знаете, жесткие диски представляют собой несколько пластин с магнитным покрытием, расположенных на одной оси и вращающихся с большой скоростью. Считывание/запись информации осуществляется с помощью головок диска, расположенных одна под другой между пластинами и перемещающихся от центра к краям пластин. Окружность на магнитной пластине, которую описывает головка при вращении пластин, называется дорожкой, а совокупность таких дорожек, расположенных одна под другой (определяемая каждым фиксированным положением головок), называется цилиндром. Каждая дорожка разбита на сектора, и в сектор можно записать 512 байт полезной информации. Поэтому диски часто характеризуются совокупностью трех цифр: числом цилиндров/числом дорожек в цилиндре/числом секторов на дорожке или C/H/S (от первых букв соответствующих английских терминов: Cylinder/Head/Sector, т. е. цилиндр/головка/сектор). Эти три цифры называют "геометрией диска". Диск с геометрией C/H/S имеет объем CxHxSx512 байт.
Диски являются блочными устройствами, т. е. считывание и запись информации производится блоками, и минимальный размер блока равен одному сектору (512 байт). Для того чтобы записать информацию на диск, надо "позиционировать головку", т. е. указать контроллеру, в какой сектор эту информацию записать. Сектора как раз адресуются путем указания номера цилиндра, номера считывающей головки (или дорожки) и порядкового номера сектора на дорожке.
2.3.2. Разделы диска и таблица разбиения диска.
Физические диски в Intel-системах принято разбивать на разделы. Повелось это, кажется, из-за того, что первые версии MS-DOS не могли обеспечить доступ к большим дискам (а объемы дисков росли быстрее, чем возможности DOS). Тогда придумали разбиение дисков на разделы. Для этого в нулевой сектор диска (нулевой сектор первой дорожки на нулевом цилиндре) стали записывать так называемую таблицу разбиения диска на разделы (partition table). Каждый раздел может трактоваться как отдельный физический диск. В частности, в разные разделы могут быть установлены разные операционные системы.
Таблица разделов содержит 4 записи по 16 байт для 4 разделов, которые называют первичными. Каждая запись имеет следующую структуру:
struct partition {
char active; /* 0x80: раздел активный (загрузочный),
0: не активный */
char begin[3]; /* CHS первого сектора, 24 бита */
char type; /* тип раздела (например, 83 — LINUX_NATIVE,
/* 82 — LINUX_SWAP, 85 — LINUX_EXTENDED) */
char end[3]; /* CHS последнего сектора, 24 бита */
int start; /* номер начального сектора
(32-бита, счет начинается с 0) */
int length; /* число секторов в разделе (32 бита) */
};
Таблица разделов диска создается обычно с помощью программы fdisk. В ОС Linux имеется как стандартная программа fdisk (которая, впрочем, существенно отличается от программы fdisk в MS-DOS и Windows), так и еще две программы для работы с разделами диска: cfdisk и sfdisk. Программа cfdisk, как и fdisk, предназначена для работы с таблицей разделов диска: она не обращает никакого внимания на информацию, которая уже имеется на диске. Отличается она только несколько более удобным интерфейсом, предоставляющим пользователю не просто подсказку по командам, а систему меню. Программа sfdisk обладает несколько более широкими возможностями, в частности, она позволяет произвести некоторые операции над существующими разделами диска.
DOS использует поля begin и end таблицы разбиения диска и функции прерывания 13 BIOS (Int 13h) для доступа к диску, и поэтому не может использовать диски объемом более 8,4 Гбайт, даже с новым BIOS (об этом будет рассказано ниже), а разделы не могут быть более 2,1 Гбайт (но это уже из-за ограничений файловой системы FAT16).
Linux использует только поля start и length таблицы разбиения диска и поддерживает разделы, содержащие до 232 секторов, т. е. размер раздела может достигать 2 Тбайт.
Поскольку в таблице разбиения отведено только 4 строки для задания разделов, число первичных разделов на диске с самого начала ограничено: их может быть не более 4. Когда стало ясно, что и 4-х разделов мало, были изобретены логические разделы. Для этого один из первичных разделов объявляется "расширенным" (тип раздела — 5, или F, или 85 в шестнадцатеричной системе), и в нем создаются "логические разделы". Расширенные разделы сами по себе не используются, они могут лишь хранить логические разделы. Первый сектор расширенного раздела хранит таблицу разделов с четырьмя входами: один используется для логического раздела, другой для еще одного расширенного раздела, а два не используются. Каждый расширенный раздел имеет свою таблицу разбиения, в которой, как и в первичном расширенном разделе, используются только две строки, задающие один логический и один расширенный раздел. Таким образом, получается цепочка из таблиц разделов, где первая описывает три основных раздела, а каждая следующая — один логический раздел и положение следующей таблицы.
Программа 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
Число логических разделов в принципе не ограничено, потому что каждый логический раздел может содержать таблицу разделов и вложенные логические разделы. Однако реально ограничения все же существуют, например, Linux может работать не более чем с 15 разделами на SCSI-дисках и не более чем с 63-мя разделами на IDE-дисках.
Расширенный раздел как на физическом диске, так и в расширенном разделе вложенного расширенного раздела (предыдущего уровня) может быть только один: ни одна из существующих программ разбиения дисков (fdisk и ее усовершенствованные аналоги) не умеет создавать более одного расширенного раздела.
В Linux диск в целом (т. е. физический диск) доступен по имени устройства /dev/hda, /dev/hdb, /dev/sda, и т.п. Первичные разделы обозначаются дополнительной цифрой в имени устройства: /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda4, а логические разделы в Linux доступны по именам /dev/hda5, /dev/hda6 ... (начиная с номера 5). Из сказанного выше должно быть ясно, почему могут быть пропущены имена /dev/hda3 и /dev/hda4 (третий и четвертый первичные разделы просто не были созданы) и сразу после /dev/hda2 вы увидите /dev/hda5 (логический раздел в расширенном разделе /dev/hda2), а далее нумерация идет последовательно.
В Windows логические разделы получают однобуквенные имена, начиная с последнего задействованного имени первичного раздела. Если, например, имеется один жесткий диск с двумя простыми первичными разделами (C: и D:) и одним расширенным разделом, в котором созданы два логических раздела, то эти логические разделы именуются E: и F:. Впрочем, в Windows NT и 2000 с помощью администратора дисков разделам могут быть присвоены другие буквенные имена.
2.3.3. Процесс загрузки ОС фирмы Microsoft
Какую бы операционную систему мы ни рассматривали, для того, чтобы ОС могла начать управлять компьютером, ее необходимо загрузить в оперативную память. Поэтому давайте кратко рассмотрим, как происходит процесс загрузки разных ОС. Поскольку нас интересует только загрузка с жестких дисков, то мы не будем рассматривать особенности загрузки с дискеты, CD-ROM и по сети. Начнем с доброй старой MS-DOS и MS Windows (не забывайте, что разработка и совершенствование персональных компьютеров шло параллельно с развитием ОС от Microsoft и решения, использованные в этих ОС, оказывали сильное влияние на те решения, которые принимались разработчиками аппаратуры).
Как вы знаете, при включении компьютера вначале запускается программа POST (Power On Self Test). Она определяет количество доступной памяти, тестирует ее, определяет наличие других компонент (клавиатура, винчестер...), инициализирует карты адаптеров. На экране обычно появляются сообщения о количестве памяти, о ее тестировании, перечень обнаруженных устройств (гибкие и жесткие диски, процессор, COM-порты и т. д.).
После завершения тестирования POST вызывает Int 19h, которое пытается найти загрузочное устройство. Поиск производится в том порядке, который определен в Setup BIOS, и осуществляется путем опроса нулевых секторов соответствующих устройств. Если диск является загрузочным, то в его нулевом секторе находится главная загрузочная запись — Master Boot Record (MBR). Последние два байта MBR — это "магическое число", которое является признаком того, что данный сектор есть MBR, а, следовательно, диск является загрузочным. Кроме "магического числа" MBR содержит таблицу разделов диска, о которой уже было сказано выше, и маленькую программу — первичный загрузчик, объемом всего 446 (0x1BE) байт.
В табл. 2.1 представлена структура главного загрузочного сектора, создаваемого при инсталляции Windows.
Таблица 2.1. Структура главного загрузочного сектора.
Смещение | Содержание |
0x000 | Код первичного загрузчика |
0x1BE | Таблица разбиения диска |
0x1FE | "Магическое число" (0xAA55) |
MS-DOS, Windows95 и NT записывают DOS MBR при инсталляции. Стандартное для MS содержимое MBR можно также записать командой fdisk /mbr.
Но вернемся к описанию процесса загрузки. Прерывание 19h BIOS загружает первичный загрузчик в память компьютера и передает управление этой программе. Но такой маленькой программе не под силу загрузить ОС; все, что она может сделать — это загрузить в память более мощную программу — вторичный загрузчик.
Для этого она ищет в таблице разделов активный раздел и считывает в память вторичный загрузчик, который располагается начиная с первого логического сектора активного раздела. Обратите внимание на слово "начиная". Дело в том, что вторичный загрузчик в разных системах имеет разную длину.
В разделе, отформатированном под файловую систему FAT, вторичный загрузчик занимает один сектор (512 байт). В разделе, отформатированном под файловую систему NTFS, вторичный загрузчик занимает уже несколько секторов.
Вторичный загрузчик загружает первый слой программ, необходимых для запуска операционной системы. В случае MS DOS программа-загрузчик загружает IO.SYS по адресу 700h, затем MSDOS.SYS и передает управление разделу SYSINIT модуля IO.SYS.
Если по каким-либо причинам на диске не найден активный раздел, процесс загрузки продолжается обработкой прерывания 18h. Эта ветвь реально используется очень редко, но такая возможность может быть очень полезна в некоторых ситуациях. При удаленной загрузке, когда операционная система загружается с сервера, это прерывание перенаправляется программой POST на ROM сетевой карты.
Для других ОС от Microsoft процесс загрузки происходит аналогично
- Windows95 загружается так же, как и DOS, но заменяет IO.SYS и MSDOS.SYS своими файлами. DOS-овские сохраняются в файлах IO.DOS и MSDOS.DOS соответственно. Когда вы выбираете загрузку сохраненного DOS, Windows95 переименовывает свои файлы в файлы с расширением w40 и восстанавливает первоначальные имена DOS-овских системных файлов. Процесс продолжается с загрузки DOS-овского IO.SYS. Таким образом, загрузочные сектора DOS и Windows95 одинаковые.
- Windows NT4 использует MBR DOS, но заменяет загрузочную запись активного раздела таким образом, что вместо IO.SYS загружается NTLDR. Это уже мощная программа, которая многое может сделать. В частности, она находит файл boot.ini и, если параметр timeout > 0, предлагает меню загрузки.
Каждая строка секции [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"
Если пользователь выбирает NT, то выполняется загрузка по адресу раздела, указанному в первой строке раздела. В строке, соответствующей Microsoft Windows, указан просто диск "C:\", так как имя загрузочного файла берется по умолчанию: bootsect.dos. Файл грузится в память и загрузка продолжается так, как если бы загрузочная запись раздела была загружена программным кодом из MBR.
Для загрузки других систем можно воспользоваться таким же приемом. Для этого в boot.ini нужно добавить строки, содержащие ссылки на другие загрузочные файлы. При выборе такой строки будет загружаться соответствующая ОС. В приведенном выше примере этим способом обеспечивается загрузка Linux. Для этого в файле C:\BOOTSECT.LNX должно быть предварительно записано содержимое загрузочной записи, создаваемой Linux (точнее — LILO, стандартным загрузчиком Linux).
2.3.4. Проблемы с большими дисками
В MS-DOS и первых версиях Windows доступ к дискам был организован через прерывание 13 (Int 13h) BIOS (в том числе на этапе начальной загрузки ОС). При этом использовалась адресация секторов на диске на основе указания номеров цилиндра, головки и сектора на дорожке (C/H/S). Точнее:
- AH — выбор операции;
- CH — младшие 8 бит номера цилиндра;
- CL — 7-6 биты соответствуют старшим битам номера цилиндра, 5-0 биты соответствуют номеру сектора;
- DH — номер считывающей головки;
- DL — номер диска (80h или 81h).
(Заметим в скобках, что нумерацию физических цилиндров и дорожек принято начинать с 0, а сектора на дорожке нумеруют, начиная с 1). Однако практически головок было не более 16-ти, а число секторов на дорожке — не более 63, и хотя для указания цилиндра использовалось 10 бит, все равно BIOS не мог работать с дисками объемом более 1024x63x16x512 = 528 Мбайт.
Для преодоления этого ограничения стали применять разные хитрые приемы (подробнее об этом вы можете узнать из [П4.2]). Например, Extended CHS (ECHS) или "Large disk support" (иногда обозначается просто как "Large") использует еще три незанятых бита номера головки для увеличения числа адресуемых цилиндров. Это позволило использовать "фальшивую геометрию диска" в 1024 цилиндра, 128 считывающих головок и 63 сектора/дорожку. Трансляцию Extended CHS в реальный CHS-адрес (который может иметь до 8192 цилиндров) осуществляет BIOS. Это позволяет работать с дисками, объемом до 8192x16x63x512 = 4 227 858 432 байт или 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, которые используют 3D нотацию (C,H,S). В силу этого возникает ограничение на возможный объем диска: BIOS, и, следовательно, MS-DOS и ранние версии Windows, не могли адресовать диски объемом более 8,4 Гбайт.
Надо заметить, что указанное ограничение относится только к дискам с интерфейсом IDE. В контроллерах SCSI-дисков номер сектора переводится в команды SCSI, а далее сам диск находит нужную позицию, поэтому такого ограничения на объем диска не возникает.
Еще раз хочется отметить, что все перечисленные ограничения существенны только на этапе загрузки ОС, поскольку сама Linux и последние версии Windows при работе с дисками уже не используют прерывание 13 BIOS, а используют собственные драйвера для работы с дисками. Но, прежде чем система сможет использовать собственный драйвер, она должна как минимум его загрузить. Поэтому на этапе начальной загрузки любая система вынуждена пользоваться BIOS. Это и вызывает ограничения на размещение многих систем за пределами 8 Гбайт, они не могут оттуда загружаться, хотя после успешной загрузки могут работать с дисками гораздо большего объема. Для того, чтобы понять, как можно обойти эти ограничения, нам потребуются некоторые знания о том, как происходит загрузка ОС Linux.
2.4. Выбор загрузчика
Прежде, чем приступать к установке второй (третьей и т. д.) ОС, надо выбрать способ организации выбора ОС на этапе загрузки компьютера. Эту задачу решают программы-загрузчики. Существует несколько программ такого рода. Раз уж речь у нас идет о Linux, то первым делом надо упомянуть программу LILO, которая входит в состав любого дистрибутива Linux.
2.4.1. Загрузчик LILO из дистрибутива ОС Linux
Загрузчик LILO создан Вернером Альмесбергером (Werner Almesberger). LILO может загружать ядро Linux как с дискеты, так и с жесткого диска, а также может загружать другие операционные системы: PC/MS-DOS, DR DOS, OS/2, Windows 95/98, Windows NT, 386BSD, SCO UNIX, Unixware и т. д. Может быть задан выбор до 16 разных операционных систем на этапе загрузки.
LILO представляет собой комплект из нескольких программ: собственно загрузчика, программ, используемых для установки и настройки загрузчика, и служебных файлов:
- программа /sbin/lilo, которая запускается из-под Linux, служит для того, чтобы записать всю информацию, необходимую на этапе загрузки, в соответствующие места. Ее необходимо перезапускать каждый раз после внесения изменений в ядро или в конфигурационный файл LILO;
- различные служебные файлы, которые нужны LILO во время загрузки. Эти файлы обычно располагаются в каталоге /boot. Самые важные из них — это собственно загрузчик (смотри ниже) и map-файл (/boot/map), в котором указывается местоположение ядра. Еще один важный файл — это файл конфигурации LILO, который обычно имеет имя /etc/lilo.conf;
- собственно загрузчик — это та часть LILO, которая первой загружается в память через прерывание BIOS, и которая загружает ядро Linux или загрузочный сектор другой операционной системы. Загрузчик тоже состоит из двух частей. Первая часть записывается в загрузочный сектор и служит для загрузки второй части, которая значительно больше по размеру. Обе части обычно хранятся на диске в файле /boot/boot.b.
Надо иметь в виду, что формат загрузочного сектора, создаваемого LILO, отличается от формата DOS 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 из дистрибутива Linux поддерживает возможность активизации расширенного раздела. Для этого надо использовать либо опцию -b, либо переменную BOOT.
Загрузочный сектор LILO не может быть размещен в следующих местах:
- загрузочный сектор дискеты или первичного раздела, отформатированных в других файловых системах;
- в swap-разделе Linux;
- на втором жестком диске.
Кроме того, имейте в виду, что LILO во время загрузки нужны еще следующие файлы:
- /boot/boot.b;
- /boot/map (создается при запуске /sbin/lilo);
- все загружаемые версии ядра (если вы выбираете версию ядра на этапе загрузки);
- загрузочные сектора других операционных систем, которые будут загружаться через LILO;
- выдаваемые при загрузке сообщения (если таковые определены).
Следовательно, как загрузочный сектор LILO, так и перечисленные файлы (в том числе те, которые вы будете устанавливать впоследствии) должны находиться в пределах первых 1024 цилиндров на жестком диске, так как они должны быть доступны через BIOS.
Начиная с версии 21, LILO выводит на экран меню выбора загружаемой системы (раньше надо было для вызова меню нажимать клавишу табуляции).
2.4.2. Другие загрузчики ОС
Кроме LILO для загрузки Linux можно использовать и другие загрузчики.
- Если у вас до установки Linux уже стояла ОС Windows NT, то вторым доступным для вас загрузчиком является OS Loader от NT. По сравнению с LILO загрузчик OS Loader имеет, по крайней мере, два преимущества. Во-первых, сохраняется вся старая конфигурация (у меня уже была возможность загружать по выбору Windows NT или Windows 95), и, во-вторых, можно установить Linux на диск, который не может быть загрузочным в Linux, например, второй диск на втором контроллере (Secondary Slave).
- Если у вас была установлена только ОС Windows 95 или Windows 98 и не было Windows NT или Windows 2000, то OS Loader у вас не установлен, и если вы почему-либо не хотите ставить LILO, можно воспользоваться программой-загрузчиком loadlin.exe (обычно поставляется вместе с дистрибутивом Linux).
- В состав некоторых дистрибутивов Linux в последнее время включается программа-загрузчик GRUB.
- В составе дистрибутива OS/2 фирмы IBM имеется программа-загрузчик, которая называется Boot Manager. Во многих руководствах ее рекомендуют использовать для организации многовариантной загрузки.
- В разных источниках упоминается также программа System Commander, которая тоже является многовариантным загрузчиком.
- Еще один многовариантный загрузчик входит в состав пакета PartitionMagic фирмы Power Quest, о котором мы будем говорить в следующем подразделе.
Кроме перечисленных я встречал упоминания еще о ряде загрузчиков (часть из которых можно найти в каталоге /public/ftp/pub/Linux/system/boot/loaders на сайте ftp://metalab.unc.edu). Но, поскольку я этими программами не пользовался, то рассказать о них подробнее не могу, и все мои последующие рекомендации будут основаны на использовании загрузчиков LILO, NT Loader и loadlin.exe. Если вы хотите установить другую программу-загрузчик, то вы должны почитать руководство по ее установке и использованию.
2.4.3. Варианты загрузки
Итак, на мой взгляд, выбор варианта загрузки производится следующим образом:
- Если у вас установлена Windows NT или Windows 2000, то используйте NT Loader.
- Если у вас стоит Windows 95 или Windows 98 на FAT16, и вы не хотите ставить программу-загрузчик из другой ОС или от независимого разработчика, то можете либо использовать LILO, либо сначала запускать ДОС, а затем загружать Linux с помощью loadlin.exe (или другой аналогичной программы, их существует несколько, но другие мы рассматривать не будем).
- Если у вас установлена Windows 95 OSR2 или Windows 98 на FAT32, и вы не хотите ставить программу-загрузчик из другой ОС или от независимого разработчика, то вы должны будете использовать loadlin.exe. Многие HOWTO утверждают, что не нужно использовать LILO, если активный раздел у вас форматирован в системе FAT32, хотя причины этого мне неизвестны. Но моя собственная попытка загружать Linux через NT Loader, установленный в FAT32-разделе, окончилась неудачей. Так что мне тоже пришлось в этом случае воспользоваться программой loadlin.exe, которая с успехом справилась с задачей, и при этом вообще произвела на меня самое благоприятное впечатление, так что я рекомендую вам применять ее для загрузки Linux.
В следующих разделах я расскажу о том, как установить Linux, используя все три варианта загрузки: через загрузчик NT Loader (см. разд. 2.6), загрузчик LILO (см. разд. 2.7) и загрузчик loadlin.exe (см. разд. 2.8). Но до установки загрузчика надо подготовить разделы на диске (или, по крайней мере, продумать, как их организовать).
2.5. Подготовка разделов на диске
2.5.1. Рекомендации по созданию разделов
Рекомендации тут давать довольно сложно, так как во многом это зависит от воли и потребностей хозяина диска. Но все же попробую сформулировать некоторые предложения. При этом диски и разделы буду именовать так, как это принято в Linux, т. е. /dev/hda, /dev/hdb и т. д. для дисков, и /dev/hda1, /dev/hda2 и т. д. — для разделов на диске.
Разбивать диск на разделы необходимо потому, что Windows и Linux используют разные способы организации хранения информации на диске и разные способы организации доступа к этой информации. Поэтому лучше всего каждой операционной системе выделить на диске отдельный раздел (или даже несколько, как мы увидим ниже).
Давайте вначале рассмотрим простой случай — когда объем вашего диска не превышает 8,4 Гбайт (точнее — когда число цилиндров не превышает 1024). В этом случае все просто: вы просто делите диск пропорционально тому, сколько места требуется для установки каждой из операционных систем, которые вы хотите установить. Можете воспользоваться следующими данными о размерах дискового пространства, минимально необходимого для установки операционных систем в стандартной конфигурации (табл. 2.2).
Таблица 2.2. Требования ОС к дисковому пространству
Операционная система | Требует |
Windows 95 | 100 Мбайт |
Windows 98 | 200 Мбайт |
Windows NT | 200 Мбайт |
Windows 2000 | 700 Мбайт |
Linux Red Hat 6.2 (в режиме рабочей станции с KDE) 700 Мбайт
Однако помните, что надо учесть не только объем файлов самой операционной системы, но и того программного обеспечения, которое вы планируете в ней запускать, а также оставить существенный резерв для того программного обеспечения, которое вы захотите установить в последующем (это неизбежно!). Учтите, что те 700 Мегабайт, которые указаны для Linux в приведенной выше таблице, включают место для всего ПО, которое устанавливается вместе с Linux по умолчанию, в том числе, например, мощный текстовый процессор Lyx. Оценки же, которые даны для Windows, касаются только самой ОС. Если, например, вместе с Windows 2000 установить MS Office 2000 в стандартной конфигурации, то места на диске потребуется много более гигабайта.
Судя по моему опыту, для нормальной работы с Windows 95/98, Windows NT и Linux вполне достаточно выделить разделы объемом 800—1000 Мбайт (конечно, если вы не ставите громоздких программных пакетов, вроде Corel Draw) , а вот для Windows 2000 требуется уже побольше.
Теперь рассмотрим вопрос о выделении разделов для Linux. Тут одним разделом не обойтись. Во-первых, надо выделить отдельный раздел подкачки (swap-раздел) для Linux. При планировании объема swap-раздела Linux учтите следующее:
В Linux RAM и пространство swap складываются, образуя общую виртуальную память. Например, если у вас 8 Мбайт ОЗУ (RAM) и 12 Мбайт swap-пространства, вы имеете 20 Мбайт виртуальной памяти.
Для работы Linux надо иметь, по крайней мере, 16 Мбайт виртуальной памяти, так что при 4 Мбайт ОЗУ вы должны выделить под swap не менее 12 Мбайт.
В Linux размер одного swap-раздела не может превышать 128 Мбайт. То есть раздел под swap вы можете выделить произвольного размера, но Linux не сможет использовать более 128 Мбайт. Если вы хотите иметь виртуальной памяти больше, надо создавать два swap-раздела или использовать файл подкачки.
Рассчитывая размер пространства свопинга, имейте в виду, что слишком большое количество этого пространства может оказаться вовсе бесполезным. На компьютере с 16 Мбайт ОЗУ при стандартной конфигурации Linux и стандартном наборе ПО вполне достаточно иметь 48 Мбайт пространства свопинга, а для минимальной конфигурации Linux можно обойтись вообще без swap-пространства. Конечно, точное значение этого параметра существенно зависит от того набора приложений, которое будет у вас установлено.
В общем, долгие размышления по поводу объема swap-раздела нужны только в том случае, когда у вас маленький диск и мало ОП. В противном случае для начала задайте размер swap-раздела таким образом, чтобы объем виртуальной памяти был не менее 128 Мбайт. А если у вас больше 128 Мбайт оперативной памяти, то этот раздел вообще может оказаться ненужным.
Все остальные части Linux и работающее под ней программное обеспечение, в принципе, могут размещаться в одном разделе. Однако имеет смысл подумать о том, чтобы разместить файловую систему Linux в нескольких отдельных разделах. А. Федорчук, например, рекомендует выделить для файловой системы Linux три раздела. Первый из них (на мой взгляд, под него достаточно отвести раздел размером в один гигабайт) будет содержать корневую файловую систему (/). Второй раздел отводим для каталога /home. И третий раздел монтируется как каталог /usr. Такое разбиение обосновывается следующими соображениями. Как бы ни была устойчива и надежна ОС Linux, иногда возникает необходимость переустановить ее. Например, вы решили обновить версию дистрибутива, или по неопытности разрушили жизненно важные для системы файлы. Если все установлено в один раздел, вы при переустановке теряете все, что наработали и хранили в своем домашнем каталоге. Кроме того, потеряны будут и установки программных пакетов, которые вы компилировали из исходных кодов, или другим способом устанавливали уже после установки системы. Большая часть таких пакетов по умолчанию инсталлируется в каталог /usr. Если же отвести для этих каталогов отдельные разделы на диске и при переустановке системы не форматировать эти разделы, все наработанное можно будет (может быть после небольших дополнительных настроек) сохранить и использовать после переустановки самой ОС. В разрабатываемом сейчас стандарте на файловую систему Linux (подробнее об этом будет рассказано в гл. 4) тоже имеется рекомендация о размещении каталога /usr в отдельном разделе диска.
Мне кажется, что этих рекомендаций вполне достаточно для того, чтобы спланировать разбиение в случае одного небольшого диска. Рассмотрим теперь случай диска с числом цилиндров более 1024.
Из того, что было сказано в предыдущих разделах, следует, что программы-загрузчики должны располагаться в пределах первых 1024 цилиндров. Между прочим, NT Loader может располагаться не обязательно в NTFS-разделе, как и вообще не в том разделе, где расположены остальные файлы ОС. Как сказано выше, для Linux тоже можно расположить корневой каталог вместе с подкаталогом /boot в "нижних" цилиндрах, а остальное — где угодно.
Поэтому в этом случае мои предложения сводятся к следующему:
- загрузочные части всех систем от Microsoft поместить в первый первичный раздел диска, который отформатировать в системе FAT16 (в DOS);
- следующий первичный раздел выделить для корневого каталога Linux (/), размер которого сделать равным примерно 1 Гбайту;
- выделить swap-раздел для Linux (рекомендации о его размерах даны выше);
- все остальное дисковое пространство сделать расширенным разделом;
- в расширенном разделе создать логические разделы для каждой из устанавливаемых ОС: Windows 98, Windows NT или 2000, а также для файловых систем /home и /usr ОС Linux (в /home будут располагаться личные файлы пользователей, а в /usr устанавливаются все приложения).
Конечно, если у вас стоит только Windiws 95 c FAT16, то можете оставить ее в первом разделе. Если же у вас была установлена Windows NT или FAT32, то наличие небольшого раздела с FAT16 будет не лишним. Во-первых, даже в случае любого краха системы вы всегда сможете загрузиться с DOS-овской загрузочной дискеты и хотя бы увидеть, что жесткий диск работоспособен (в принципе). А во-вторых, файловая система FAT16 видна из-под любой ОС, в том числе Linux, так что этот раздел может служить для обмена файлами между разными системами. Но делать этот раздел большим не стоит — FAT16 очень нерационально использует дисковое пространство. Поэтому отведите под него, скажем, 256 или 512 Мбайт.
Эти рекомендации формулировались в предположении, что у вас всего один жесткий диск. Если у вас их 2, то все остается в силе, разве что swap-раздел Linux лучше расположить не на том физическом диске, где расположены остальные разделы, отведенные Linux. Говорят, что от этого повышается быстродействие в Linux (оно и понятно, считывающие головки меньше бегают).
2.5.2. Программы для разбиения диска
После того, как план разбиения составлен, осталось подобрать инструмент, с помощью которого это разбиение можно осуществить на практике. Наиболее известной программой разбиения диска является уже упоминавшаяся программа fdisk, варианты которой имеются во всех операционных системах. И ничего другого, может быть, и не требовалось бы, если бы речь шла о разбиении девственно чистого диска. Но мы рассматриваем случай, когда какая-то ОС на диске уже имеется и надо обеспечить переразбиение диска без потери информации на нем. fdisk для таких операций не подходит.
В составе дистрибутивов Red Hat и BlackCat ( вероятно, и в других тоже) имеется программа fips, которая служит для переразбиения диска. Однако отзывы, которые я слышал, не воодушевили меня на использование этой программы. Поэтому мой вам совет — если хотите переразбить диск без потери информации, найдите программу Partition Magic фирмы Power Quest (www.powerquest.com) и воспользуйтесь ею.
Во-первых, она позволяет произвести переразбиение диска без потери информации (т. е., все ваши предыдущие установки и настройки будут сохранены). При этом можно не только создать новый раздел на свободном месте на диске, но и как угодно переместить ранее существующие разделы.
Во-вторых, эта программа (даже в варианте для DOS) предоставляет вам удобный графический интерфейс, так что все осуществляемые действия вы видите наглядно. Никакого сравнения с интерфейсом командной строки программы fdisk. Я пользовался 5-ой версией этой программы. Она отказывается работать под Windows 2000 и Windows NT, однако в ее дистрибутиве имеется возможность изготовить две дискеты, которые служат для загрузки компьютера в режиме DOS (вариант Caldera DR-DOS) и последующего запуска программы. Эти дискеты прекрасно позволяют переразбить и диск, на котором установлена Windows NT или 2000.
При создании разделов необходимо следить за тем, чтобы границы разделов не пересекались.
Я думаю, что приведенных данных достаточно для того, чтобы спланировать и осуществить разбиение диска на разделы. Поэтому перейдем к рассмотрению конкретных вариантов установки двух ОС на одном компьютере.
2.6. Windows NT и Linux : загрузка через OS Loader от NT
В этом разделе, говоря о Windows NT, я все время буду иметь в виду и Windows 2000, так как в части установки Linux между ними различий нет. Будем предполагать, что Windows NT установлена в разделе /dev/hda2 (как вы помните, /dev/hda1 предлагалось отвести под FAT16-раздел). Раз ОС Windows NT на вашем компьютере уже установлена, значит и загрузчик OS Loader тоже уже установлен, а, следовательно, вполне логично использовать его и для загрузки Linux. Я надеюсь, что вы сделали резервную копию всей ценной для вас информации с жесткого диска(ов). После этого можно перейти к установке Linux. Этапы установки можно описать следующим образом.
- Если вы не сделали этого ранее, то до начала каких-либо действий по инсталляции Linux изготовьте загрузочные дискеты для загрузки и восстановления Windows NT. Для создания загрузочной дискеты достаточно скопировать на отформатированную дискету файлы ntldr, ntdetect.com и boot.ini из корневого каталога загрузочного диска. Программу создания дискеты аварийного восстановления для Windows 2000 можно запустить из панели управления (команда Архивация данных), а в Windows NT 4.0 я ее сумел найти только с помощью поиска в справочной системе (ищите "Создание диска аварийного восстановления").
- С помощью программы Partition Magic освободите часть дискового пространства и создайте на свободном месте раздел типа ext2 (файловая система Linux) и swap-раздел. О том, что надо при этом учесть, было рассказано выше.
- Проведите процедуру инсталляции Linux, следуя рекомендациям, прилагаемым к имеющемуся у вас дистрибутиву. В ходе процедуры инсталляции учтите следующее:
- во-первых, в процессе установки надо обязательно изготовить загрузочную дискету, для чего при запросе о создании загрузочного диска выбрать команду Yes, make a BOOT DISK (Создать загрузочный диск). Этот диск понадобится вам на одном из следующих этапов. Кроме того, в последующем можно будет просто использовать эту дискету для загрузки Linux. Это тоже вариант загрузки, тем более что, в отличие от загрузочной дискеты ДОС, после загрузки система уже о дискете не вспоминает, ее можно убрать из дисковода (даже размонтировать не требуется) и использовать дисковод для работы с обычными дискетами. Однако этот метод все же не совсем удобен, так что я не предлагаю вам использовать его постоянно. Только как запасной! Но это потом, а при настройке многовариантной загрузки он будет просто необходим!
- во-вторых, при установке Linux надо установить LILO не в главный загрузочный сектор диска (Master Boot Record), а в первый сектор того раздела, который вы отвели для корневого раздела Linux. Для определенности предположим, что Linux устанавливается в первый сектор раздела /dev/hda3.
В принципе, если вы установите LILO в MBR, то и это не смертельно, конечный результат (загрузка через NT Loader) может быть достигнут и в этом случае, но потребуется больше усилий. Дело в том, что формат MBR, создаваемого LILO и Windows (DOS), различен. Поэтому если вы поставите LILO в MBR, вам придется потом восстановить MBR от Windows. На всякий случай я позже расскажу, как это делается, но лучше будет, если вы сразу поставите LILO в первый сектор его собственного раздела.
- После завершения инсталляции загрузите Linux с помощью загрузочной дискеты (если вы установили LILO в раздел Linux и не трогали MBR, то другой возможности загрузить Linux у вас пока нет).
- Скопируйте загрузочный сектор Linux в файл; он понадобится для того, чтобы загрузчик Windows NT/2000 мог запускать 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.
Примечание
Хочу заметить, что если диск C: (/dev/hda1) отформатирован в системе FAT, то можно сразу создать файл bootsect.lnx в корневом каталоге диска C:. Отмечу, что я не знаю (не пробовал) можно ли будет загружаться без дискеты, если первый раздел загрузочного диска отформатирован в NTFS. Но думаю, что проблем и здесь не будет, кроме необходимости переноса boot-сектора через дискету, поскольку пока что поставляемые в дистрибутиве варианты ядра не поддерживают NTFS.
- Далее необходимо перезагрузиться, чтобы запустить Windows NT, для чего даем в Linux команду:
[root]# shutdown -h now
Поскольку главная загрузочная запись не была изменена, должна загрузиться Windows NT. После завершения загрузки необходимо перенести файл /mnt/floppy/bootsect.lnx в корневой каталог диска C:, точнее — в корневой каталог того раздела, с которого загружается Windows NT. В зависимости от того, как вы устанавливали Windows NT, это может быть как FAT16-раздел, так и NTFS-раздел. Признаком нужного раздела является наличие в нем файлов ntldr и boot.ini (эти файлы могут быть скрытыми!). Файлу bootsect.lnx можно присвоить атрибут read-only.
- После завершения загрузки NT найдите файл boot.ini в корневом каталоге и добавьте в него следующую строчку:
C:\bootsect.lnx="LINUX"
(естественно, что в кавычках вы можете поставить все, что вам угодно).
- Осталось перезапустить компьютер еще раз, причем при загрузке вы уже будете иметь возможность выбрать Linux для загрузки. После этого будет запущен LILO, который загрузит Linux.
Теперь отдельно рассмотрим случай, когда вы (по ошибке или намеренно) установили LILO в главную загрузочную запись диска (Master Boot Record, MBR). В этом случае загрузочная запись Windows NT (или 2000) будет затерта, и загрузить Windows NT (см. шаг 6 выше) уже будет невозможно. Если вы все еще намерены пользоваться загрузчиком OS Loader от NT, а не LILO, последовательность действий несколько изменяется: вместо шага 6 необходимо проделать следующее.
- Загрузите Windows NT с загрузочных дискет (см. шаг 1). При этом необходимо выбрать в меню загрузчика команду Recover, а затем — режим Command mode. При запросе следует зарегистрироваться с учетной записью администратора системы (Administrator).
- Восстановите главную загрузочную запись диска. Для этого можно дать команду fdisk /mbr. У меня получалось, хотя в некоторых статьях утверждается, что восстановить таким образом MBR удается не всегда. В Windows 2000 имеются специальные команды fixboot и fixmbr (они запускаются из консоли восстановления, см. справку). Выполните их обе в указанном порядке. Теперь Windows 2000 снова будет загружаться нормально.
- Перезапустите компьютер с загрузочной дискеты Linux и зарегистрируйтесь в системе с полномочиями администратора (root).Введите команду cd /etc и откройте файл lilo.conf. В начале этого файла есть ссылка на загрузочный раздел по умолчанию, например, /dev/hda.
- С помощью любого редактора, например, CoolEdit из Midnight Commander, следует заменить это значение указанием на диск и раздел, куда была установлена Linux (точнее, указанием на тот диск и раздел, который монтируется как корневой в Linux). Если Linux установлена в раздел /dev/hdc1, то именно это и следует записать, т. е. поменять /dev/hda на /dev/hdc1. Если вы не помните, куда именно установлена Linux, найдите последнюю переменную файла /etc/lilo.conf — переменную image. В ней хранится нужное значение.
- Выполнить команду /etc/lilo для записи загрузчика в раздел /dev/hdc1 (команду lilo нужно выполнить без аргументов). Будет выдано предупреждение о том, что раздел не является первым на диске. Именно это нам и нужно, чтобы загрузочная запись Windows 2000 осталась в целости и сохранности.
- Выполнить шаги 6–8 приведенного выше алгоритма.
Легко догадаться, что только что приведенная сложная последовательность операций с двумя лишними перезагрузками потребовалась только для того, чтобы перенести загрузочный сектор Linux из MBR в первый сектор раздела, отведенного для Linux, и восстановить MBR от Windows.
Все, на этом установка завершена, и вы имеете возможность на этапе загрузки выбирать ту ОС, которая будет осуществлять управление вашим компьютером в данном сеансе работы.
2.7. Использование загрузчика LILO
2.7.1. Установка и настройка загрузчика LILO
Как уже было сказано в разделе о выборе загрузчика, если у вас была установлена Windows 98 с файловой системой FAT16, то наиболее логичным и доступным выбором является использование программы, которая входит в состав всех дистрибутивов ОС Linux, и называется LILO (LInux LOader)..
Так же, как в случае с Windows NT, приведем пошаговые инструкции того, как в этом случае настроить процесс загрузки.
- До начала каких-либо действий по инсталляции Linux изготовьте загрузочную дискету Windows.
- С помощью программы Partition Magic освободите часть дискового пространства и создайте на свободном месте раздел типа ext2 (файловая система Linux) и swap-раздел. О том, как это сделать, рассказано выше. Если объем вашего жесткого диска превышает 8,4 Гбайта, особенно внимательно прочитайте разд. 2.3–2.5.
- Проведите процедуру инсталляции Linux, следуя рекомендациям, прилагаемым к имеющемуся у вас дистрибутиву. Учтите, что если вы вознамерились использовать загрузчик LILO, вам необходимо при инсталляции системы установить LILO в основную загрузочную запись (Master Boot Record). Изготавливать в процессе установки загрузочную дискету, в принципе, не обязательно, но я очень рекомендую вам это сделать.
Примечание
Загрузчик LILO не обязательно устанавливать в главную загрузочную запись диска, он может располагаться в загрузочной записи первичного активного Linux-раздела или даже логического раздела в расширенном разделе. В таком случае в MBR должно быть нечто, способное его загрузить, например, стандартный загрузчик MS-DOS или Windows. Но необходимости применения такого варианта я не вижу (раз уж вы используете LILO в качестве основного загрузчика), поэтому здесь его рассматривать не будем.
- На следующем шаге нужно заставить LILO загружать ОС по выбору. LILO конфигурируется с помощью файла /etc/lilo.conf и команды /etc/lilo. Эта команда устанавливает (или переустанавливает) LILO.
Рассмотрим небольшой пример файла конфигурации 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: в терминологии Microsoft) должен находиться вторичный загрузчик. У меня, например, на одном из компьютеров с многовариантной загрузкой там находится NT Loader (поскольку Windows NT была установлена до Linux), и LILO успешно загружает Windows NT. Только надо установить в файле boot.ini задержку времени равной нулю, чтобы не получать собственного меню загрузки NT Loader. Впрочем, если вы хотите по каким-то причинам видеть это меню, то значение timeout в файле boot.ini надо задать отличным от нуля (задается в секундах). Это может понадобиться, например, для обеспечения возможности загружать Windows 98 как еще один вариант ОС.
Если вы хотите грузить Windows непосредственно из LILO, то добавьте в /etc/lilo.conf еще одну секцию:
other = /boot/bootsect.dos
label = win,
где файл bootsect.dos берется из корневого каталога того диска, на котором стоит NT Loader.
- После того, как вы откорректировали файл /etc/lilo.conf, необходимо выполнить команду /etc/lilo, чтобы изменения вступили в силу. Эта команда (которая в руководстве называется map-installer) устанавливает вторичный загрузчик системы, который будет активизирован во время следующей загрузки машины. Прежде, чем запускать /etc/lilo для модификации загрузочных процедур, выполните эту команду с параметром -t. При этом будет выполнена вся процедура инсталляции загрузчика, кроме изменения map-файла, записи модифицированного загрузочного сектора и изменения таблицы разбиения диска, тоесть выполнен тест нового варианта. Если добавить еще опцию -v, вы получите более подробную информацию о том, что будет делать команда /etc/lilo.
Когда /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) не изменялся со времени инсталляции.
Стандартный MBR от MS-DOS может быть восстановлен также, если воспользоваться загрузочной дискетой системы DOS, восстановив MBR командой fdisk /mbr. Она изменяет только код программы-загрузчика в MBR, не изменяя таблицу разбиения диска.
- После переустановки загрузчика надо перезагрузить компьютер, опробовав разные варианты загрузки.
В заключение подраздела приведем некоторые сведения о том, какие затруднения могут возникать при использовании LILO.
Когда LILO загружается, он выводит на дисплей слово "LILO". При этом вывод каждой буквы обозначает завершение определенного действия или этапа загрузки LILO. Если загрузка сорвется, то по числу выведенных букв можно судить о причине возникновения проблемы.
- Ничего не выведено — никакая часть LILO не была загружена. Либо LILO не был установлен, либо раздел, на котором он находится, не является активным.
- L [код ошибки] — первичный загрузчик загрузился и стартовал (на него передано управление), но он не сумел загрузить вторичный загрузчик. Двухзначный код ошибки указывает на конкретную причину проблемы (расшифровку кодов надо искать в технической документации на LILO). Обычно это связано с дефектами носителя или неправильно заданной геометрией диска. Если только LILO не остановился на этом этапе, выдавая бесконечную последовательность кодов ошибки, проблема обычно легко решаема.
- LI — первичный загрузчик сумел загрузить вторичный загрузчик, но не сумел запустить его на выполнение. Это может быть вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
- LIL — вторичный загрузчик запустился, но не смог загрузить таблицу дескрипторов из map-файла. Причина обычно состоит в наличии дефектов на диске или неправильно заданной геометрией диска.
- LIL? — вторичный загрузчик был загружен по неправильному адресу. Обычно вызвано ошибкой в задании геометрии диска или тем, что файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
- LIL- — таблица дескрипторов разрушена. Обычно вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
- LILO — все части LILO успешно загружены.
2.7.2. Установка других операционных систем после Linux
При инсталляции MS-DOS и Windows 95/98 ее стандартный загрузчик независимо от вашего желания записывается в Master Boot Record (MBR), а признак активности в таблице разделов ставится на раздел MS-DOS (Windows 95/98). А стандартный загрузчик MS-DOS и Windows 95/98 умеет только передавать управление на первый сектор активного раздела. Поэтому, если вы вначале установите Linux, а потом будете ставить Windows 95/98 или MS-DOS, то Linux перестанет загружаться. Говорят, что Windows NT и 2000 загрузчик из MBR не трогают (но сам я этот факт не проверял). Восстановить загрузку LILO можно либо путем перезапуска /sbin/lilo (если LILO установлен в MBR), либо сделав активным раздел LILO (если он установлен в первичный раздел).
С проблемами, возникающими при установке после Linux другой ОС, обычно можно справиться, загрузившись в Linux с помощью загрузочной дискеты, откорректировав конфигурационный файл LILO (добавив вызов новой ОС) и запустив /sbin/lilo.
2.7.3. Перенос каталога /boot в DOS-раздел
Последние версии ядра Linux поддерживают возможность размещения файлов, необходимых на этапе загрузки, в файловой системе MS-DOS (или UMSDOS). Поскольку в большинстве случаев разделы DOS занимают как раз те области диска, где связанные с BIOS ограничения не действуют, это позволяет решить многие проблемы больших дисков, возникающие в тех случаях, когда раздел, отведенный для Linux, не может быть использован для размещения в нем каталога /boot.
Для того, чтобы реализовать такой вариант загрузки, DOS-раздел монтируется в режиме чтение/запись, создается каталог (например, /dos/linux), в который перемещаются все файлы из каталога /boot и образы ядер Linux, каталог /boot заменяется символической ссылкой на каталог /dos/linux, новое местоположение каталога /boot указывается в файле /etc/lilo.conf, и, наконец, запускается /sbin/lilo.
2.8. Загрузка Linux из MS-DOS с помощью loadlin.exe
Не только загрузочные файлы и образы ядра могут располагаться в DOS-разделе, но и вообще вся загрузка Linux может быть организована из DOS. Для этого используется специальная программа loadlin.exe, разработанная Хансом Лерменом (Hans Lermen, lermen@elserv.ffm.fgan.de). Эта программа используется в таких дистрибутивах, как Red Hat, для организации процедур установки Linux с CD-ROM. Поэтому она имеется на дистрибутивном диске, а, следовательно, всегда имеется в вашем распоряжении.
Loadlin.exe предоставляет вам самый безопасный способ загрузки Linux с жесткого диска, если вы имеете на нем загрузочный (активный) DOS- или Windows-раздел. Этот вариант организации загрузки Linux можно особенно порекомендовать начинающим пользователям Linux. Большинство новичков, устанавливающих Linux, слишком нетерпеливы для того, чтобы читать очень хорошее, но очень длинное описание загрузчика LILO, прилагаемое к этой программе (да еще по-английски!). Поэтому они часто используют его некорректно, в результате чего теряют возможность вообще загрузить какую-нибудь операционную систему (я тоже попадал в такую ситуацию). Для таких пользователей гораздо удобнее начать освоение Linux, используя для загрузки loadlin.exe.
Программа loadlin.exe не требует какой-либо установки, надо только разместить саму программу и образы ядра на одном из дисков, доступных в DOS. С помощью этой программы можно загрузить Linux с CD или сетевого диска, не используя загрузочной дискеты. Это делает loadlin.exe великолепным инструментом на те случаи, когда необходимо загрузить Linux после какого-то сбоя в работе загрузчика LILO.
Версия 1.6 loadlin.exe работает практически при любых конфигурациях DOS и имеет очень мало ограничений. Она может использовать расширенную память и может загружать большие ядра (bzImages) и образы виртуальных дисков (initrd) непосредственно в верхние области ОП.
Применение loadlin.exe не означает, что Linux работает под DOS, так как эта программа обеспечивает "логическую перезагрузку" вашего компьютера, после чего DOS полностью заменяется на Linux. Если вы хотите вернуться в DOS, вы должны перезагрузить компьютер, например, с помощью команды reboot.
Итак, что же необходимо для того, чтобы воспользоваться программой loadlin.exe.
- На вашем компьютере (конечно, с процессором 386 или выше) должна быть установлена DOS или WINDOWS 95.
- Нужно иметь сжатые образы ядра (zImage, bzImage).
Примечание.
zImage — это старый бинарный формат ядра, bzImage — это более новый формат (номер ядра версии больше 1.3.73), который может иметь размер до 1 Мбайта, следовательно, разархивированное ядро может иметь размер до 2 Мбайт. Далее будем говорить только о файлах zImage, хотя вы можете всюду заменить zImage на bzImage.
- Саму программу loadlin.exe, которую вы можете найти на дистрибутивном диске как в разархивированном виде, так и в пакете LODLIN16.TGZ, который содержит, кроме того, руководство по ее использованию DOC\MANUAL.TXT, пример файла задания параметров DOC\TEST.PAR, и руководство по заданию параметров DOC\PARAMS.DOC (не забывайте, что все это файлы DОS).
Если вы запустите команду loadlin без параметров:
C:\LOADLIN> loadlin
то получите подсказку по использованию программы. Удобнее может оказаться запустить ту же программу с параметром more (в стиле Linux):
C:\LOADLIN> loadlin | more
Теперь мы можем рассмотреть последовательность действий по установке Linux в том варианте, когда загружаться она будет с помощью loadlin.exe.
- Выделите раздел для Linux (как это сделать — см. разд. 2.5).
- Установите Linux в выделенный раздел. При этом LILO установите в первый сектор Linux-раздела, чтобы не перезаписать MBR и не потерять возможность загружаться в Windows.
- После завершения процедур установки загрузите Linux (если не получается по-другому, то используйте загрузочную дискету). Смонтируйте DOS-раздел (будем считать, что в Linux DOS-раздел именуется как /dev/hda1, а Linux-раздел — как /dev/hda3):
root]# mount -t vfat /dev/hda1 /mnt/C
Создайте каталог /mnt/C/loadlin и разархивируйте в него содержимое файла LODLIN16.TGZ с дистрибутивного CD-диска Linux. Кроме того, поместите туда же файл с образом ядра из каталога /boot. Найти нужный файл образа ядра можно с помощью файла /etc/lilo.conf: найдите в нем строку "image=..." и вы увидите нужное имя справа от знака равенства. У меня, например, полное имя этого файла — vmlinuz-2.2.16-3bc, но я при копировании в каталог /mnt/C/loadlin переименовал его в vmlinuz; это имя и буду использовать далее в примерах.
- Теперь перезагрузите компьютер в DOS. Если у вас есть возможность загрузить непосредственно DOS, то делайте это сразу, а если нет, то загружайте Windows, при появлении сообщения "Загрузка Windows 95" нажимайте клавишу и выбирайте вариант Command prompt only. Если вы не успели нажать на клавишу , то можно дождаться завершения загрузки Windows 95, после чего воспользоваться кнопкой Пуск, выбрать команду Завершение работы и далее — команду Перезагрузить компьютер в режиме эмуляции DOS.
После выхода в режим DOS перейдите в каталог C:\LOADLIN (CD \LOADLIN) и выполните команду
C:\LOADLIN> LOADLIN vmlinuz /dev/hda3 ro vga=ask
или, если вы хотите загрузить ядро с установкой RAM-диска:
C:\LOADLIN> LOADLIN vmlinuz /dev/ram rw initrd=diskimage
Можно также записать все аргументы команды loadlin.exe в файл (например, с именем param) и вызвать ту же команду следующим образом:
C:\LOADLIN> LOADLIN @params
Такая возможность особенно полезна для тех случаев, когда вы задаете много аргументов командной строки, и ее длина становится больше 127 символов. Полное описание всех возможных аргументов (параметров) команды loadlin.exe вы сможете найти в файле PARAMS.DOC или в Интернете на сайтах http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html и http://rsphy1.anu.edu/~gpg109/BootPrompt-HOWTO.html.
Теперь вы можете пользоваться этим способом загрузки Linux. Единственное, что остается, это избавиться от необходимости каждый раз при загрузке вводить команду loadlin со всеми параметрами. Для облегчения можно прописать вызов loadlin в файл autoexec.bat или создать командный файл (например, linux.bat), с помощью которого просто запускать Linux, предварительно загрузившись в режиме DOS. Я думаю, что приведенных выше данных вполне достаточно для создания необходимого bat-файла. Если же у вас что-то не получится, загляните в статью А. Московских [П4.13], где этот вопрос рассмотрен более подробно. Там, в частности, отмечается, что если на машине установлены Windows 95 и Linux, то нельзя пытаться загружать Linux из графической оболочки и требуется отключить некоторые опции в скрытом файле C:\MSDOS.SYS (это простой текстовый файл), а именно, добавить в него две строки:
BootGUI=0
Logo=0
Первая строка отключает загрузку графической оболочки, и выбор команды меню W95 будет вызывать переход к обычной командной строке ДОС. (Чтобы загрузить графическую оболочку, вы должны будете ввести команду C:> win).
Logo=0 отключает вывод логотипа Windows. Дело в том, что для некоторых графических адаптеров Linux может выдавать после загрузки "пустой" экран, если перед его загрузкой отображался логотип Windows.
В списке литературы в конце книги я привожу небольшой список других источников и ссылок на материалы, имеющие отношение к вопросу установки нескольких ОС на одном компьютере. Так что в случае, если в моей книге рассмотрены не все вопросы, и вы столкнетесь с какими-то сложностями, ищите ответ в указанных материалах.