Перейти к содержанию

x86 MultiBoot FAQ

Материал из Викиучебника — открытых книг для открытого мира

Вопросы и ответы по мультизагрузке на x86

В версиях от апреля 2006 года и младше FAQ составил eugrus

Основы загрузки на x86 архитектуре

[править]

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

Как поставить несколько ОС на один x86 компьютер?

[править]

Данный FAQ содержит лаконичные ответы на узко-конкретизированные вопросы. Если вы хотите широко, но в общих чертах изучить вопрос, вам настоятельно рекомендуется прочесть статью http://unixforums.org.ru/index.php?t=2

Структура жёсткого диска

[править]

Что такое сектор жёсткого диска?

[править]

Жёсткий диск состоит из секторов, каждый из которых представляет собой блок из 512 (два в девятой степени) байт.

Какие бывают виды разделов?

[править]

Архитектура жёстких дисков позволяет создание не более 4 физических (первичных) разделов (primary partitions) из-за ограничения таблицы разделов в 64 байта (см. п. 1.2.3.).

Для чего используется первый сектор жёсткого диска?

[править]

446 байтов используются для хранения Главной Загрузочной Записи (Master Boot Record - MBR) (см. п. 1.3.2.) и 64 - для Таблицы Разделов (Partition Table - PT) — таблицы разбиения на (физические) разделы, где явным образом прописан каждый. 2 байта занимает сигнатура (0x55 0xAA).

Каким образом реализуется архитектура логических разделов?

[править]

Создаётся один физический раздел (primary partition), который будет служить контейнером для логических — расширенный раздел (extended partition). В первом секторе его первого логического раздела помимо бутсектора содержится указание на положение второго логического раздела, то же сделано и во втором, и так до бесконечности. Такую архитектуру разбиения на разделы поддерживают практически все ОС, хотя некоторые (н.п. FreeBSD) и требуют установку на физический раздел.

Бутсекторы

[править]

Что такое бутсектор?

[править]

Загрузочный сектор, или Бутсектор (Boot sector) — сектор диска, в котором размещена программа, являющаяся звеном в запуске ОС.

Что такое MBR?

[править]

MBR (Master Boot Record) — код загрузки, расположенный в первых 446 байтах первого сектора Master Disk.

Каких видов бывают MBR?

[править]

MBR можно разделить на MBR, запускающий бутсектор активного раздела (такая архитектура используется с DOS и NTLDR) и иные MBR, самостоятельно запускающие некоторое звено загрузки.

Что такое бутсектор раздела?

[править]

При первой схеме загрузки (см. п.1.3.3.) — бутсектор, лежащий в первом секторе раздела, запускаемый MBR и запускающий следующее звено загрузки.

Что такое активный раздел?

[править]

При первой схеме загрузки (см. п.1.3.3.) MBR будет запускать бутсектор раздела, помеченного активным.

Используемые средства

[править]

Средства для работы с разделами

[править]

DOS FDISK

[править]

Работа с DOS FDISK подробно описана в статье http://web.archive.org/web/20051108004351/http://unixforums.org.ru/index.php?t=2

Другие средства

[править]

Работа с основными средствами partitioning под Linux описана в статье http://www.linuxcenter.ru/lib/books/partitioning

Средства для прямой работы с бутсекторами

[править]

dd в UNIX

[править]

Зачем нужна команда dd в UNIX-системах?

[править]

Команда dd предназначена для копирования и модификации необходимых частей файлов.

Все её параметры можно узнать из man dd.

Какова может быть функция команды dd при работе с бутсекторами?

[править]

Так как в UNIX устройство является файлом, то вы вполне можете использовать команду dd для переноса определённой части содержимого жесткого диска в файл, либо наоборот.

Как с помощью команды dd поместить копию MBR в файл?

[править]

В Linux для IDE диска: dd if=/dev/hda of=file bs=384 count=1

Во FreeBSD для IDE диска: dd if=/dev/ad0 of=file bs=384 count=1

Как с помощью команды dd поместить копию бутсектора раздела в файл?

[править]

Для первого раздела первого IDE диска в Linux: dd if=/dev/hda1 of=file bs=84 count=1

