Russian x86 MultiBoot FAQ
Материал из Викиучебника
Вопросы и ответы по мультизагрузке на x86
v.0.9
В версиях 0.9 (от апреля 2006 года) и младше FAQ составлен eugrus
[править] Основы загрузки на 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/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-клоны обладают простейшим средством для работы с разделами 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/hda2 и на него поставим WinME
далее сделаем загрузочным /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.