Russian x86 MultiBoot FAQ

Материал из Викиучебника

Перейти к: навигация, поиск

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

v.0.9


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

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

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


Содержание

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

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

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

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

[править] Структура жесткого диска

[править] Что такое сектор жесткого диска?

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

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

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

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

384 байта используются для хранения MBR (см. п. 1.3.2.) и 128 для PT (Partition Table) - таблицы разбиения на (физические) разделы, где явным образом прописан каждый.

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

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

[править] Бутсекторы

[править] Что такое бутсектор?

Бутсектор - размещённая в одном секторе диска программа, являющаяся звеном в запуске ОС.

[править] Что такое MBR?

MBR (Master Boot Record) - бутсектор, расположенный в первых 384 байтах первого сектора Master Disk.

[править] Каких видов бывают MBR?

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

[править] Что такое бутсектор раздела?

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

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

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

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

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

[править] DOS FDISK

Работа с DOS FDISK подробно описана в статье 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/ad0a of=file bs=84 count=1

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

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

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

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

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

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

[править] Средства под DOS

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

[править] Независимые от жёсткого диска с ОС

[править] DOS

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

[править] После установки очередной ОС не запускается загрузчик 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?

Если файлы 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 не надо указывать этот каталог перед названием ядра.

Следует отметить, что ядро Linux имеет огромное количесвто параметров. Для консультации по какому-то их них можно обратиться в раздел Russian UNIX Forums - Linux/Ядро

[править] Как загрузить ядро 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/hda3 и в /boot/grub/grub.conf пропишем:


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

и


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.