Для первого раздела первого IDE диска во FreeBSD: dd if=/dev/ad0s1 of=file bs=84 count=1

Как с помощью команды dd разместить файл в MBR?

[править]

В Linux для IDE диска: dd if=file of=/dev/hda bs=384 count=1

Во FreeBSD для IDE диска: dd if=file of=/dev/ad0 bs=384 count=1

В Solaris: dd if=file of=/dev/rdsk/c0d0p0 bs=384 count=1

Как с помощью команды dd разместить файл в бутсекторе?

[править]

Для первого раздела первого диска в Linux: dd if=file of=/dev/hda1 bs=84 count=1

Средства под DOS

[править]

DOS и Windows в работе с устройствами не свойственна гибкость, но вы можете воспользоваться специализированными программами, на пример, bootsect.exe, или использовать hex-редактор дисков для ручного переноса.

Независимые от жёсткого диска с ОС

[править]

DOS-клоны обладают простейшим средством для работы с разделами DOS Fdisk

Для создания дискеты с копией DOS достаточно воспользоваться двумя командами под самой системой:

format a:

sys a:

либо одной командой (не во всех версиях DOS)

format a: /s

Live Linux

[править]

Какой мне использовать LiveCD дистрибутив?

[править]

Список LiveCD дистрибутивов может быть найден по адресу http://distrowatch.com/dwres.php?resourceН

На данный момент наиболее популярным является Knoppix, но специально для rescue целей большинство установочных дисков Linux-дистрибутивов предоставляют возможность попасть в Shell.

Как с помощью LiveCD дистрибутива Linux использовать команды и данные установленной Linux-системы?

[править]

Залогинившись в качестве root вам будет нужно примонтировать коренной раздел вашей Linux-системы (если он отделён, то ещё /usr раздел), для этого можно воспользоваться командой mount -t ext2 /dev/hda /mnt, где ext2 — mount-обозначение вашей ФС, /dev/hda — ваш root-раздел, а /mnt — точка монтирования. После этого воспользуйтесь командой mount --bind /dev /where/chroot/dev (в противном случае после chroot вы потеряете доступ к устройствам). И последним этапом идёт замена корня: chroot /mnt

Windows Recovery Console

[править]

На случай возникновения проблем, не позволяющих запустить NT-систему Microsoft включила в комплект установочного диска Windows Recovery Console.

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

На стадии Welcome to Setup! инсталлятор предложит нажать <Enter> для [подтверждения] установки,
<R> — для запуска консоли восстановления или <Q> — для выхода из установки,
соответственно необходимо будет воспользоваться второй возможностью.

Восстановление бутсекторов различных загрузчиков

[править]

Ручное восстановление

[править]
   Смотрите часть 2.2.

После установки очередной ОС был затёрт DOS-MBR (запускающий бутсектор раздела). Как его восстановить?

[править]

fdisk /mbr в DOS (Windows 9x),
fixmbr (Windows NT),
Bootrec.exe /FixMbr (Windows Vista/7)

После установки очередной ОС не запускается загрузчик GRUB. Как его восстановить в MBR?

[править]

Загрузитесь, используя дискету с загрузчиком, либо прочтите пункт 2.3.2.2.

Попав в shell, воспользуйтесь командой grub-install /dev/hda для размещения в MBR загрузочного сектора GRUB, если вы используете SCSI-диск, то, возможно, вместо этого потребуется команда grub-install /dev/sda

После установки очередной ОС не запускается загрузчик LILO. Как его восстановить в MBR?

[править]

Загрузитесь, используя дискету с загрузчиком, либо прочтите пункт 2.3.2.2. Попав в shell, воспользуйтесь командой lilo -b /dev/hda для размещения в MBR загрузочного сектора LILO, если вы используете SCSI-диск, то возможно вместо этого потребуется команда lilo -b /dev/sda

После установки очередной ОС не запускается загрузчик FreeBSD Loader. Как его восстановить в MBR?

[править]

Загрузитесь с установочного диска и выберите fixit в меню sysinstall Попав в fixit-консоль выполните команду fdisk -B -b /boot/boot0 /dev/ad0 для IDE-диска или fdisk -B -b /boot/boot0 /dev/da0 для SCSI-диска.

