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-клоны обладают простейшим средством для работы с разделами 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?
[править]Если файлы 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.