После установки очередной ОС был затёрт загрузчик Solaris Bootloader. Я хочу восстановить его в MBR, как мне это сделать?

[править]

Вам необходимо разместить /usr/lib/fs/ufs/mboot в MBR. (смотрите раздел 2.2.)

После установки очередной ОС загрузчик NTLoader больше не грузится. Как его восстановить?

[править]

Могут быть четыре причины:

1. затёрт MBR, загружающий бутсектор активного раздела

решение: команда fixmbr в Windows Recovery Console

2. затёрт бутсектор NTLDR в активном разделе

решение: команда fixboot c: в Windows Recovery Console

3. изменён активный раздел

решение: сделать активным раздел с бутсектором NTLDR, это можно сделать в DOS FDISK

4. одновременно второе и первое

решение: последовательно команды fixmbr и fixboot c: в Windows Recovery Console

5. из корневого каталога C: были удалены файлы ntdetect.com и/или ntldr

решение: скопировать их из корня установочного диска

Установка и восстановление GRUB

[править]

Как создать загрузочную дискету GRUB?

[править]

Если файлы GRUB расположены в каталоге /boot/grub, а дискета находится в дисководе /dev/fd0, то можно воспользоваться командой: cd /boot/grub && dd if=stage1 of=/dev/fd0 bsQ2 count=1 && dd if=stage2 of=/dev/fd0 bsQ2 seek=1

Как создать загрузочный CD GRUB?

[править]

Этот процесс подробно описан в статье Мультизагрузочный CD с использованием GRUB

Как установить GRUB из GRUB Shell?

[править]

1.) распакуйте установочный архив grub

2.) загрузитесь с загрузочной дисекты GRUB и воспользуйтесь командами

root (hd0,0) # где (hd0,0) - раздел с GRUB
setup (hd0) # поместить бутсектор grub в MBR

Как установить GRUB из UNIX Shell?

[править]

Смотрите пункт 3.3.

Общие сведения об эксплуатации GRUB

[править]

Как именуются разделы в GRUB?

[править]

Согласно стандартному device.map:

(fd0) — floppy дисковод

(hd0) — primary hard disk

(hd1) — slave hard disk

Разделы именуются после диска через запятую по порядковому номеру, начиная с нуля

Например:

(hd0,0) — первый раздел первого диска

(hd1,2) — третий раздел второго диска

BSD слайсы именуются через запятую буквами латинского алфавита:

Например:

(hd0,0,a)

Какие конфигурационные файлы использует GRUB?

[править]

/boot/grub/device.map — таблица устройств

/boot/grub/grub.conf или /boot/grub/menu.lst (один из них ссылка на другой) — стандартный конфигурационный файл

Можно ли использовать/редактировать команды GRUB без правки конфигурационных файлов?

[править]

Для одноразового редактирования команд пункта меню нужно нажать E, а затем ещё раз E над нужным пунктом. По окончанию редактирования пункта используется Enter. Для загрузки в новой конфигурации B.

Для перехода в чистый командный режим используется C. Для загрузки из командного режима требуется дополнительная команда — boot

Загрузка систем, поддерживающих GNU Multiboot Specification

[править]

Ядра каких систем может загружать GRUB?

[править]

Для того, чтобы GRUB мог работать с ядром оно должно поддерживать GNU Multiboot Specification

Ознакомиться со спецификацией и общей информацией по загрузке ELF ядер можно в статьях http://myosix.fatal.ru/html/doc/multiboot.html и http://myosix.fatal.ru/html/doc/grub.html

Как загрузить ядро Hurd с помощью GRUB?

[править]

При локальной загрузке Hurd помимо ядра требует подгрузки как минимум двух модулей:

title GNU/Hurd # установим имя пункта в меню (только для конфигурационного файла)
root (hd0,0) # установим рабочий раздел (смотрите пункт 4.2.1.)
kernel /boot/gnumach.gz rootЮvice:hd2s1 -s # выберем ядро (параметр root указывается в Hurd-обозначении разделов)
module /hurd/ext2fs.static --multiboot-command-line=${kernel-command-line} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T typed ${root} $(task-create) $(task-resume) # подгрузим модуль файловой системы
module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) # подгрузим модуль динамического загрузчика
boot # начнём процесс загрузки (только для командного режима)

Как загрузить ядро Linux с помощью GRUB?

[править]

Рассмотрим ситуацию, в которой /boot находится внутри корневого раздела:

title GNU/Linux # установим имя пункта в меню (только для конфигурационного файла)
root (hd0,0) # установим рабочий раздел (смотрите пункт 4.2.1.)
kernel /boot/vmlinuz-[версия] ro root=[корневой раздел в linux наименовании]
boot # начнём процесс загрузки (только для командного режима)

Если /boot вынесен на отдельный раздел, то в качестве параметра команды kernel не надо указывать этот каталог перед названием ядра.

Как загрузить ядро NetBSD с помощью GRUB?

[править]

Ядро NetBSD доступно в нескольких исполняемых форматах. Для загрузки из GRUB может быть использовано ядро в ELF-формате:

title NetBSD # установим имя пункта в меню (только для конфигурационного файла)
root (hd0,0,a) # установим рабочий раздел (смотрите пункт 4.2.1.)
kernel --type=netbsd /netbsd-elf
boot # начнём процесс загрузки (только для командного режима)

Как загрузить FreeBSD Loader с помощью GRUB?

[править]

В случае FreeBSD реккомендуется загружать не само ядро, а FreeBSD Loader:

title FreeBSD # установим имя пункта в меню (только для конфигурационного файла)
root (hd0,0,a) # установим рабочий раздел (смотрите пункт 4.2.1.)
kernel /boot/loader
boot # начнём процесс загрузки (только для командного режима)

Как загрузить OpenSolaris с помощью GRUB?

[править]

Загрузка OpenSolaris посредство GRUB подробно описана в статье http://www.sun.com/bigadmin/features/articles/grub_boot_solaris.html

title Solaris 10
root (hd0,0,a)
kernel /platform/i86pc/multiboot
module /platform/i86pc/boot_archive

Цепная загрузка

[править]

Как загрузить бутсектор из файла?

[править]

В данном примере бутсектор находится в файле bootsect.file в корне первого раздела первого диска.

rootnoverify (hd0,0) # устанавливаем корнем первый раздел первого диска (rootnoverify в отличии от root не станет определять его ФС и читать)
chainloader /bootsect.file # загружаем файл с бутсектором
boot # необходимо для начала загрузки из командного режима (в конфиге можно пропустить)

Как загрузить из GRUB бутсектор раздела?

[править]

В данном примере бутсектор находится в первом секторе первого раздела перовго диска.

root (hd0,0) # устанавливаем корнем первый раздел первого диска
chainloader +1 # загружаем бутсектором из первого сектора раздела
boot # необходимо для начала загрузки из командного режима (в конфиге можно пропустить)

Мэпинг с GRUB

[править]

Как выдать один раздел за другой?

[править]

Рассмотрим установку Win98 и WinME на один компьютер с имеющимся GRUB.

В общем случае проблема здесь в том, что обе системы разместят свои системные файлы на первом разделе диска, и вторая win9x перепишет файлы первой.

С GRUB эту проблему решить очень просто.

Пусть есть /dev/hda1 на который мы хотим поставить Win98, и пусть есть /dev/hda2 на который мы хотим поставить WinME, и пусть есть /dev/hda3, на котором установлены Linux и GRUB.

Для удобства проведения эксперимента поместим загрузочный сектор GRUB в первый блок /dev/hda3 (смотрите раздел 2.2.)

теперь сделаем активным /dev/hda1 и на него поставим Win98

теперь сделаем активным /dev/hda2 и на него поставим WinME

далее сделаем загрузочным /dev/hda3 и в /boot/grub/grub.conf пропишем:

title win98
root (hd0,0)
chainloader +1
makeactive

и

title winME
map (hd0,0) (hd0,1) # превращаем /dev/hda1 в /dev/hda2
map (hd0,1) (hd0,0) # превращаем /dev/hda2 в /dev/hda1
root (hd0,0) # устанавливаем разделом для работы первый раздел первого диска
makeactive # эмулируем метку активный на разделе
chainloader +1 # запускаем бутсектор раздела

Такой способ позволяет поставить на один компьютер нужное количество DOS-основанных систем.

Как сделать, чтобы ОС не видела раздел?

[править]

У проблемы, описанной в примере пункта 4.5.1. есть второе решение.

Предположим, что на первом разделе первого диска установлен Win98, а на втором разделе первого диска WinME и мы хотим, чтобы они не видели разделы друг друга.

Рассмотрим grub.conf, который в состоянии это обеспечить:

title win98
hide (hd0,1) # прячем раздел с winME от win98
unhide (hd0,0) # даём доступ к разделу с win98 для win98
root (hd0,0) # устанавливаем разделом для работы первый раздел первого диска
makeactive # эмулируем метку активный на разделе
chainloader +1 # запускаем бутсектор раздела
title winME
hide (hd0,0) # прячем раздел с win98 от winME
unhide (hd0,1) # даём доступ к разделу с winME для winME
root (hd0,1) # устанавливаем разделом для работы второй раздел первого диска
makeactive # эмулируем метку активный на разделе
chainloader +1 # запускаем бутсектор раздела

NTLoader

[править]

Установка и восстановление NTLDR

[править]

см. пункт 3.7.

Общие сведения об эксплуатации NTLoader

[править]

Как именуются разделы в boot.ini?

[править]

В NTLoader применяется два способа именования дисков.

Первый способ это DOS-именование разделов, соответствующее их именованию в самой NT-системе.

Второй способ это ARC-именование, оно подробно описано в статье Файл BOOT.INI и принятые имена ARC-путей, а также их использование.

Хотя в автоматически генерируемом boot.ini для NT-систем используется ARC-наименование, а для бутсекторов в файле DOS-наименование, оба могут использоваться с любым типом загрузки.

Какие секции составляют boot.ini?

[править]

Файл boot.ini состоит из двух секций: [boot loader] и [operating systems]

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

Как загрузить NT-систему с помощью NTLoader?

[править]

Для загрузки NT-системы в секции [operating systems] файла boot.ini должна стоять строка вида:

disk\%windir%="label"

Где disk нужно заменить на ARC или DOS наименование (см. пункт 5.2.1.) раздела, на котором находится системный каталог NT системы, %windir% заменить на имя системного каталога NT-системы, а label на желаемое наименование пункта, загружающего NT-систему.

Как загрузить бутсектор из файла с помощью NTLoader?

[править]

Для загрузки бутсектора из файла в секции [operating systems] файла boot.ini должна стоять строка вида:

disk\bootsector.file="label"

Где disk нужно заменить на ARC или DOS наименование (см. пункт 5.2.1.) раздела, на котором находится системный каталог NT системы, bootsector.file заменить на имя файла с бутсектором на этом разделе, а label на желаемое наименование пункта, загружающего бутсектор из файла.

Как загрузить бутсектор из первого сектора раздела с помощью NTLoader?

[править]

Ответ: никак. Если хочется использовать именно NTLoader, то для начала придётся сохранить этот бутсектор в файле (см. раздел 2.2.).

FreeBSD Loader

[править]

Как установить/восстановить FreeBSD Loader?

[править]

Смотрите пункт 3.5 #После установки очередной ОС не запускается загрузчик FreeBSD Loader. Как его восстановить в MBR?

Solaris Loader

[править]

Как установить/восстановить Solaris Loader?

[править]

Смотрите пункт 3.6 #После установки очередной ОС был затёрт загрузчик Solaris Bootloader. Я хочу восстановить его в MBR, как мне это сделать?

Об этом документе

[править]

Кем написан этот документ?

[править]

В версиях 0.9 (от апреля 2006 года) и младше этот FAQ был полностью составлен Фишгаловым Евгением (eugrus)

Как я могу использовать этот документ?

[править]

До 26 марта 2008 года документ был размещён на сайте Russian UNIX Forums, его копирование было запрещено.

С 26 марта 2008 года автор публикует этот документ под публичным свободным лицензионным соглашением GNU FDL.