Устанавливаем несколько операционных систем (EasyBCD)
Достаточно часто возникает потребность в установке на компьютер нескольких операционных систем. Это происходит по различным причинам: специфика работы, желание познать новые разработки и другие самые разнообразные варианты. Поэтому в данной статье мы поговорим о том, как же правильно установить более одной операционной системы на компьютер.
Пожалуй, мы рассмотрим парочку наиболее популярных связок ОС. Сразу замечу, что я приведу лишь общее описание установки, не вникая в её рутинные подробности. Итак, поехали…
Установка Windows Xp + Windows 7
Для установки такой связки операционных систем нам понадобится специальный софт в лице EasyBCD. Если просто установить эти две операционные системы, то будет загружаться именно та, которую Вы поставили последней. Это происходит за счёт того, что Windows просто-напросто «затирает» загрузчики всех операционных систем, которые мирно «жили» до неё и оставляет лишь один для «себя любимой». Поэтому для начала мы качаем программку Easy BCD (скачать) и оставляем инсталлятор на каком-нибудь нейтральном файловом диске, или же её можно скачать после установки одной из версий Windows. Итак, приступаем к установке первой версии Windows (7 или ХP, неважно в какой последовательности). Когда первая версия Windows установлена, смело ставим вторую. Но, устанавливать ее, желательно на отдельный раздел. После установки второй ОС Windows, мы загружаемся и устанавливаем в систему ранее скачанную программку EasyBCD.
Интерфейс программы достаточно прост и понятен. Человек, который знает азы английского языка, может с лёгкостью разобраться с данной программой.
Когда Вы запустите программу EasyBCD, то увидите перед собой вот такое вот окно (рис.1):
Рис.1
Как Вы видите у нас имеется загрузчик Windows 7, который определился по умолчанию, так как эта система была установлена второй и является текущей. Теперь нам необходимо добавить новую запись в загрузчик для того, чтобы во время включения копьютера, мы смогли увидеть строку с Windows XP и соответственно смогли загрузиться из-под неё. Для этого нажимаем на панели слева «Add New Entry», затем выбираем в пункте «Type» необходимую операционную систему (в данном случае это Windows XP), и жмём, уже справа, Add Entry.
Рис.2
Всё, запись в загрузчик добавлена, и когда Вы нажмёте на пункт View Settings, то увидите, что у Вас имеется уже две записи в загрузчике: Windows 7 и Windows XP. (рис.3)
Рис.3
Теперь можно смело перезагружать компьютер и загружаться из-под желаемой операционной системы.
Альтернатива при установке Linux + Windows (Xp, 7)
Такая «связка» встречается довольно часто, так как оторваться от «форточек» и ощутить вкус уверенного в себе «пингвина», желают многие. При таком варианте установки можно обойтись и без стороннего программного обеспечения, а воспользоваться стандартными средствами именно Linux. Для этого мы сначала устанавливаем Windows, старым добрым дедовским способом и без всяких хитромудростей. Затем, подходит чёред Linux, его мы устанавливаем вторым, опять же по причине удаления Windows всех «инородных» загрузчиков. Сразу хочу отметить тот факт, что в процессе установки Linux, перед Вами появится предложение «использовать весь диск», этого делать НЕ нужно, если Вам конечно дороги ваши данные. Необходимо же «откусить» отдельный раздел. После окончания установки Linux создаст загрузочное меню, где Вы сможете выбрать любую из операционных систем для загрузки. Но никто не лишает Вас права установки этих двух операционных систем с помощью EasyBCD.
Установка Linux + Windows + Win 7 + Другие системы
При таком варианте наиболее удобным методом будет являться, опять же EasyBCD. Только в данном случае нам необходимо создать запись в Add New Entry, для каждой из операционных систем, по примеру создания записи для Windows XP. На различных вкладках программы Вы можете перейти к созданию записей загрузчика, для Linux и Mac Os. (рис.4). Также при желании можно добавить и более старые операционные системы Windows: 95,98,NT и т.д.
Рис.4
Таким образом, мы вкратце рассмотрели варианты установки нескольких операционных систем на Ваш компьютер. Экспериментируйте с установкой различных ОС на компьютер, но будьте внимательны, так как в один прекрасный момент можно вообще не загрузиться 🙂 Также можете ознакомится с материалом по записи образа на флешку для дальнейшей установки.
Что такое загрузчик операционной системы?
Несмотря на то, что с работой загрузчика операционной системы так или иначе сталкивается любой из её пользователей, далеко не все подозревают даже о его существовании, не говоря уже о более глубоких познаниях в этой области. Причем речь не только о тех, кто использует Windows, — как показывает опыт, некоторый процент не осведомленных о существовании загрузчика ОС личностей есть и в среде тех, кто считает себя «линуксоидом».
Итак, загрузчик операционной системы — это программа, которая обеспечивает загрузку этой самой системы непосредственно после включения компьютера. Основная задача загрузчика — подготовить компьютер для загрузки ядра операционной системы (если, конечно, в такой предварительной подготовке есть какая-то необходимость), ну и, собственно, загрузить само ядро. В случае, если есть несколько ядер, доступных для загрузки, загрузчик нередко выполняет ещё и функцию средства диалога с пользователем, позволяя тому выбрать одно из доступных ядер.
Наиболее важный момент всей этой процедуры — это, конечно же, непосредственная загрузка в оперативную память ядра операционной системы. После того, как отработал код загрузчика BIOS, управление передается коду из загрузочного сектора (boot sector) активного раздела жесткого диска, хотя в ряде случаев загрузка операционной системы может производиться исключительно средствами кода, записанного в BIOS. Вместе с тем, само ядро загружаемой системы не обязательно берется загрузчиком с жесткого диска — существуют и другие способы, например, получение кода ядра по сети или через внешние порты компьютера (что особенно характерно для стадии отладки разрабатываемого ядра). Часто используется многоуровневая загрузка, когда процесс работы загрузчика плавно перетекает в процесс работы самого ядра операционной системы путем последовательного вызова нескольких загружающих друг друга программ.
В наше время, в силу существования множества разных операционных систем, имеется и большое количество их загрузчиков. Самый распространенный — это, пожалуй, NTLDR, загрузчик систем семейства Windows NT до Windows XP включительно. В новых версиях Windows применяется загрузчик Windows Boot Manager, пришедший на смену NTLDR. Наиболее распространенными загрузчиками в мире Linux являются LILO (LInux LOader) и GRUB (Grand Unified Bootloader). Загрузчик Mac OS X называется BootX, загрузчик Linux и Solaris для машин с архитектурой SPARC имеет название SILO (SPARC Improved bootLOader). Существует также ряд достаточно известных в узких кругах загрузчиков для встраиваемых операционных систем — Das U-Boot, uMon, RedBoot, SyMon.
Вадим СТАНКЕВИЧ,
[email protected]
Минимальный multiboot загрузчик / Хабр
Эта статья объясняет как создать минимальное ядро операционной системы, используя стандарт мультизагрузки. По факту, оно будет просто загружаться и печатать OK
на экране. В последующих статьях мы расширим его, используя язык программирования Rust
.
Я попытался объяснить всё в деталях и оставить код максимально простым, насколько это возможно. Если у вас возникли вопросы, предложения или какие-либо проблемы, пожалуйста, оставьте комментарий или создайте таску на
. Исходный код доступен в репозитории.
Когда вы включаете компьютер, он загружает BIOS из специальной флэш памяти. BIOS
запускает тесты самопроверки и инициализацию аппаратного обеспечения, затем он ищет загрузочные устройства. Если было найдено хотя бы одно, он передаёт контроль загрузчику, который является небольшой частью запускаемого кода, сохранённого в начале устройства хранения. Загрузчик определяет местоположение образа ядра, находящегося на устройстве, и загружает его в память. Ему также необходимо переключить процессор в так называемый защищённый режим, потому что x86 процессоры по умолчанию стартуют в очень ограниченном реальном режиме (чтобы быть совместимыми с программами из 1978).
Мы не будем писать загрузчик, потому что это сам по себе сложный проект (если вы действительно хотите это сделать, почитайте об этом здесь). Вместо этого мы будем использовать один из многих испытанных загрузчиков для загрузки нашего ядра с CD-ROM. Но какой?
К счастью, есть стандарт загрузчика: спецификация мультизагрузки. Наше ядро должно лишь указать, что поддерживает спецификацию и любой совместимый загрузчик сможет загрузить его. Мы будем использовать спецификацию Multiboot 2
(PDF)
вместе с известным загрузчиком GRUB 2.
Чтобы сказать загрузчику о поддержке
, наше ядро должно начинаться с заголовка мультизагрузки
, который имеет следующий формат:
Field | Type | Value |
---|---|---|
магическое число | u32 | 0xE85250D6 |
архитектура | u32 | 0 для i386, 4 для MIPS |
длина заголовка | u32 | общий размер заголовка включая тэги |
контрольная сумма | u32 | -(магическое число + архитектура + длина заголовка) |
тэги | variable | |
завершающий тэг | (u16, u16, u32) | (0, 0, 8) |
В переводе на x86 ассемблер это будет выглядеть так (Intel
синтаксис):
section .multiboot_header
header_start:
dd 0xe85250d6 ; магическое число (multiboot 2)
dd 0 ; архитектура 0 (защищённый режим i386)
dd header_end - header_start ; длина заголовка
; контрольная сумма
dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))
; вставьте опциональные `multiboot` тэги здесь
; требуюется завершающий тэг
dw 0 ; тип
dw 0 ; флаги
dd 8 ; размер
header_end:
- заголовок будет записан в секцию, названную
.multiboot_header
(нам понадобится это позже), header_start
иheader_end
— это метки, которые указывают на месторасположение в памяти, мы используем их, чтобы вычислить длину заголовка,dd
означаетdefine double
(32bit) иdw
означаетdefine word
(16bit). Они просто выводят указанные 32bit/16bit константы,- константа
0x100000000
в вычислении контрольной суммы — это небольшой хак, чтобы избежать предупреждений компилятора.
Мы уже можем собрать данный файл (который я назвал multiboot_header.asm
) используя nasm
.
Установка nasm на `archlinux`
[loomaclin@loomaclin ~]$ yaourt nasm 1 extra/nasm 2.13.02-1 An 80x86 assembler designed for portability and modularity 2 extra/yasm 1.3.0-2 A rewrite of NASM to allow for multiple syntax supported (NASM, TASM, GAS, etc.) 3 aur/intel2gas 1.3.3-7 (3) (0.20) Converts assembly language files between NASM and GNU assembler syntax 4 aur/nasm-git 20150726-1 (1) (0.00) 80x86 assembler designed for portability and modularity 5 aur/sasm 3.9.0-1 (18) (0.61) Simple crossplatform IDE for NASM, MASM, GAS, FASM assembly languages 6 aur/yasm-git 1.3.0.r30.g6caf1518-1 (0) (0.00) A complete rewrite of the NASM assembler under the BSD License ==> Enter n° of packages to be installed (e.g., 1 2 3 or 1-3) ==> --------------------------------------------------------- ==> 1 [sudo] password for loomaclin: resolving dependencies... looking for conflicting packages... Packages (1) nasm-2.13.02-1 Total Download Size: 0.34 MiB Total Installed Size: 2.65 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... nasm-2.13.02-1-x86_64 346.0 KiB 1123K/s 00:00 [#############################################################################] 100% (1/1) checking keys in keyring [#############################################################################] 100% (1/1) checking package integrity [#############################################################################] 100% (1/1) loading package files [#############################################################################] 100% (1/1) checking for file conflicts [#############################################################################] 100% (1/1) checking available disk space [#############################################################################] 100% :: Processing package changes... (1/1) installing nasm [#############################################################################] 100% :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [loomaclin@loomaclin ~]$ nasm --version NASM version 2.13.02 compiled on Dec 10 2017 [loomaclin@loomaclin ~]$
Следующая команда произведёт плоский двоичный файл, результирующий файл будет содержать 24 байта (в little endian
, если вы работаете на x86 машине):
[loomaclin@loomaclin ~]$ cd IdeaProjects/
[loomaclin@loomaclin IdeaProjects]$ mkdir a_minimal_multiboot_kernel
[loomaclin@loomaclin IdeaProjects]$ cd a_minimal_multiboot_kernel/
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nano multiboot_header.asm
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nasm multiboot_header.asm
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ hexdump -x multiboot_header
0000000 50d6 e852 0000 0000 0018 0000 af12 17ad
0000010 0000 0000 0008 0000
0000018
[loomaclin@loomaclin a_minimal_multiboot_kernel]$
Чтобы загрузить наше ядро, мы должны добавить код, который сможет вызвать загрузчик. Давайте создадим файл boot.asm
:
global start
section .text
bits 32
start:
; печатает `OK` на экране
mov dword [0xb8000], 0x2f4b2f4f
hlt
Здесь есть несколько новых команд:
global
экспортирует метки (делает их публичными). Меткаstart
будет входной точкой в наше ядро, она должна быть публичной,.text
секция — это секция по умолчанию для исполняемого кода,bits 32
говорит о том, что следующие строки — это 32-битные инструкции. Это необходимо потому что процессор ещё находится в защищённом режиме, когдаGRUB
запускает наше ядро. Когда переключимся в Long mode в следующей статье, сможем запускатьbits 64
(64-битные инструкции),mov dword
инструкция помещает 32-битную константу0x2f4b2f4f
в адрес памятиb8000
(это выводитOK
на экран, объяснено будет в следующих статьях),hlt
— это инструкция, которая говорит процессору остановить выполнение команд.
После сборки, просмотра и дизассемблирования мы можем увидеть опкоды процессора в действии:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nano boot.asm
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nasm boot.asm
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ hexdump -x boot
0000000 05c7 8000 000b 2f4f 2f4b 00f4
000000b
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ ndisasm -b 32 boot
00000000 C70500800B004F2F mov dword [dword 0xb8000],0x2f4b2f4f
-4B2F
0000000A F4 hlt
[loomaclin@loomaclin a_minimal_multiboot_kernel]$
Чтобы загрузить наш исполняемый файл позже через GRUB
, он должен быть исполняемым ELF
файлом. Поэтому необходимо с помощью nasm
создать ELF
объектные файлы вместо простых бинарников. Для этого мы просто добавляем в аргументы -f elf64
.
Для создания самого ELF
исполняемого кода мы должны связать объектные файлы. Будем использовать кастомный скрипт для связывания, называемый linker.ld
:
ENTRY(start)
SECTIONS {
. = 1M;
.boot :
{
/* в начале оставим заголовк мультизагрузки */
*(.multiboot_header)
}
.text :
{
*(.text)
}
}
Переведём что написано на человеческий язык:
start
— это точка входа, загрузчик перейдёт к этой метке после загрузки ядра,. = 1M;
уставливает адрес загрузки первой секции с 1-го мегабайта, это стандарт расположения для загрузки ядра,- исполняемая часть имеет две секции: в начале
boot
и.text
после, - конечная секция
.text
будет содержать в себе все входящие секции.text
, - секции, именованные как
.multiboot_header
, будут добавлены в первую выходную секцию (.boot
), чтобы они располагались в начале исполняемого кода. Это необходимо, потому чтоGRUB
ожидает найти заголовок мультизагрузки в начале файла.
Давайте создадим ELF
объектные файлы и слинкуем их, используя вышеуказанный линкер скрипт:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nasm -f elf64 multiboot_header.asm
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nasm -f elf64 boot.asm
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ ld -n -o kernel.bin -T linker.ld multiboot_header.o boot.o
[loomaclin@loomaclin a_minimal_multiboot_kernel]$
Очень важно передать -n
(или --nmagic
) флаг линкеру, который отключает автоматическое выравнивание секций в исполняемом файле. В противном случае линкер может выравнить страницу секции .boot
в исполняемом файле. Если это произойдёт, GRUB
не сможет найти заголовок мультизагрузки, потому что он будет находиться уже не в начале.
Воспользуемся командой objdump
для того, чтобы вывести секции сгенерированного исполняемого файла и проверить, что .boot
секция имеет наименьшее смещение в файле:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ objdump -h kernel.bin
kernel.bin: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .boot 00000018 0000000000100000 0000000000100000 00000080 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .text 0000000b 0000000000100020 0000000000100020 000000a0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
[loomaclin@loomaclin a_minimal_multiboot_kernel]$
Примечание: командыld
иobjdump
платформо-зависимы. Если вы работаете не на x86_64 архитектуре, вы нуждаетесь в кросс компиляции binutils. После этого воспользуйтесьx86_64‑elf‑ld
иx86_64‑elf‑objdump
вместоld
иobjdump
соответственно.
Все персональные компьютеры, работающие на базе BIOS
, знают, как загружаться с CD-ROM, так что нам необходимо создать загружаемый образ CD-ROM, содержащий наше ядро и файлы загрузчика GRUB
в единственном файле, называемом ISO. Создайте следующую структуру директорий и скопируйте kernel.bin
в директорию boot
:
isofiles
└── boot
├── grub
│ └── grub.cfg
└── kernel.bin
grub.cfg
указывает имя файла нашего ядра и совместимость с multiboot 2
. Выглядит это так:
set timeout=0
set default=0
menuentry "my os" {
multiboot2 /boot/kernel.bin
boot
}
Исполняем команды:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ mkdir isofiles
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ mkdir isofiles/boot
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ mkdir isofiles/boot/grub
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ cp kernel.bin isofiles/boot/
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nano grub.cfg
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ cp grub.cfg isofiles/boot/grub/
Теперь мы можем создать загружаемый образ, используя следующую команду:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ grub-mkrescue -o os.iso isofiles
xorriso 1.4.8 : RockRidge filesystem manipulator, libburnia project.
Drive current: -outdev 'stdio:os.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 7675m free
Added to ISO image: directory '/'='/tmp/grub.jN4u6m'
xorriso : UPDATE : 898 files added in 1 seconds
Added to ISO image: directory '/'='/home/loomaclin/IdeaProjects/a_minimal_multiboot_kernel/isofiles'
xorriso : UPDATE : 902 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 512 bytes from file '/usr/lib/grub/i386-pc/boot_hybrid.img'
ISO image produced: 9920 sectors
Written to medium : 9920 sectors at LBA 0
Writing to 'stdio:os.iso' completed successfully.
Примечание: вызовgrub-mkrescue
может вызвать проблемы на некоторых платформах. Если она у вас не сработала, попробуйте следующие шаги:
- запустить команду с
--verbose
,- удостовериться, что библиотека
xorriso
установлена (xorriso
илиlibisoburn
пакет).
На `Archlinux пришлось поставить `libisoburn`
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ yaourt xorriso
1 extra/libisoburn 1.4.8-2
frontend for libraries libburn and libisofs
==> Enter n° of packages to be installed (e.g., 1 2 3 or 1-3)
==> — ==> 1
[sudo] password for loomaclin:
resolving dependencies…
looking for conflicting packages…
Packages (3) libburn-1.4.8-1 libisofs-1.4.8-1 libisoburn-1.4.8-2
Total Download Size: 1.15 MiB
Total Installed Size: 3.09 MiB
:: Proceed with installation? [Y/n]
:: Retrieving packages…
libburn-1.4.8-1-x86_64 259.7 KiB 911K/s 00:00 [#############################################################################] 100%
libisofs-1.4.8-1-x86_64 237.8 KiB 2.04M/s 00:00 [#############################################################################] 100%
libisoburn-1.4.8-2-x86_64 683.8 KiB 2.34M/s 00:00 [#############################################################################] 100%
(3/3) checking keys in keyring [#############################################################################] 100%
(3/3) checking package integrity [#############################################################################] 100%
(3/3) loading package files [#############################################################################] 100%
(3/3) checking for file conflicts [#############################################################################] 100%
(3/3) checking available disk space [#############################################################################] 100%
:: Processing package changes…
(1/3) installing libburn [#############################################################################] 100%
(2/3) installing libisofs [#############################################################################] 100%
(3/3) installing libisoburn
- если вы используете EFI-систему,
grub-mkrescue
попробует создатьEFI
образ по умолчанию. Вы можете задать аргумент-d /usr/lib/grub/i386-pc
, чтобы избавиться от этого поведения, или установить пакетmtools
и получить работающийEFI
образ - на некоторых системах команда названа
grub2-mkrescue
.
Пришло время загрузить нашу ОС. Для этого воспользуемся QEMU:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ qemu-system-x86_64 -cdrom os.iso
(qemu-system-x86_64:10878): Gtk-WARNING **: Allocating size to GtkScrollbar 0x7f2337e5a280 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?
(qemu-system-x86_64:10878): Gtk-WARNING **: Allocating size to GtkScrollbar 0x7f2337e5a480 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?
(qemu-system-x86_64:10878): Gtk-WARNING **: Allocating size to GtkScrollbar 0x7f2337e5a680 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?
Появится окно эмулятора:
Обратите внимание на зелёный текст OK
в верхнем левом углу. Если у вас это не работает, посмотрите секцию комментариев.
Резюмируем, что произошло:
- BIOS загружает загрузчик (GRUB) из виртуального CD-ROM (ISO).
- Загрузчик прочёл исполняемый код ядра и нашёл заголовок мультизагрузки.
- Скопировал секцию
.boot
и.text
в память (по адресу0x100000
и0x100020
). - Переместился к точке входа (
0x100020
, это можно узнать вызвавobjdump -f
). - Ядро вывело на экран текст
OK
зелёным цветом и остановило процессор.
Вы также можете протестировать это на настоящем железе. Необходимо записать получившийся образ на диск или USB накопитель и загрузиться с него.
Сейчас необходимо вызывать 4 команды в правильном порядке каждый раз, когда мы меняем файл. Это плохо. Давайте автоматизируем этот процесс, с помощью Makefile. Но для начала мы должны создать подходящую структуру директорий чтобы отделить архитектурно-зависимые файлы:
…
├── Makefile
└── src
└── arch
└── x86_64
├── multiboot_header.asm
├── boot.asm
├── linker.ld
└── grub.cfg
Создаём:
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ mkdir -p src/arch/x86_64
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ cp multiboot_header.asm src/arch/x86_64/
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ cp boot.asm src/arch/x86_64/
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ cp linker.ld src/arch/x86_64/
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ cp grub.cfg src/arch/x86_64/
[loomaclin@loomaclin a_minimal_multiboot_kernel]$ nano Makefile
Makefile должен иметь следующий вид:
arch ?= x86_64
kernel := build/kernel-$(arch).bin
iso := build/os-$(arch).iso
linker_script := src/arch/$(arch)/linker.ld
grub_cfg := src/arch/$(arch)/grub.cfg
assembly_source_files := $(wildcard src/arch/$(arch)/*.asm)
assembly_object_files := $(patsubst src/arch/$(arch)/%.asm, \
build/arch/$(arch)/%.o, $(assembly_source_files))
.PHONY: all clean run iso
all: $(kernel)
clean:
@rm -r build
run: $(iso)
@qemu-system-x86_64 -cdrom $(iso)
iso: $(iso)
$(iso): $(kernel) $(grub_cfg)
@mkdir -p build/isofiles/boot/grub
@cp $(kernel) build/isofiles/boot/kernel.bin
@cp $(grub_cfg) build/isofiles/boot/grub
@grub-mkrescue -o $(iso) build/isofiles 2> /dev/null
@rm -r build/isofiles
$(kernel): $(assembly_object_files) $(linker_script)
@ld -n -T $(linker_script) -o $(kernel) $(assembly_object_files)
# compile assembly files
build/arch/$(arch)/%.o: src/arch/$(arch)/%.asm
@mkdir -p $(shell dirname $@)
@nasm -felf64 $< -o $@
Некоторые комментарии (если вы не работали до этого с make
, посмотрите makefile туториал):
- $(wildcard src/arch/$(arch)/*.asm) выбирает все файлы ассемблера в директории
src/arch/$(arch)
, так что вам не нужно обновлять Makefile при добавлении файлов, - операция
patsubst
дляassembly_object_files
просто переводитsrc/arch/$(arch)/XYZ.asm
вbuild/arch/$(arch)/XYZ.o
, - таргеты сборки
$<
и$@
это автоматически выводимые переменные, - если вы используете кросс-комплированные binutils просто замените
ld
наx86_64-elf-ld
.
Теперь мы можем вызвать make
и все обновлённые файлы ассемблера будут скомпилированы и скомпонованы. Команда make iso
также создаёт ISO образ, а make run
в дополнение запускает QEMU.
В следующей статье мы создадим таблицу страниц и проведем некоторую конфигурацию процессора для переключения в 64-битный long-mode режим.
- Формула из таблицы
-(magic + architecture + header_length)
создает отрицательное значение, которое не влезает в 32 бита. С помощью вычитания из0x100000000
мы оставляем значение положительным без изменения вычтенного значения. В результате без дополнительного знакового бита результат помещается в 32 бита и компилятор счастлив 🙂 - Мы не хотим загружать ядро по офсету 0x0, так как много специфичных областей памяти может быть расположено до метки в 1 мегабайт (для примера, так называемый VGA буфер по адресу
0xb8000
, который мы используем чтобы вывестиOK
на экран).
GRUB — загрузчик системы | Русскоязычная документация по Ubuntu
GRUB (GRand Unified Bootloader1)) — программа-загрузчик операционных систем.
GRUB является эталонной реализацией загрузчика, соответствующего спецификации Multiboot и может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS-DOS, OS/2 и другие системы.
После настройки GRUB пользователь при включении компьютера видит список операционных систем, которые установлены на его компьютер и которые можно загрузить, выбрав подходящую и нажав Enter.
GRUB позволяет пользователю при загрузке задавать произвольные параметры и передавать их в ядро Multiboot-совместимой ОС для дальнейшей обработки.
GRUB — самый популярный загрузчик в мире Linux и является загрузчиком по умолчанию в большинстве известных дистрибутивов.
Первые шаги
При первом сравнении GRUB со старым GRUB Legacy самым весомым различием оказывается измененная структура файлов конфигурации.
Настройка GRUB производится теперь принципиально иным способом — основным файлом конфигурации является «/boot/grub/grub.cfg«. Однако же, не торопитесь править его так, как привыкли это делать с «menu.lst» в GRUB Legacy. При внимательном прочтении мы видим в начале файла «grub.cfg» такие строки:
# # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub #
И об этом нас предупреждают не просто так. Ведь «grub.cfg» генерируется автоматически с использованием нескольких скриптов. Поэтому после следующего обновления GRUB ваш «grub.cfg» будет создан заново, и все ваши правки будут утрачены.
Кроме файла «grub.cfg», отвечающего за загрузочное меню, имеются файл «/etc/default/grub» и папка «/etc/grub.d«. Рассмотрим их подробнее.
/etc/default/grub
Данный файл содержит в себе основные настройки для GRUB. Через него, собственно, они и изменяются. Для наглядности ниже приводится примерное содержимое этого файла:
GRUB_DEFAULT=6 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT="2" GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entrys #GRUB_DISABLE_LINUX_RECOVERY="true"
Файл представляет из себя набор опций в понятном формате ОПЦИЯ=ЗНАЧЕНИЕ.
Наиболее часто встречающаяся потребность при настройке GRUB — изменение стандартного пункта загрузки и/или времени показа меню. Рассмотрим же, как это делается.
Изменение стандартного пункта загрузки
По умолчанию стандартный пункт (выделенный при показе меню) — верхний в списке. После установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом.
Значением «GRUB_DEFAULT» является номер пункта меню, который должен быть выбран стандартным. Чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. Есть два варианта:
Просмотреть содержимое «/boot/grub/grub.cfg» и сосчитать, какой по счету окажется нужная запись;
Перезагрузиться и более наглядно посмотреть меню загрузки.
Нумерация пунктов меню начинается с нуля. Значение по умолчанию — 0, поэтому и выбирается первый пункт.
Пятому сверху пункту будет соответствовать значение 4, второму — 1, первому — 0. В вышеприведенном примере установлено значение 6, то есть стандартным задан седьмой пункт меню.
В качестве значения можно указать saved. Это позволит использовать команды grub-reboot и grub-set-default для выбора пункта меню по-умолчанию при последующих перезагрузках. Например:Команда
sudo grub-reboot 1
однократно выбирает второй пункт меню по-умолчанию (только для следующей загрузки),Команда
sudo grub-set-default 2
выбирает на постоянной основе третий пункт меню по-умолчанию.
Или же можно указать значение идентификатора (id), оно должно быть именно таким, каким мы его видим в «/boot/grub/grub.cfg«. Данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за сбившейся нумерации.
Пример
Если в «grub.cfg» пункт меню выглядит так:
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux { ... }
То значение параметра «GRUB_DEFAULT» должно указываться именно в виде:
GRUB_DEFAULT=example-gnu-linux
Ранее документацией предлагалось указывать название пункта меню загрузки (так, как он отображается в самом меню). Хотя этот способ по-прежнему работает, использовать его не рекомендуется, поскольку эти названия могут меняться, например, при обновлении ядра/версии ОС
Изменение времени отображения меню
По умолчанию меню загрузки отображается 10 секунд (при наличии других установленных ОС, если система одна — GRUB по умолчанию не отображается и сразу начинает загрузку), после чего загружается стандартный пункт, если раньше не нажат Enter или не выбран другой пункт, что останавливает таймер. За эту задержку отвечает параметр «GRUB_TIMEOUT», значение задается в секундах.
Если поставить значение «-1», то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт
Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение — 2, то есть меню отображается две секунды.
«Скрытое» меню
В случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а GRUB будет загружать вас напрямую в систему. Однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. Для этого предусмотрено «скрытое меню» за него отвечает параметр «GRUB_HIDDEN_TIMEOUT».
В случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). Данное значение позволит приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Esc.
Если значение установлено в 0, то задержки не будет, однако вызвать меню можно, удерживая при загрузке Shift
Параметр «GRUB_HIDDEN_TIMEOUT_QUIET» отвечает за отображение таймера во время паузы. Если его значение «true» таймер отображаться не будет, а со значением «false» будет.
Чтобы GRUB отображал меню со списком установленных операционных систем, без нажатия клавиш вызова меню (например Shift или Esc) необходимо:
sudo gedit /etc/default/grub
GRUB_TIMEOUT="10"
#GRUB_HIDDEN_TIMEOUT=0
sudo update-grub
Убираем подменю
Чтобы раскрыть все меню используем такой параметр:
GRUB_DISABLE_SUBMENU="y"
Это бывает нужно если хотим загружаться не с первой строчки.
Особые случаи
Поведение меню отличается от заданного переменными GRUB_TIMEOUT и GRUB_HIDDEN_TIMEOUT когда предыдущая загрузка не завершилась успехом или предыдущаяя загрузка происходила в режиме восстановления. Подробно это описано далее, в разделе «Защита от зацикливания на перезагрузке». Полную справку по параметрам файла настроек можно дав команду:
info -f grub -n 'Simple configuration'
Изменение стандартных параметров загрузки ядра
Иногда бывает необходимо загружать ядро системы с какими-либо особыми параметрами (например, для корректной работы специфического оборудования). В этом случае весьма полезен будет параметр «GRUB_CMDLINE_LINUX_DEFAULT» он отвечает за те параметры, с которыми запускаются ядра при загрузке. Его значение по умолчанию — «quiet splash»: происходит показ графической заставки при запуске системы без отображения какой-либо текстовой информации.
Вы можете добавить необходимые вам параметра запуска ядра, приведя это значение к виду «quiet splash your_param1 your_param2», то есть дописав через пробел нужные параметры.
Пример
Чтобы заменить графическую заставку во время загрузки на информацию о загрузке компонентов системы (это позволит проследить за процессом загрузки и выявить неполадки). Необходимо заменить строчку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
На следующую:
GRUB_CMDLINE_LINUX_DEFAULT=""
/etc/grub.d
Эта папка содержит в себе скрипты, которые используются для создания файла «grub.cfg». При обновлении GRUB они находят все установленные на компьютере системы и ядра и формируют в файле «grub.cfg» меню загрузки, которое мы и видим. Два основных из них:
«10_linux» и «30_os-prober» отвечают за поиск Linux ядер и остальных ОС на других разделах соответственно.
Файл «40_custom» позволяет добавлять свои пункты загрузки. Это может быть полезно, если вы, например, хотите добавить какие-то особые варианты загрузки системы.
Файл «40_custom» должен заканчиваться пустой строкой, иначе последний пункт не будет отображаться в меню!
Пример
Добавляем режим загрузки без графической заставки, с текстовым отображением процесса загрузки (verbose mode). Для этого мы немного отредактируем обычный пункт загрузки. допустим, он выглядит так (в «/boot/grub/grub.cfg«):
menuentry "Ubuntu, Linux 2.6.32-020632rc6-generic" { recordfail=1 if [ -n ${have_grubenv} ]; then save_env recordfail; fi set quiet=1 insmod ext2 set root=(hd0,5) search --no-floppy --fs-uuid --set 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 linux /boot/vmlinuz-2.6.32-020632rc6-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro quiet splash initrd /boot/initrd.img-2.6.32-020632rc6-generic }
Для того, чтобы сделать из этого verbose mode, нам нужно убрать опции quiet и splash и изменим название самого пункта. В итоге получаем:
echo "adding verbose mode" >&2 menuentry "Ubuntu, Linux 2.6.32.rc6 verbose-mode" { recordfail=1 if [ -n ${have_grubenv} ]; then save_env recordfail; fi set quiet=1 insmod ext2 set root=(hd0,5) search --no-floppy --fs-uuid --set 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 linux /boot/vmlinuz-2.6.32-020632rc6-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro initrd /boot/initrd.img-2.6.32-020632rc6-generic }
Все это и добавляем в «40_custom» в конец файла. Строка с echo не является обязательной она лишь будет сигнализировать нам о том, что наш пункт найден и добавлен при обновлении GRUB.
Команды консоли GRUB
Чтобы попасть в консоль, нужно нажать клавишу C во время отображения меню загрузки.
ls
Довольно универсальная команда при использовании в чистом виде выдает список жестких дисков и разделов. Также она может быть использована как одноименная команда в Linux — для вывода содержимого папки. например:
ls /boot/grub
Еще одно полезное свойство комадны «ls» — она позволят получить информацию о любом разделе:
ls (hd0,5)
Команда сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).
cat
Данная команда выводит содержимое заданного файла, используется в формате:
cat /путь/имя_файла
linux
Аналог команды «kernel» в GRUB Legacy. Загружает указанное Linux-ядро:
linux файл_ядра опция1=значение опция2 опция3
Например, так:
linux /boot/vmlinuz-2.6.32-020632-generic root=/dev/sda5 single
initrd
Загружает указанный initrd-образ. Используется так:
initrd /boot/initrd.img-2.6.32-020632-generic
Обратите внимание, что версия initrd должна соответствовать версии загружаемого ядра!
chainloader
Передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки:
chainloader /путь/имя_файла
Для (загрузчика Windows) можно использовать:
chainloader +1 boot
root
При использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого и тип файловой системы на этом разделе, также команда может быть использована для задания другого root-раздела. Раздел задается в «grub device» — формате »(hd*,*)«. например:
root (hd0,5)
После задания раздела команда сообщит новый root-раздел и тип файловой системы. Примечание: «root hd(*,*)» не всегда корректно срабатывает. более предпочтительным вариантом является «set root» (см. ниже)
set
Весьма универсальная команда для изменения различных параметров. Служит для задания значений переменных и используется в формате:
set переменная=значение
Наиболее необходимое ее применение — для задания root-раздела, например:
set root=(hd0,5)
Также с ее помощью можно, например, «на лету» изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. Для этого изменяем переменные «color_normal» — для обычного пункта (и текста в консоли) и «color_highlight» для выделенного пункта соответственно. Например, попробуем такой вариант:
set color_normal=magenta/green set color_highlight=light-blue/black
search
Служит для поиска раздела по UUID, метке или заданному файлу. Имеет следующие ключи:
-u (или –fs-uuid) — поиск раздела по UUID
-l (или –label) — поиск по метке раздела
-f (или –file) — поиск по указанному файлу
-n (или –no-floppy) — не проверять флоппи-дисковод (чтоб не трещал)
-s (или –set) — установить найденный раздел в качестве значения заданной переменной.
lsfonts
Команда отобразит список загруженных в настоящий момент шрифтов.
help
При использовании в чистом виде выведет список доступных команд. В формате:
help r
Выведет справку по всем командам, начинающимся на «r».
help search
Отобразит справку по команде «search»
halt
Выключение компьютера.
reboot
Перезагрузит компьютер.
background_image
Позволяет «на лету» изменить фоновое изображение. Используется в формате:
background_image /путь/имя_файла
Дает замечательную возможность посмотреть на выбранную картинку в действии, избегая лишних перезагрузок. В сочетании с заменой цветов через set
позволит довольно быстро подобрать подходящий вариант оформления.
Данная команда не заменит ваши настройки оформления, фон будет изменен лишь на текущий сеанс.
При использовании без параметров сбросит текущее фоновое изображение. Однако, заданные цвета останутся, так что если у вас черный цвет текста — на черном фоне вы его не увидите.
terminal_output.console
Позволяет переключиться на обычную черно-белую цветовую гамму. Весьма полезно при работе с консолью в том случае, если у вас установлено фоновое изображение. Картинка на фоне — это, конечно, красиво, но на некоторых участках фона может быть не виден текст.
Применение изменений
После того, как мы отредактировали и сохранили наши файлы. Нужно закончить дело, обновив файл «grub.cfg». Это довольно просто — нужно всего лишь выполнить команду:
sudo update-grub
После этого смело перезагружаемся и видим, что все работает как надо.
Нюанс с нумерацией дисков и разделов
В GRUB имеется еще одно важное отличие от старого GRUB Legacy, а именно изменилась нумерация разделов диска. Нумерация дисков идет с нуля, а нумерация разделов — с единицы!
Если в GRUB Legacy первый раздел первого диска (sda1) именовался «hd0,0». То в GRUB, первый раздел первого диска (sda1) теперь будет «hd0,1».
Создание дополнительного меню загрузки
Суть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя:
sudo cp /boot/grub/{grub,custom}.cfg
Поскольку файл скопируется с правами 444, выставим ему права на запись:
sudo chmod 744 /boot/grub/custom.cfg
Теперь открываем его в любимом текстовом редакторе и изменяем:
sudo gedit /boot/grub/custom.cfg
Если вы в достаточной мере знаете структуру «grub.cfg» и понимаете, какие строки что делают, можно значительно сократить свой файл, убрав лишнее и привести его к более удобочитаемому виду.
set default
задаем пункт меню по умолчанию, указав или его номер или точное название.-
set gfxmode
здесь задается разрешение экрана в привычном формате WxH. Можно также указать глубину цвета, например «1024x768x32». можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает — третий и т.д. Например:set gfxmode=1024x768x32,1024x768x24,1024x768
Теперь зададим время отображения меню, для этого ищем строку
set timeout
, и устанавливаем значение -1 для отключения таймера.
Для задания фонового изображения найдем строку с if background_image
(подразумевается, что в вашем «grub.cfg» используется фоновое изображение. Если нет — смотрите пример файла в конце раздела). После команды background_image
прописан путь к файлу картинки, поменяйте его на нужный файл.
Обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!
Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme« (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с set color_highlight
и else
теперь настройка будет такой:
color_normal
задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консолиmenu_color_normal
отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятсяmenu_color_higlight
задает цвет/фон выделенного пункта меню.
Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус.
Настроив свой файл, сохраните его Ctrl+Shift и закройте.
Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/grub.d/40_custom« добавим запись такого вида:
menuentry "Название меню"{ configfile /boot/grub/custom.cfg }
Если ваш путь к файлу отличается — исправьте его.
Если вы используете отдельный boot-раздел, путь будет таким: »/grub/custom.cfg«. Также учтите, что «40_custom» должен заканчиваться пустой строкой!
Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность.
Обновите свой «grub.cfg» выполнив команду:
sudo update-grub
Теперь пункт перехода в дополнительное меню появится в главном, для того чтобы выйти обратно в главное меню, достаточно нажать Esc
В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума):
have_grubenv=true load_env ### выбранный пункт по умолчанию set default=0 ### таймаут меню set timeout=2 ### разрешение set gfxmode=800x600x32,800x600x24,800x600 insmod ext2 search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s insmod gfxterm insmod vbe if terminal_output gfxterm ; then true ; else terminal gfxterm; fi insmod png ### фоновое изображение background_image /usr/share/images/grub/yellow.png ### настройка цветов set color_normal=black/black set menu_color_normal=green/light-blue set menu_color_highlight=red/blue menuentry "9.10 @ 2.6.32" { search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro quiet splash initrd /boot/initrd.img-2.6.32-020632-generic } menuentry "9.10 @ 2.6.32 (recovery)" { search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro single initrd /boot/initrd.img-2.6.32-020632-generic } menuentry "windooz"{ search -u AC9C75E59C75AA8A -s chainloader +1 }
Защита от зацикливания на перезагрузке
Если загрузка ОС не закончилась успешно, или осуществлялась загрузка в режим восстановления, то при следующей загрузке — меню выбора GRUB будет выводится и ждать явного вмешательства оператора (так же, как если бы вы выставили GRUB_TIMEOUT=-1). При этом последующие аппаратные сбросы системы — не помогут проскочить меню.
Зачем это сделано
При загрузке в лог файлы пишется информация и размеры логов растут. В нормально загруженной систем работают сервисы, которые архивируют и подчищают логи. В нормально работающей системе постоянно пополнение лог-файлов не требует внимания со стороны пользователя.
Совсем иная ситуация при загрузке — никакие сервисы по очистке логов не работают (они запускаются позже) и, если, в процессе загрузки система свалится и начнет перезагружаться, то лог будет только расти. И расти он будет до тех пор пока будут повторятся перезагрузки, и будет хватать места на том разделе диска, где расположен каталог /var/log. А когда на разделе с /var/log место кончится то система зависнет уже наглухо и даже в режим восстановления ее будет не загрузить. Загрузится можно будет только с LiveCD/USB (с Live системы и надо будет лечить систему, первым делом руками зачистив логи).
Защита встроенная в GRUB не позволит системе попасть в столь тяжелое положение.
А что если…
Функция (как видно) — безусловно полезная, однако она может быть неудобной для без-клавиатурных станций — на них «зависшее» меню GRUB-а — это не преимущество, а некоторые сложности (без подключения клавиатуры такая станция, попавшая в меню GRUB, никогда не загрузится вообще).
А что если отключить?
Собственно сами случаи, когда циклится загрузка — не так и часты, если машина работает без графики то там вообще мало чему падать на этапе загрузки, да еще так, что бы система вышла на перезагрузку. Разве что совсем кривой прикладной софт встроенный в процесс загрузки…
Гораздо чаще загрузка прерывается из за внешних условий — например пропадает питание, или кто-то сбрасывает грубо систему.
Отключаем…
Как это работает
Реализовано все достаточно просто — в скрипте /boot/grub/grub.cfg переменная окружения GRUB recordfail устанавливается в ходе каждой загрузки в 1. Скрипт /etc/init.d/grub-common запускается на финальных этапах загрузки (линки с именем S99grub-common есть в /etc/rc2.d, /etc/rc3.d, … /etc/rc5.d). grub-common сбрасывает переменную recordfail в 0. Если скрипт /etc/init.d/grub-common не отработает, то не сброшенное значение recordfail предотвращает автоматическую загрузку, меню GRUB появляется и потребуется явное интерактивное вмешательство со стороны оператора.
Для того, что бы убрать необходимость интерактивного вмешательства в процесс загрузки нужно установить переменную GRUB_RECORDFAIL_TIMEOUT в /etc/defaul/grub в то количество секунд, которые меню GRUB-а будет ждать ввода в случае когда recordfail=1. Сохранить изменения и обновить GRUB (sudo update-grub).
Вы должны понимать, что проделанные изменения могут привести к довольно печальным последствиям, если все-таки у вас случится ситуация, при которой зациклится перезагрузка системы.
Финт с GRUB_RECORDFAIL_TIMEOUT может не сработать в некоторых (старых) версиях GRUB. Тогда нужно редактировать /etc/grub.d/00_header. Нужно найти функцию make_timeout (), которая выглядит примерно так:
make_timeout () { cat << EOF if [ "\${recordfail}" = 1 ]; then set timeout=-1 else set timeout=${2} fi EOF }
и заменить в ней строчку
set timeout=-1
на
set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1}
После этого финт с GRUB_RECORDFAIL_TIMEOUT заработает. Нужно сохранить изменения и обновить GRUB (sudo update-grub).
Изменения в скрипте /etc/grub.d/00_header могут быть утеряны при обновлении пакета grub-common. Но в новых версиях GRUB переменная GRUB_RECORDFAIL_TIMEOUT уже внедрена (т.е. эти изменения уже сделаны в 00_header).
Ссылки
Загрузчик разных операционных систем | Gadget-apple.ru
По мере того как увеличивается количество операционных систем для сегмента настольных компьютеров все более интересным и актуальным становится вопрос двойной, тройной и так далее загрузки. То есть возможности запускать на одном компьютере более одной операционной системы.Ubuntu Linux поверх Windows XP или Vista, Windows XP вместе с Vista, FreeBSD и Windows — можно придумать и гораздо больше комбинаций. Ничто не мешает, не только придумывать, но и реализовывать самые замысловатые комбинации операционных систем. Причем это можно делать не только на одном компьютере, но и на одном диске — емкость современных жестких дисков (они же HDD, они же винты, они же винчестеры) позволяет «впихнуть» на один такой диск хоть 20 различных операционных систем.
Немного теории
Процесс загрузки компьютера, относящегося к семейству IBM PC выглядит следующим образом:
При подаче питания на материнскую плату, первым делом загружается и выполняется небольшая программа, записанная в специальной микросхеме материнской платы — BIOS. Эта программа проверяет наличие и правильность функционирования критичных компонентов — оперативной памяти, видеоадаптера, дисков. После выполнения такого теста программа BIOS проверяет подключенные к материнской плате диски — на каждом из них она ищет специальную отметку, которая указывает на то, что диск загрузочный. Если такая отметка обнаруживается, то программа BIOS загружает с этого диска записанную на нем программу-загрузчик и передает ей управление.
И вот этот загрузчик, записанный на диске, и загружает ту или иную операционную систему. Он представляет собой небольшую программу, которая выполняет только два действия:
- Обнаружить на определенной файловой системе определенный программный файл (или файлы)
- Загрузить этот файл (или файлы) в оперативную память и передать им управление.
Такие программы-загрузчики бывают двух типов:
- «Абстрактные» — созданные для загрузки различных операционных систем.
- «Семейные» — программы, которые умеют загружать лишь одну операционную систему или несколько ОС одного семейства, но разных версий.
Из первых самый популярный загрузчик под названием GRUB. Он умеет загружать более десяти типов операционных систем. Самый распространенный среди «семейных» это ntldr — загрузчик ОС Windows 2k, XP, 2k3 и его новейшая версия bootmgr загружающий Windows Vista и Windows 7. Кроме этих двух существует еще десятка два различных загрузчиков.
Почему так много? Причина проста — пока еще не существует универсального загрузчика, пригодного на все случаи жизни.
К примеру, GRUB, самый мощный на сегодняшний день, не может загружать образы дисков в формате ISO, но это умеет делать syslinux.
Однако недостатки, существующие в каждом из загрузчиков не накладывают ограничений на возможные варианты загрузок благодаря тому, что из одного загрузчика можно запустить другой.
Например, через один из «примитивных» загрузчиков ntldr можно при помощи простого трюка запустить любое количество других загрузчиков, а это дает возможность реализовать самые изощренные фантазии по мультизагрузке.
От старта одной лишь MS Windows, до запуска всех версий Windows, плюс десяток версий Linux, плюс BSD, плюс Apple, плюс десяток файлов-образов дисков и дискет, плюс …
Иными словами тот вариант мультизагрузки, который нужен вам, быть может, нельзя реализовать при помощи какого-то одного загрузчика, но комбинацией из двух или трех загрузчиков можно запускать любой пакет операционных систем и файлов-образов.
Наличие большого количества загрузчиков и возможность их запуска друг из друга дают еще и вариативность при решении одной и той же задачи. Например, двойную загрузку Windows XP плюс Linux можно реализовать как минимум двумя путями — либо использованием одного загрузчика GRUB для обеих ОС, либо комбинацией загрузчиков ntldr + GRUB.
Еще немного теории
Помимо теоретических вопросов по загрузке операционных систем, для организации мультизагрузочных систем важно разбираться в теории использования адресного пространства дисков, на которых эти самые операционные системы размещаются.
Та часть парадигмы компьютеров семейства IBM PC, которая относится к использованию дисков, определяет, что так называемое «сырое» дисковое пространство должно быть поделено на разделы, затем на этих разделах должны быть созданы файловые системы и только после этого, уже на эти файловые системы можно записывать программы и данные, в том числе операционные системы.
В рамках парадигмы IBM PC допускается деление «сырого» адресного пространства жесткого диска (HDD), на четыре первичных раздела. То есть, упрощенно говоря, применительно к нашей теме, на одном жестком диске можно разместить четыре операционные системы. Это очень мало. Однако не все так грустно. Уже давно эта проблема решена при помощи расширенных разделов. Расширенный раздел это первичный раздел диска, который можно поделить еще на 255 разделов.
То есть для того, чтобы организовать мультизагрузочную систему, нужно разделить диск как минимум на два раздела и создать на этих разделах необходимые файловые системы.
От теории к практике
Итак, отталкиваясь от теории, построение мультизагрузочной системы выглядит следующим образом:
- Разделение диска на разделы
- Создание на разделах файловых систем
- Выбор основного загрузчика или комбинации загрузчиков
- Установка операционных систем
Вроде все коротко и просто. Но только на первый взгляд. Дело в том, что на каждом из этапов возможны различные варианты и итоге получается столько различных способов создания мультизагрузочной системы, что я даже не буду пытаться их рассмотреть.
Мы пойдем другим путем.
Просто ответим на вопросы:
- Как наилучшим образом разделить диск на разделы?
- Какие файловые системы выбрать?
- Какой загрузчик выбрать?
После многих лет работы и экспериментов на первый вопрос у меня ответ такой:
Первичный раздел относительно небольшого размера. На нем размещается основной загрузчик и возможно одна из операционных систем.
Второй раздел расширенный. Он занимает основную часть диска и содержит столько логических разделов, сколько необходимо для установки всех операционных систем, которые хочется установить — 5, 10 или 20.
В чем преимущество такого подхода?
Во-первых, в запасе остаются два неиспользованных первичных раздела. Если попадется операционная система, которая не умеет работать с расширенного раздела, тогда можно будет создать еще один первичный.
Во-вторых, при использовании расширенного раздела в нем можно создать столько логических разделов, сколько никогда не потребуется, то есть в такой схеме не столкнешься с ситуацией, когда хочется установить еще одну операционную систему, но некуда. Конечно, для 20-й ОС может не хватить места на диске, но это уже другая тема.
Вопрос второй — файловая система и размер первичного загрузочного раздела.
Если изначально планируется установка более чем двух или трех ОС, а также их регулярная переустановка, то лучше всего делать размер первичного раздела совсем небольшим 1−2 Гб, а файловую систему для этого раздела использовать FAT или FAT32. Никакую серьезную ОС на этот раздел не ставить, разве что-нибудь легкое типа MS DOS.
Какой-нибудь знаток тут может сказать, что FAT это каменный век, да и FAT32 тоже древность изрядная и что у них куча недостатков. Это так, но у этих файловых систем есть достоинство очень важное в контексте мультизагрузочной системы. Практически, пожалуй, нет ОС или прикладной программы, которая бы не умела работать с этими файловыми системами. И это очень большое преимущество — если в процессе установки какой-нибудь очередной ОС или очередного загрузчика, возникнет проблема, то можно будет легко получить доступ к разделу и к файлам загрузчиков при помощи даже самых примитивных средств. Кроме того, использование файловых систем FAT или FAT32 расширяет количество загрузчиков, которые можно будет установить на этот раздел. К примеру, загрузчик syslinux можно установить только на файловую систему FAT или FAT32.
В более распространенном случае — когда устанавливается только две-три ОС, размер первичного раздела лучше выбрать таким, чтобы на него можно было установить ОС Windows с базовым набором программ, то есть не менее 10 — 15 Гб. Соответственно файловую систему в этом случае выбирать NTFS.
Первичный раздел NTFS я рекомендую делать, даже если не планируется установка ОС Windows. Сегодня не планируется, а завтра понадобится и вот тогда, при отсутствии первичного раздела с файловой системой, которую понимает Windows заставит совершать лишние телодвижения. Впрочем, это не критично, поскольку лишних телодвижений не нужно будет делать много.
И, наконец, какой загрузчик использовать в качестве первичного.
Я уже давно остановил свой выбор на ntldr. Хотя он вполне «тупой», кроме Windows ничего больше не умеет загружать, но есть в нем одна интересная особенность — он может загружать файловые образы дисковых секторов (физические сектора диска, записанные в файл). А это означает, что ему можно скормить файл с головой любого другого загрузчика. То есть из ntldr можно загрузить любое количество других загрузчиков, достаточно сделать файлы с их головами и по списку скармливать их ntldr.
Примечание. «Голова» загрузчика это сектор MBR или Boot. Это может быть и более одного сектора, например голова GRUBа — 16 секторов начиная с MBR.
Примечание. В том случае если голова загрузчика более одного сектора, копировать в файл для ntldr нужно только первый сектор (MBR сектор), поскольку ntldr может загружать только односекторные файлы. Это накладывает ограничение на количество одновременно установленных загрузчиков с «длинной», головой. То есть в схеме с ntldr нельзя использовать два GRUBа.
Схема мультизагрузочной системы выглядит следующим образом:
Для редких случаев — маленький первичный раздел с файловой системой FAT или FAT32 и без ОС, только загрузчик. При этом все ОС устанавливаются в логические разделы расширенного раздела.
Для более распространенных случаев — небольшой первичный раздел с файловой системой NTFS, куда устанавливается ОС Windows и загрузчик. Остальные пара-тройка ОС в логические разделы расширенного раздела.
Все очень просто.
Примечания
Если вариант мультизагрузки совсем уж простой, что-то типа Linux поверх Windows, когда Linux устанавливается на компьютер где уже есть Windows, то можно не заморачиваться с ntldr. При установке любого современного, популярного дистрибутива Linux есть возможность автоматически установить загрузчик GRUB, а он умеет загружать обе эти ОС.
Установить загрузчик ntldr можно вручную, отдельно от ОС Windows. Однако установить его можно только на раздел с файловыми системами FAT, FAT32 или NTFS. При установке ntldr нужно помнить, что его голова записывается в Boot сектор, а потому для его старта нужен еще и стандартный предзагрузчик типа MS DOS в MBR секторе (то есть выполняющий «прыжок» на Boot сектор). Если в MBR была записана голова другого загрузчика (например, GRUBа), то помимо установки ntldr нужно еще записать предзагрузчик Microsoft в MBR. Один из способов сделать это команда fdisk /mbr. Естественно, что fdisk в данном случае от компании Microsoft (из MS DOS).
Хотя при установке любой современной ОС, можно создавать разделы и файловые системы непосредственно в процессе установки, тем не менее, я советую делать это отдельно. Сначала при помощи программы типа fdisk или Partition Magic создаете нужные разделы, а уже затем запускаете установку ОС и в процессе указываете раздел, куда нужно ставить систему.
При установке любой ОС на мультизагрузочную систему нужно быть очень внимательным на этапе выбора типа разметки диска и выбора раздела. Некоторые установщики, например c диска Ubuntu Live, по умолчанию предлагают опции типа «установка на весь диск» или «автоматическая разметка диска». Если пропустить эти опции, то ваша мультизагрузочная система будет уничтожена. Также нужно быть аккуратным, когда вручную указываешь установщику раздел для установки — по невнимательности можно записать новую ОС в используемый раздел и тогда все, что на нем было ранее, будет уничтожено.
Прежде чем устанавливать новую ОС или новый загрузчик заранее приготовьте «ремкомплект» — набор данных и программ, который позволит вам восстановить загрузку системы в ее текущем состоянии. Может, получиться так, что после установки новой ОС или нового загрузчика, часть старых ОС не будет загружаться.
Мультизагрузка с флеш-диска, по своей организации, ничем не отличается от описанной здесь загрузки с HDD. С той лишь поправкой, что на флеш-диске нецелесообразно устанавливать файловые системы иные, чем FAT / FAT32. Если используется USB HDD, то с ним можно работать так же как с обычным HDD.
Однако загрузиться с флеш или USB диска можно не на каждом компьютере. Будьте готовы к тому, что на каком-либо компьютере вы не сможете это сделать. Чаще всего такие проблемы возникают с компьютерами, на которых используются BIOS Award или чипсеты nVidia, SiS, Amd. Реже всего проблема загрузки возникает, если на материнской плате BIOS AMI и чипсет Intel.
Разные загрузчики записывают свои головы в разные сектора. Загрузчики ntldr и bootmgr в boot сектор первичного загрузочного раздела, и только туда. Syslinux так же в boot сектор. Готова GRUBа может быть записана как в сектора первичного раздела (16 начиная с MBR), так и в сектора логического раздела (в этом случае запись начинается с boot сектора раздела).
Частные случаи систем с мультизагрузкой описаны в статьях
Иван Сухов, 2010 г.
Если вам оказалась полезна или просто понравилась эта статья, тогда не стесняйтесь — поддержите материально автора. Это легко сделать закинув денежек на Яндекс Кошелек № 410011416229354. Или на телефон +7 918−16−26−331.
Даже небольшая сумма может помочь написанию новых статей 🙂
Или поделитесь ссылкой на эту статью со своими друзьями.
Опытные пользователи Windows хорошо знакомы с программой EasyBCD — одним из лучших менеджеров загрузки операционных систем. На днях это приложение обновилось , теперь поддерживает grub2, EFI и Windows 8, обзавелось мультиязычным интерфейсом. Для тех кому EasyBCD пользоваться не приходилось поясним, что эта программа позволяет легко создавать загрузочное меню и загружать несколько операционных систем семейства Windows, GNU/Linux, MacOS X.
У пользователя имеется возможность задать ОС, загружаемую по-умолчанию, установить паузу перед загрузкой, настроить некоторые параметры запуска операционной системы. В комплекте с программой имеются инструменты для создания внешних загрузочных носителей и резервных копий настроек, восстановления стандартного загрузчика Windows.
С помощью EasyBCD можно запустить не только ОС, уже установленную на жёстком диске компьютера, но и размещённую в образе CD/DVD-диска или дискеты, а также воспользоваться функцией загрузки по локальной сети.
Распространяется программа на бесплатной основе (для некоммерческого использования), интерфейс полностью русифицирован.
Достаточно часто возникает потребность в установке на компьютер нескольких операционных систем . Это происходит по различным причинам: специфика работы, желание познать новые разработки и другие самые разнообразные варианты. Поэтому в данной статье мы поговорим о том, как же правильно установить более одной операционной системы на компьютер.
Пожалуй, мы рассмотрим парочку наиболее популярных связок ОС. Сразу замечу, что я приведу лишь общее описание установки, не вникая в её рутинные подробности. Итак, поехали…
Установка Windows Xp + Windows 7
Для установки такой связки операционных систем нам понадобится специальный софт в лице EasyBCD. Если просто установить эти две операционные системы, то будет загружаться именно та, которую Вы поставили последней. Это происходит за счёт того, что Windows просто-напросто «затирает» загрузчики всех операционных систем, которые мирно «жили» до неё и оставляет лишь один для «себя любимой». Поэтому для начала мы качаем программку Easy BCD ( скачать ) и оставляем инсталлятор на каком-нибудь нейтральном файловом диске, или же её можно скачать после установки одной из версий Windows. Итак, приступаем к установке первой версии Windows (7 или ХP, неважно в какой последовательности). Когда первая версия Windows установлена, смело ставим вторую. Но, устанавливать ее, желательно на отдельный раздел. После установки второй ОС Windows , мы загружаемся и устанавливаем в систему ранее скачанную программку EasyBCD.
Интерфейс программы достаточно прост и понятен. Человек, который знает азы английского языка, может с лёгкостью разобраться с данной программой.
Когда Вы запустите программу EasyBCD, то увидите перед собой вот такое вот окно (рис.1):
Рис.1
Как Вы видите у нас имеется загрузчик Windows 7 , который определился по умолчанию, так как эта система была установлена второй и является текущей. Теперь нам необходимо добавить новую запись в загрузчик для того, чтобы во время включения копьютера, мы смогли увидеть строку с Windows XP и соответственно смогли загрузиться из-под неё. Для этого нажимаем на панели слева «Add New Entry», затем выбираем в пункте «Type» необходимую операционную систему (в данном случае это Windows XP), и жмём, уже справа, Add Entry.
Рис.2
Всё, запись в загрузчик добавлена, и когда Вы нажмёте на пункт View Settings, то увидите, что у Вас имеется уже две записи в загрузчике: Windows 7 и Windows XP. (рис.3)
Рис.3
Теперь можно смело перезагружать компьютер и загружаться из-под желаемой операционной системы.
Альтернатива при установке Linux + Windows (Xp, 7)
Такая «связка» встречается довольно часто, так как оторваться от «форточек» и ощутить вкус уверенного в себе «пингвина», желают многие. При таком варианте установки можно обойтись и без стороннего программного обеспечения, а воспользоваться стандартными средствами именно Linux. Для этого мы сначала устанавливаем Windows, старым добрым дедовским способом и без всяких хитромудростей. Затем, подходит чёред Linux, его мы устанавливаем вторым, опять же по причине удаления Windows всех «инородных» загрузчиков. Сразу хочу отметить тот факт, что в процессе установки Linux, перед Вами появится предложение «использовать весь диск», этого делать НЕ нужно, если Вам конечно дороги ваши данные. Необходимо же «откусить» отдельный раздел. После окончания установки Linux создаст загрузочное меню, где Вы сможете выбрать любую из операционных систем для загрузки. Но никто не лишает Вас права установки этих двух операционных систем с помощью EasyBCD.
Установка Linux + Windows + Win 7 + Другие системы
При таком варианте наиболее удобным методом будет являться, опять же EasyBCD. Только в данном случае нам необходимо создать запись в Add New Entry, для каждой из операционных систем, по примеру создания записи для Windows XP. На различных вкладках программы Вы можете перейти к созданию записей загрузчика, для Linux и Mac Os. (рис.4). Также при желании можно добавить и более старые операционные системы Windows: 95,98,NT и т.д.
Рис.4
Таким образом, мы вкратце рассмотрели варианты установки нескольких операционных систем на Ваш компьютер. Экспериментируйте с установкой различных ОС на компьютер, но будьте внимательны, так как в один прекрасный момент можно вообще не загрузиться 🙂 Также можете ознакомится с материалом по записи образа на флешку для дальнейшей установки .
Пишем операционную систему. Часть 1. Загрузчик
Всем привет! Сегодня мы напишем загрузчик, который будет выводить «Hello World» и запустим его на VirtualBox. Писать будем на ассемблере FASM. Скачать его можно отсюда. Также нам понадобится собственно VirtualBox и UltraISO. Перед тем как писать код, разберемся как загружаются операционные системы.
Итак, когда мы нажимаем большую кнопку включения на нашем компьютере запускается система, которая есть на любом компьютере — BIOS (Basic Input/Output System или базовая система ввода/вывода). Задача BIOS это:
- Обнаружить все подключенные устройства и проверить их на работоспособность. За это отвечает программа POST (Power On Self Test, самотестирование при включении). Если жизненно необходимое железо не обнаружено, то системный динамик (если таковой имеется) пропищит что-то непонятное и дальше загрузка не пойдет.
- Предоставить операционной системе функции для работы с железом.
- Считать самый первый сектор загрузочного устройства в нулевой сегмент оперативной памяти по смещению 0x7C00h и передать туда управление. 1 сектор на диске равен 512 байтам. Поэтому, наш загрузчик не должен превышать 512 байт. BIOS определяет, что сектор загрузочный по наличию в последних двух его байтах значений 0x55 и 0xAA.
Теперь можно приступать к написанию кода. Запускаем файл FASMW.EXE, который находится в архиве с FASM-мом и вставляем туда следующий код:
org 7C00h
start:
cli ;Запрещаем прерывания (чтобы ничего не отвлекало)
xor ax, ax ;Обнуляем регистр ax
mov ds, ax ;Настраиваем dataSegment на нулевой адрес
mov es, ax ;Настраиваем сегмент es на нулевой адрес
mov ss, ax ;Настраиваем StackSegment на нулевой адрес
mov sp, 07C00h ;Указываем на текущую вершину стека
sti ;Запрещаем прерывания
;Очищаем экран
mov ax, 3
int 10h
mov ah, 2h
mov dh, 0
mov dl, 0
xor bh, bh
int 10h
;Печатаем строку
mov ax, 1301h
mov bp, message
mov cx, 12
mov bl, 02h
int 10h
jmp $
message db 'Hello World!',0
times 510 - ($ - $$) db 0 ;Заполнение оставшихся байт нулями до 510-го байта
db 0x55, 0xAA ;Загрузочная сигнатура
Этот код требует немного пояснений. Командой
org 7C00h
мы говорим, что код нужно загружать в ОЗУ по адресу 0x7C00. В строках
mov ax, 3
int 10h
мы устанавливаем видео режим 80х25 (80 символов в строке и 25 строк) и тем самым очищаем экран.
mov ah, 2h
mov dh, 0
mov dl, 0
xor bh, bh
int 10h
Здесь мы устанавливаем курсор. За это отвечает функция 2h прерывания 10h. В регистр dh мы помещаем координату курсора по Y, а в регистр dl — по X.
mov ax, 1301h
mov bp, message
mov cx, 12
mov bl, 02h
int 10h
Печатаем строку. За это отвечает функция 13h прерывания 10h. В регистр bp мы помещаем саму строку, в регистр cx — число символов в строке, в регистр bl — атрибут, в нашем случае цвет, он будет зеленым. На цвет фона влияют первые 4 бита, на цвет текста — вторые 4 бита. Ниже представлена таблица цветов
0 - черный, 1 - синий, 2 - зеленый, 3 - желтый, 4 - красный, 5 - фиолетовый, 6 - коричневый, 7 - светло-серый, 8 - темно-серый, 9 - светло-синий, A - светло-зеленый, B - светло-желтый, C - светло-красный, D- светло-фиолетовый, E - светло-коричневый, F – Белый.
В строке
jmp $
Программа зависает.
Откомпилируем код нажатием клавиш Ctrl + F9 и сохраним полученный файл как boot.bin.
Запуск
Запускаем UltraISO и перетаскиваем наш бинарник в специальную область (отмечено красной стрелкой).
Далее кликаем правой кнопкой мыши по бинаринку и нажимаем кнопку примерно с такой надписью: «Установить загрузочным файлом». Далее сохраняем наш файл в формате ISO.
Открываем VIrtualBox и создаем новую виртуальную машину (если вы не знаете, как это делается, кликайте сюда). Итак, после того, как вы создали виртуальную машину, нажимаем «Настроить, выбираем пункт „Носители“, нажимаем на „Пусто“, там где „Привод“ есть значок оптического диска. Нажимаем на него и выбираем „Выбрать образ оптического диска“, ищем наш ISO файл, нажимаем „Открыть“. Сохраняем все настройки и запускаем виртуальную машину. На экране появляется наш „Hello World!“.
На этом первый выпуск подходит к концу. В следующей части мы научим наш загрузчик читать сектора диска и загрузим свое первое ядро!
Автор: OSDeveloper
Источник
Установка загрузчика. Начальный загрузчик GRUB
Установка загрузчикаДля загрузки вашей системы Red Hat Enterprise Linux AS без специального загрузочного диска, вам потребуется установить загрузчик. Вы можете выбрать между GRUB (устанавливаемым по умолчанию) и LILO. GRUB — программа-загрузчик, которая может загружать на вашем компьютере Red Hat Enterprise Linux AS. Он может также загружать другие операционные системы, например Windows 9 x . На этом экране вы определяете как настроить (если вы устанавливаете) загрузчик и какой именно (GRUB или LILO). Выберите загрузчик, который вы будете устанавливать. Если вы решили использовать LILO, убедитесь что выбран он, а не GRUB.
Рисунок 3-9. Установка загрузчика
Если вы решили установить загрузчик (GRUB или LILO), вы должны определить где он будет установлен. Вы можете установить загрузчик в одно из двух размещений:
Главная загрузочная запись (The master boot record (MBR))Это рекомендуемое размещение для загрузчика, если только в MBR уже не установлен другой загрузчик операционных систем, например System Commander или OS/2″s Boot Manager. MBR — специальная область на диске, которую автоматически загружает BIOS вашего компьютера, и в первую очередь передает ей управление процессом загрузки. При установке загрузчика в MBR, сразу после включении компьютера, GRUB (или LILO) предложит выполнить загрузку. Затем вы можете загрузить Red Hat Enterprise Linux AS или любую другую операционную систему, настроенную в загрузчике. Первый сектор вашего корневого раздела (root)Рекомендуется, если вы уже используете другой загрузчик операционной системы (например, OS/2″s Boot Manager). В этом случае, сначала этот загрузчик получит управление. Затем вы можете настроить ваш загрузчик для запуска GRUB (или LILO), который в свою очередь загрузит Red Hat Enterprise Linux AS.
Выберите загрузчик: GRUB или LILO, который будет установлен в вашей системе. Если вы будете использовать только Red Hat Enterprise Linux AS, установите загрузчик в MBR. Если вы хотите добавить параметры по умолчанию в команду загрузки GRUB или LILO, введите их в поле Kernel parameters (Параметры ядра) . Все указанные параметры будут передаваться ядру Linux при каждой загрузке. — этот параметр позволяет вам преодолеть ограничение в 1024 цилиндра для раздела /boot . Если ваша система поддерживает расширение LBA32, что позволяет загружать систему за рамками 1024 цилиндров, вы можете вынести раздел /boot за эту границу. Если программа установки на данном этапе не определила поддержку этого расширения в BIOS, установить параметр Force use of LBA32 (not normally required) (Принудительное использование LBA32 (обычно не требуется)) .В таблице приведен список всех разделов, включая разделы других операционных систем. Раздел, содержащий корневую файловую систему Red Hat Enterprise Linux AS в поле Boot label (Метка загрузки) обозначен как Red Hat Linux . Другие разделы могут также иметь метки. Если вы решили добавить метки для других разделов (или изменить существующую), щелкните на разделе для выделения. Выделив раздел, вы можете изменить метку, отредактировав имя в поле Метка загрузки (Boot label) .
Режим восстановления
Если необходимо воспользоваться режимом восстановления, это можно сделать следующими способами:Загрузившись с компакт-диска, введите linux rescue в приглашении boot: . Загрузившись с созданного вами загрузочного диска с поддержкой сети, введите linux rescue в приглашении boot: . Затем вам будет предложено загрузить образ диска восстановления из сети. Загрузившись с созданного вами загрузочного диска, введите linux rescue в приглашении boot: . Затем вы можете выбрать способ установки и правильный путь для загрузки установки. За дополнительной информацией о режиме восстановления, обратитесь к Официальному руководству по настройке Red Hat Linux .Альтернативные загрузчики систем
Если вы не желаете использовать GRUB или LILO для загрузки вашей системы Red Hat Enterprise Linux AS, вы можете выбрать следующие варианты:Загрузочный дискВы можете использовать диск, созданный для вас программой установки (если это было сделано). LOADLINВы можете загружать Linux из MS-DOS. К сожалению, для этого требуется чтобы копия ядра Linux (и первоначальный RAM-диск, если вы используете SCSI адаптер) находилась на разделе MS-DOS. Выполнить это можно единственным способом: загрузить вашу систему Red Hat Enterprise Linux AS по-другому (например, с помощью LILO или дискеты), затем скопировать ядро в раздел MS-DOS. LOADLIN можно получить по адресу ftp://metalab.unc.edu/pub/Linux/system/boot/dualboot/ или на соответствующих зеркалах. SYSLINUXSYSLINUX — это программа для MS-DOS, очень похожая на LOADLIN. Её можно получить по адресу ftp://metalab.unc.edu/pub/Linux/system/boot/loaders/ и на соответствующих зеркалах. Некоторые коммерческие загрузчикиВы можете загрузить Linux, используя коммерческие загрузчики операционных систем. Например, System Commander и Partition Magic способны загружать Linux (при этом необходимо, чтобы GRUB или LILO были установлены в корневом (root) разделе Linux).
Многопроцессорные платформы, GRUB и LILO
Этот раздел относится только к SMP (многопроцессорным) платформам. Если программа установки обнаруживает в вашей системе многопроцессорную платформу, она создаст две записи в /boot/grub/grub.conf или /etc/lilo.conf (в зависимости от выбранного загрузчика), вместо одной. В файле grub.conf появятся записи: Red Hat Linux (версия ядра) и Red Hat Linux (версия ядра -smp) . По умолчанию будет выполняться загрузка Red Hat Linux (версия ядра -smp) . Однако, если при загрузке ядра, поддерживающего многопроцессорность, возникают проблемы, вы можете загрузить вариант Red Hat Linux (версия ядра) . Система сохранит прежнюю функциональность, но будет работать только с одним процессором. В файле lilo.conf появятся записи linux и linux-up . По умолчанию выбрана загрузка linux . Однако, если при загрузке ядра, поддерживающего многопроцессорность, возникают проблемы, вы можете загрузить вариант linux-up . Система сохранит прежнюю функциональность, но будет работать только с одним процессором.Для выбора и запуска операционной системы во время загрузки компьютера используется специализированная программа — загрузчик. Самый популярный загрузчик — Grub. При установке нескольких операционных систем, например, Linux поверх Windows, в меню загрузчика первой будет последняя установленная ОС.
Это не вызовет проблем у пользователей, которые пользуются Linux как основной системой, для них это даже более предпочтительный вариант. Но если вы еще новичок, и хотите использовать Linux второй системой, а Windows пока еще основной, до тех пор, пока не освоитесь, то наверное захотите чтобы первой была Windows. В этой статье мы рассмотрим как сделать загрузку Windows первой в Grub. Рассмотрим два способа: с помощью программы Grub Customizer и вручную, через файлы конфигурации загрузчика Grub.
Grub Customizer
Grub Customizer — это программа, позволяющая настраивать различные параметры загрузчика Grub. В том числе и положение и очередность пунктов загрузки. Установить программу можно из официальных репозиториев. Например, в Ubuntu нужно использовать ppa:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
$ sudo apt-get update
$ sudo apt-get install grub-customizer
Для запуска программы откройте терминал (Ctrl+Alt+T) и наберите grub-customizer:
Для работы программы необходимы права root, в некоторых системах возможно придется использовать такую команду:
gksu grub-customizer
Также программу можно запустить из главного меню. Главное окно выглядит вот так:
Несколько секунд после запуска программа будет сканировать установленные операционные системы, затем в этом же окне мы сможем перенести загрузку Windows на первое место. Для этого кликните на нужном пункте правой кнопкой чтобы открылось контекстное меню:
В меню выберите пункт Переместить вверх . Это действие нужно будет повторить несколько раз, пока Windows не будет первой в списке. Теперь будет выполняться загрузка windows по умолчанию grub.
Если потом вы захотите опустить Windows обратно вниз, есть обратное действие — Переместить вниз .
Для сохранения настроек просто нажмите кнопку Сохранить. Готово. Можете перезагружать компьютер и смотреть что получилось.
Но я хочу затронуть еще пару настроек, которые могут быть полезны. Вместо того чтобы делать загрузку Windows первой в Grub, можно изменить пункт запускаемый по умолчанию. Перейдите на вкладку Основные настройки :
Здесь для выбора пункта по умолчанию используемого по умолчанию есть список Задействовать :
Кроме того, можно загружать по умолчанию последнюю загруженную ОС, для этого есть галочка:
Изменение порядка загрузки Grub через терминал
Как я и обещал, теперь рассмотрим как сделать загрузку WIndows первой в Grub с помощью конфигурационных файлов. Конфигурация Grub находится в файле /boot/grub/grub.cfg.
gksu gedit /boot/grub/grub.cfg
Как правило, строки меню выглядят вот так:
menuentry имя_пункта —опции {
…
Например пункт Windows:
menuentry «Windows 8 (loader) (on /dev/sda1)» —class windows —class os $menuentry_id_option «osprob
er-chain-FC324E26324DE66C» {
….
Теперь чтобы изменить порядок пунктов меню достаточно вырезать все до обратной закрывающей скобочки, вместе с этой строкой, и вставить перед всеми другими пунктами. Затем можно сохранить файл и готово. Перезагружайте и смотрите. Загрузка Windows выполняется по умолчанию. Только минусом данного способа является то, что при обновлении конфигурации Grub все настройки собьются.
Аналогично тому как мы настраивали пункт, загружаемый по умолчанию в Grub Customizer, это можно сделать и в терминале.
Откройте файл /etc/default/grub.
gksu gedit /etc/default/grub
Здесь нас интересует строчка:
Замените 0, на нужный пункт для загрузки, также вместо цифры можно указать имя пункта, например:
GRUB_DEFAULT=»Windows 8 (loader) (on /dev/sda1)»
Посмотреть доступные пункты загрузки не открывая файл конфигурации можно командой:
sudo grep menuentry /boot/grub/grub.cfg
Еще можно настроить загрузку последней загруженной системы, для этого добавьте строчку
GRUB_SAVEDEFAULT=true
А в GRUB_DEFAULT укажите saved:
GRUB_DEFAULT=saved
Очевидным плюсом этого способа есть то, что настройки во время обновления конфигурации Grub не собьются, так как во время обновления информация берется из этого файла. Теперь давайте обновим конфигурацию и сохраним настройки командой:
Не во всех системах работает такой вариант, поэтому можно использовать другую команду:
grub2-mkconfig -o /boot/grub/grub.cfg
Вот и все. Теперь вы знаете как сделать загрузку Windows первой в Grub. Но представленную в этой статье информацию можно использовать в более широких целях. Она будет полезна не только для Windows, но и для любых других нескольких систем, очередностью загрузки которых нужно управлять.
Самое пугающее в Linux — это страшная фраза «начальный загрузчик». Главная причина этого состоит в том, что большинство новых пользователей Linux работали только с операционной системой Windows, в которой отсутствует полноценный начальный загрузчик или взаимодействие с ним пользователя сведено к минимуму. В мире Windows они никогда не задумывались о начальном загрузчике. Для них процесс загрузки операционной системы был полностью прозрачен. Самое большее, что они делали — это использовали Windows Recovery Console для решения возникающих проблем. Поэтому им необходимо познакомиться с одной из важнейших частей программного обеспечения компьютера — маленькой программой, выполняющей загрузку операционной системы.
Цель данной статьи предоставить вам основные сведения о начальном загрузчике GRUB. Если вы читали мои другие статьи о Linux, то вы хорошо знакомы с разбиением на разделы и условными обозначениями Linux, а также с командной строкой. Логично сделать следующий шаг для дальнейшего углубления этих знаний. Понимание того как работает GRUB и, что означают записи в загрузочном меню, поможет вам понять как работает операционная система, как исправить возникающие ошибки, как восстановить или модифицировать меню загрузчика GRUB в соответствии с вашими нуждами и как установить несколько операционных систем с разными рабочими средами.
В ранее установленных системах мы полагались на программу установки, которая выполняла всю трудную работу. На самом деле, пугающая настройка GRUB, совсем несложная и полностью обратимая процедура. Освоение начального загрузчика GRUB — это очень важный шаг в повышении квалификации пользователя в использовании Linux.
Но, сначала, важное предисловие. Эта статья состоит из поясняющей информации и примеров, которые помогут вам изучить GRUB. Конечно, все это есть на просторах интернета. Однако, новые пользователи Linux возможно потратят часы на поиск необходимой информации (особенно, если их ПК — персональный компьютер не загружается) немного разочаровавшись. Цель данного руководства предоставить простые и быстрые решения часто встречающихся проблем при мультизагрузочной установки и установки Linux операционных систем.
- Введение
- Конфигурация GRUB
- Установка GRUB
- Установка GRUB
- Типичные проблемы
- Как восстановить GRUB после удаления?
- Как восстановить GRUB после удаления?
- Ссылки
Все есть файл
Для того чтобы успешно овладеть секретами GRUB вы должны понять один из фундаментальных принципов *NIX-ориентированных операционных систем. Все есть файл. Даже жесткие диски и разделы рассматриваются как файлы. Это не магия. Если вы помните это, то рискованная задача изменения разделов жесткого диска покажется вам ничем не отличающейся от манипуляции с файлами в файловом менеджере (или командной строке).
Теперь, когда мы знаем это, мы можем перейти к подробному изучению технических деталей.
Введение
GNU GRUB это загрузчик (то есть начальный или первичный загрузчик) способный загружать различные свободно распространяемые и проприетарные операционные системы. GRUB будет хорошо работать с Linux, DOS, Windows или BSD. Аббревиатура GRUB расшифровывается, как GR and U nified B ootloader (Главный унифицированный загрузчик).
GRUB является динамически конфигурируемым. Это означает, что пользователь может внести изменения в настройки GRUB во время загрузки. Например, изменить существующие загрузочные записи, добавить новые пользовательские записи, выбирать различные ядра операционной системы или модифицировать initrd . GRUB также поддерживает режим логической адресации блоков (Logical Block Address). Это означает, что если ваш компьютер оснащен достаточно современной BIOS, то может быть доступно более 8ГБ (первые 1024 цилиндра) места на жестком диске. Соответственно и GRUB будет автоматически доступно все это пространство.
GRUB может быть запущен или установлен с любого устройства (гибкого диска — дискеты, жесткого диска, CD- ROM привода, USB диска, сетевого диска) и может загружать операционные системы из различных источников, включая сетевые диски. Также он может может распаковать образ операционной системы перед ее загрузкой.
Вы можете получить дополнительную информацию, гораздо больше, чем в данной статье, из официального руководства GNU GRUB Manual 0.97 .
Что такое LILO?
Вы, наверное, слышали о другом начальном загрузчике Linux, который называется LILO (образовано из начальных букв LI nux LO ader, что означает загрузчик Linux). Не смотря на то, что LILO для многих пользователей Linux подходящий вариант, я считаю, что GRUB — лучший выбор по нескольким причинам:
- LILO поддерживает только 16 различных загрузочных конфигураций, а GRUB поддерживает неограниченное количество конфигураций.
- LILO не может загружаться по локальной сети, а GRUB может.
- LILO должно быть перезаписано всякий раз, после изменения его конфигурационного файла, а для GRUB в этом нет необходимости.
- LILO не имеет командного интерактивного интерфейса.
Подводя итог изложенному выше, отметим, что GRUB выглядит победителем. Итак, позвольте показать, что эта малютка может делать.
Как работает GRUB?
Когда компьютер загружается, BIOS передает управление первому загрузочному устройству, которое может быть жестким диском, дискетой, CD-ROM или другим устройством, распознаваемым BIOS. Для простоты будем считать, что это жесткий диск.
Первый сектор жесткого диска называется Master Boot Record (MBR) (Главная Загрузочная Запись). Длина этого сектора всего 512 байт. Он содержит небольшой фрагмент кода (446 байт), который называется основной загрузчик, и таблицу разделов (64 байта). Таблица разделов содержит описание первичных и дополнительных разделов жесткого диска.
По умолчанию, код MBR просматривается на активном разделе и если он найден, то загружается в память его загрузочный сектор и ему передается управление.
GRUB заменяет код MBR по умолчанию собственным кодом.
При этом работа GRUB состоит из нескольких стадий.
Стадия 1: размещение в MBR. Из-за малого объема MBR размещается только ссылка для перехода к Стадии 2 , которая содержит все требуемые данные.
Стадия 2: переход к конфигурационному файлу, который содержит все компоненты пользовательского интерфейса и настройки, необходимые для работы GRUB. Стадия 2 может находиться в любом месте на диске. Если в результате работы Стадии 2 не найдена конфигурационная таблица, GRUB прекратит процесс загрузки и предоставит пользователю возможность выбрать вручную загрузочную конфигурацию из командной строки.
Еще существует Стадия 1.5 , которая используется, если загрузочная информация не может быть размещена непосредственно после MBR.
Структура Стадии позволяет GRUB иметь довольно большой объем (~20-30К). Поэтому GRUB достаточно сложный и хорошо конфигурируемый, по сравнению с большинством загрузчиков, которые более компактные и проще укладываются в ограничения для Таблицы Разделов.
Терминология GRUB
Этот раздел предназначен для того чтобы помочь вам освоиться с GRUB без соприкосновения с ним. В следующем разделе рассматриваются актуальные файлы и ручная конфигурация GRUB.
GRUB имеет собственные условные обозначения, которые немного отличаются от общепринятых условных обозначений применяемых в Linux.
Вот, пример типичного начала GRUB:
(hd0,1)
- Обязательные скобки, в которые должны быть заключены все устройства представленные в списке меню GRUB.
- hd означает жесткий диск. Гибкий диск обозначается как fd , CD-ROM как cd и т.д.
- Первый номер (целое число, для квалифицированных пользователей) — это ссылка на номер физического жесткого диска. Нумерация первого привода начинается с нуля. В качестве примера, hd2 ссылка на третий физический жесткий диск.
- Второй номер, ссылка на номер раздела выбранного жесткого диска. Нумерация разделов тоже начинается с нуля. В этом случае, 1 соответствует второму разделу.
Отсюда следует, что в GRUB (меню) не различаются IDE и SCSI приводы или первичный и логический разделы. Задача определения какой жесткий диск или раздел должен быть загружен, определяется BIOS и на Стадии 1.
Как видите, условные обозначения очень простые.
Первичные разделы имеют обозначения от 0 до 3 (hd?,0) , (hd?,1) , (hd?,2) , (hd?,3) . Логические разделы в дополнительном разделе нумеруются начиная с 4 . Их нумерация не зависит от текущего количества первичных разделов на жестком диске. Например, (hd1,7) .
Только этих входных данных недостаточно для загрузки операционной системы.
Также GRUB необходимо знать какой из образов операционной системы загружать. Эти параметры и специальные флаги (ключи) присваиваются каждому загрузочному устройству. Например, специальный флаг для Windows Safe Mode.
Здесь показан пример меню GRUB загружающего только Ubuntu.
Здесь показан пример меню GRUB для компьютера с тройной загрузочной конфигурацией (SUSE 10.2, Ubuntu 6.10 и Windows XP). Это реальный menu.lst на одной из моих действующих машин.
Попытайтесь понять, что означают эти данные. Считаются только незакомментированные строки. Комментарии обозначаются специальным символом # . Строки начинающиеся с нескольких последовательных серых x (индикатор предыдущей строки) являются продолжением предыдущей строки. Другими словами, текст просто перенесен на другую строку, чтобы улучшить зрительное восприятие на экране длинных строк, с учетом размеров окна текстового редактора и разрешения экрана.
Default 0 timeout 8
Первая строка (default 0) означает, что будет загружена первая операционная система из списка. В нашем случае, это SUSE 10.2. Вторая строка (timeout 8) сообщает сколько времени (в секундах) имеется у пользователя чтобы выбрать систему для загрузки до того как загрузится система по умолчанию. Просто, не правда ли?
Gfxmenu (hd0,2)/boot/message
GRUB меню может быть графическим. Все необходимое для отображения изящного пользовательского представления с цветным фоном и некоторыми дополнительными элементами, размещено на первом физическом диске, третьем разделе (hd0,2). Это первичный раздел, как вы успели заметить.
Title openSUSE 10.2 root (hd0,2) kernel /boot/vmlinuz-… initrd /boot/initrd.img-…
Это первая операционная система в меню.
- title (заголовок) — элементарно, означает тоже, что и его смысл. Эта строка предназначена помочь пользователю прочитать меню в более доступной терминологии.
- root (hd0,2) указывает GRUB, где размещены его конфигурационные файлы. В этом примере они могут быть найдены на (hd0,2)/boot/grub .
- kernel /boot/vmlinuz-… загрузка модуля ядра текущей операционной системы. Может быть доступно несколько подобных образов. Тот факт, что отсутствует ссылка на загрузочное устройство перед /boot/vmlinuz означает, что образ размещен на том же разделе жесткого диска, что и сам GRUB. Это обстоятельство часто определяет ваш выбор операционной системы, загружаемой по умолчанию.
- initrd /boot/initrd.img-… является временным системным файлом, который создается системой при подготовке к загрузке. Подготовка включает в себя адаптацию универсального модуля ядра для конкретного оборудования, до его загрузки.
Дополнительные ключи используются после указания ядра. Они определяют текущее размещение корневой директории (root), используемый графический режим и размещение раздела подкачки (swap). В этой статье не будут рассматриваться подробно расширенные конфигурации GRUB.
Title Ubuntu, kernel … (/dev/sda9) kernel (hd0,8)/boot/vmlinuz-… initrd (hd0,8)/boot/initrd.img-…
- В данном случае, title отображаемое имя, с некоторыми дополнительными техническими подробностями.
- kernel (hd0,8)/boot/vmlinuz-… размещение 9-й раздел на первом жестком диске (hd0,8) . Флаг root (/dev/sda9) обозначает, что root раздел так же содержит в себе модуль ядра, то есть размещаются они на одном разделе жесткого диска. Обычно, это делается из соображений практичности и простоты. Вы можете изменить это размещение во время установки операционной системы.
- initrd (hd0,8)/boot/initrd.img-… здесь ничего нового.
Замечания по разделам модулей ядра и корневому разделу: на старых компьютерах, BIOS которых не поддерживает доступ к более чем 1024 цилиндрам, вы должны были установить загрузочный раздел, содержащий модуль ядра и корневой раздел, в разных местах. Однако пользователи с компьютерами младше чем проблема Y2K (проблема 2000 года) могут не беспокоиться.
Другая вещь, на которую вы должны обратить внимание, это подробная загрузка Ubuntu. Ubuntu загружается с помощью загрузчика OpenSUSE. Это свойство называется совместимая мультизагрузка (Multi-boot Compliance). OpenSUSE распознает Ubuntu и может правильно вызвать ее модули (включая специальные ключи) и cмонтировать разделы. Однако большинство операционных систем лишь частично совместимы с данным свойством (Multi-boot Compliance).
Позже я покажу вам как по разному может быть выполнен вход в Ubuntu с одинаковыми результатами.
Title Windows rootnoverify (hd0,0) chainloader (hd0,0)+1
- rootnoverify (hd0,0) означает, что openSUSE не может определить Windows операционную систему, так как она не обладает свойством мультизагрузочной совместимости (Multi-boot Compliance). По этой причине операционная система вызывается без какой-либо дополнительной информации о ее ядре. GRUB предполагает, что требуемый образ ядра будет находиться на указанном разделе и монтирует загрузчик операционной системы. Как вы видите, Windows была установлена на первом разделе первого жесткого диска. Это самое удачное расположение системы.
- Команда chainloader (hd0,0)+1 специально предназначается для применения с операционными системами, которые не могут быть непосредственно загружены. Не удивительно, что Windows операционные системы не могут быть загружены напрямую. Они загружаются с использованием метода chainloading . Как следует из названия, GRUB передает управление загрузочной последовательностью другому загрузчику, размещенному на устройстве, которое указано в меню GRUB. Это может быть Windows операционная система или любая другая, например, Linux.
Вернемся к Ubuntu. Вы, помните я говорил, что мы сможем загрузить Ubuntu другим способом? В самом деле, мы можем просто воспользоваться chainloaded, точно также как и для Windows.
Title Ubuntu root (hd0,8) chainloader (hd0,8)+1
Это будет работать также хорошо.
Следующий пункт в меню позволяет вам загрузить SUSE в защищенном (failsafe) режиме (разновидность безопасного режима). Этот пункт не содержит очень ценной и полезной информации, поэтому пропустим его, без ущерба для наших знаний.
Позвольте привести несколько примеров.
Приведенный ниже действующий пример, который записан в Ubuntu menu.lst (конечно, закомментирован).
Title Windows 95/98/NT/2000 root (hd0,0) makeactive chainloader +1 title Linux root (hd0,1) kernel /vmlinuz root=/dev/hda3 ro
Теперь вы можете легко понимать язык GRUB. Мы начали с title . root определенный раздел на котором мы рассчитываем найти ядро Windows и смонтировать его (rootnoverify эта работа будет предоставлена загрузчику Windows). makeactive команда, которая делает активным раздел с корневой директорией на диске, указанном в предыдущей строке GRUB root device . Это означает, что команда chainloader выполняется без указания целевого раздела системы (так как этот раздел совпадает с активным).
Второй пункт меню еще проще. Мы назвали его Linux, определили его раздел и загружаем его ядро. Этот случай очень интересный. Так как образ ядра и корневой раздел (root или /) находятся на разных разделах. Этот случай очень похож на случай со старыми компьютерами или компьютером с одним загрузочным разделом.
И наконец, совершенно безумные вещи:
Вы понимаете, что все просто! Когда вы набьете руку, все сомнения исчезнут.
Для получения дополнительной информации, вам необходимо обратиться к GNU GRUB Manual 0.97 .
Конфигурация GRUB
Большую часть времени, у вас не будет желания или необходимости конфигурировать GRUB. Когда вы устанавливаете операционные системы, GRUB будет устанавливаться автоматически и соответствующие строки будут добавлены в конфигурационный файл, особенно, если выбрана правильная последовательность установки операционных систем (авторитарные, то есть Windows подобные операционные системы, — первыми, гибкие операционные системы, то есть Linux и его семейство, — после).
Тем не менее, вам необходимо знать где и что нужно делать, если что-то пойдет не так.
Установка GRUB
GRUB может быть установлен на различные устройства. Большинство людей будет интересовать процесс установки GRUB на жесткий диск. Однако, изучение других его настроек совсем не повредит. Конечно, вы можете перейти дальше.
Ранее мы не устанавливали GRUB, поэтому нам необходимо знать местонахождение требуемых файлов.
Если GRUB установлен, то его меню находится внутри корневого раздела:
/boot/grub/menu.lst
Всегда, всегда делайте резервную копию этого файла перед любыми изменениями!
Так же GRUB файлы могут находиться внутри образа вашей операционной системы (как правило, CD):
/usr/lib/grub/i386-pc
Тем не менее здесь приводится ее краткая версия, для тех кого не радует чтение еще одной статьи.
Вы можете вывести на экран любую информацию о среде вашего ПК (персональный компьютер), используя терминал или текстовый редактор. Чтобы открыть файлы в текстовом редакторе необходимо указать в командной строке текстовый редактор, имя файла и путь к нему. Для открытия системных файлов необходимо иметь права суперпользователя (su или sudo для системных файлов).
$ sudo vi /etc/fstab ИЛИ $ sudo gedit /etc/fstab
Или вы можете просто вывести на экран содержимое файлов прямо в терминале с помощью команды cat .
$ (sudo) cat /etc/fstab
Несколько полезных команд, которые могут быть полезны, если вы имеете дело с загрузкой, жесткими дисками и разделами.
Выводит на экран таблицу разделов:
$ fdisk -l
Выводит на экран список монтированных разделов:
$ cat /etc/fstab
Сейчас мы знаем что нужно, и где это найти, для того чтобы установить GRUB.
GRUB на флоппи диске
Для того чтобы установить GRUB на флоппи диск, мы должны скопировать файлы (Стадия 1 и Стадия 2) из директории образа операционной системы, в первый и второй сектор флоппи диска. Для этого будем использовать команду , которая копирует информацию посекторно.
Ниже приводится список команд, которые необходимо выполнить (они взяты из руководства):
$ cd /usr/lib/grub/i386-pc $ dd if=stage1 of=/dev/fd0 bs=512 count=1 $ dd if=stage2 of=/dev/fd0 bs=512 seek=1
Небольшое пояснение: if обозначает файл ввода, of обозначает файл вывода, /dev/fd0 ссылка на первый смонтированный дисковод флоппи дисков, bs заданный размер блока (в байтах), count инструкция, указывающая на количество блоков, которое должно быть скопировано, и seek указывает сколько блоков будет пропущено перед записью. Неудивительно что выбрана такая последовательность команд записи. В начале мы записали stage1 в первый сектор и скопировали stage2 во второй (пропустили первый сектор и затем записали).
Теперь, когда вы поняли всю мощь командной строки, в качестве домашней работы, предлагаю вам самим разобраться с особенностями других команд. Более подробно о команде dd на Wikipedia .
Это все насчет установки GRUB на флоппи диск. Так как мы скопировали стадии из образа операционной системы, то у нас имеется вся необходимая информация для настройки. Конечно, вы всегда можете внести изменения вручную. Однако об этом в следующем разделе.
Установка GRUB по умолчанию
Установка по умолчанию означает размещение GRUB Стадия 1 в первом секторе на жестком диске (Главная Загрузочная Запись — MBR или Таблица Разделов). Это значит, что вы сможете загрузиться без второго устройства, подобного флоппи диску, который стал редким в наши дни. Так же это означает, что если вы установите авторитарную операционную систему позже (подобную Windows) или восстановите главную загрузочную запись по какой-то причине (запустите fdisk /MBR из командной строки DOS) , вы удалите GRUB и сделаете не загружаемыми все системы, представленные в menu.lst.
Для установки GRUB в MBR вам необходимо загрузиться с внешнего носителя (флоппи диск, live CD Linux). После загрузки, как только будет доступно приглашение на ввод команды GRUB (grub>), выполните следующие команды:
Найдите корневое устройство GRUB:
Grub> find /boot/grub/stage1
GRUB будет искать все доступные Стадии 1 и отобразит их на экране. Если у вас имеется более одного образа операционной системы (например, SUSE, Kubuntu, Mandriva), вам будут доступны несколько Стадий 1 .
Допустим, что на компьютере имеются следующие операционные системы, которые установлены в различные разделы жесткого диска.
- SUSE на (hd0,1)
- Kubuntu на (hd0,2)
- Mandriva на (hd0,4)
Эти системы имеют свой собственный GRUB, поэтому любая из них может быть использована в качестве GRUB устройства (так как каждая из них имеет свои собственные файлы GRUB).
Если вы хотите использовать SUSE GRUB, вам необходимо сделать корневым устройством GRUB (GRUB root device) первый раздел жесткого диска (hd0,1) :
Grub> root (hd0,1)
Если вы хотите использовать Mandriva»s GRUB , необходимо сделать следующее:
Grub> root (hd0,4)
Если вам известно размещение корневого раздела GRUB и необходимых файлов, то можете обойтись без команды find.
Если вы определили корневой раздел, вам необходимо записать информацию в MBR (Главную Загрузочную Запись):
Grub> setup (hd0)
И наконец, выйдите из GRUB консоли:
Grub> quit
Вот вся последовательность команд, которую вам необходимо выполнить:
Grub> find /boot/grub/stage1 (optional) grub> root (hdX,Y) grub> setup (hd0) grub> quit
Вы можете установить GRUB на другой физический диск или раздел. В этом случае вам нужно будет осуществить последовательную загрузку (chainload), то есть необходимо передать управление от GRUB другому загрузчику, который выполнит загрузку системы вместо него.
Это все. Просто и быстро!
Установка GRUB с помощью grub-install
Этот метод считается менее безопасным (согласно руководству), так как осуществляет автоматическое преобразование дисков. Можете успокоиться, для полных новичков, которым нужна подробная помощь при установке, это, наверное, самый предпочтительный метод.
Вам нужно вызвать только одну команду с одним аргументом — указать размещение, куда должен быть установлен загрузчик. Эта команда может быть записана несколькими способами, которые эквивалентны:
$ grub-install /dev/hda $ grub-install /dev/hd0 $ grub-install «(hd0)» $ grub-install hd0
После того как вы установили GRUB, ваша операционная система будет загружаться. После загрузки операционной системы, вы можете опять экспериментировать с GRUB. Изменять вручную установки, например, добавлять и удалять конфигурационные данные, менять загрузчики в последовательной загрузке (chainloader), скрывать и отображать разделы.
Настройка GRUB вручную (после установки)
Вы можете переконфигурировать или переустановить GRUB в любой момент.
Резервное копирование!
Во-первых, до внесения изменений в конфигурационный файл GRUB, настоятельно рекомендуется сделать резервную копию существующего меню. Вы можете даже скопировать на другую машину или распечатать меню и хранить его в сейфе.
$ cp /boot/grub/menu.lst /boot/grub/menu.lst_backup
Для получения доступа к GRUB выполните следующую команду в Linux терминале:
$ sudo grub
Через какое-то время, приглашение GRUB будет показано на экране. Наличие приглашение вы можете определить по его виду: grub> .
Также вы можете получить доступ к командной строке GRUB во время загрузки. Когда меню GRUB загружается, нажмите кнопку C на клавиатуре.
Добавление новой операционной системы в меню GRUB
Предположим, вы имеете ранее установленную операционную систему Sabayon (Sabayon Linux ранее известный как RR4 и RR64 — дистрибутив на ядре Linux, представляющий собою форк дистрибутива Gentoo). В процессе установки вы пропускаете установку GRUB. Это означает, что конфигурационные файлы ранее установленного GRUB не изменились и не содержат данных о Sabayon. И Sabayon не сможет быть загружен.
Примечание: Разделы GRUB меню названы комнатами (возможно это особенность данного экземпляра?).
Таким образом, нам необходимо добавить Sabayon в конфигурационный файл GRUB.
Если вы знаете, где Sabayon был установлен, то вам надо добавить его данные в menu.lst.
Title Sabayon root (hdX,Y) chainloader +1
Однако это можно сделать во время загрузки компьютера без редактирования меню. Когда установленный GRUB начнет загружаться, нажмите кнопку C , чтобы вызвать командную строку. И затем:
Grub> root (hdX,Y) grub> chainloader +1
При желании вы можете использовать команду find , чтобы узнать требуемые данные.
Это и есть вся магия GRUB. Как вы видите, она очень-очень простая. Но для людей, которые никогда не слышали о GRUB и видели только длинный список странных команд, может показаться устрашающей.
Теперь, когда мы знаем основы начальной загрузки и GRUB, самое время получить дополнительную информацию и разобрать наиболее типичные проблемы, которые могут возникнуть.
Сложный способ
- Загрузитесь с флоппи диска или CD (любой Linux live CD должен подойти)
- Войдите в режим командной строки GRUB.
Все тоже самое, что и раньше!
Windows установлена не на первом жестком диске (Своппинг)
GRUB не может загрузить напрямую операционную систему Microsoft. Иногда даже последовательная загрузка может не работать, особенно, если Windows установлена не на первом жестком диске. И снова вы должны помнить, что нужно устанавливать Windows первой, на первый жесткий диск и на первый раздел (правило 3П — трех первых). При этом, даже если вы установили Windows на отдельном диске, вы можете решить проблему с помощью своппинга.
Вам необходимо сделать виртуальный своп между жесткими дисками. Таким образом:
Grub> map (hd0) (hd1) grub> map (hd1) (hd0)
После добавления этих двух строк, вы должны загрузить Windows (или DOS).
Несколько Windows операционных систем установлены на одном первом жестком диске (Скрыть/Показать)
С Windows опять могут возникнуть проблемы, если имеется несколько экземпляров размещенных на одном жестком диске, в особенности, если они установлены на первичных разделах. Раньше, когда вы использовали команду chainloader (последовательная загрузка), вы передавали управление начальному загрузчику Windows. Какому загрузчику операционной системы передать управление сейчас?
Проблема легко решается с помощью скрытия и отображения разделов. Если GRUB скроет раздел, то он будет невидим для Windows, что позволить избежать неопределенности. И наоборот, если вы сделаете видимым раздел, Windows обнаружит его и сможет с него загрузиться.
Приводимый здесь пример, взят из руководства, он демонстрирует этот момент.
Предположим, что мы имеем установленную Windows на первом и втором разделе жесткого диска. Вы хотите загрузить первый экземпляр Windows. Тогда вам необходимо выполнить следующую последовательность команд, которая сделает всю требуемую работу.
Grub> unhide (hd0,0) grub> hide (hd0,1) grub> rootnoverify (hd0,0) grub> chainloader +1 grub> makeactive
Вы изменили размер раздела; GRUB не работает
Это интересный случай. Он может случиться после использования программного обеспечения для работы с жесткими дисками (управление разделами жесткого диска, восстановление разделов из образов разделов, и т.д.), которое изменяет Таблицу Разделов. Обычно это случается, когда вы делаете такие изменения из Windows. Linux не будет информирована об этих изменениях, потому что Windows не обращает внимания ни на что, кроме имеющихся на этой машине продуктов Microsoft. Следовательно, GRUB не будет работать.
Скорее всего повреждена файловая система и ее необходимо восстановить для решения данной проблемы.
Загрузитесь с live CD и выполните следующие команды (предполагается что вы знаете, где размещены Linux-разделы).
Выполните проверку файловой системы:
$ fsck.ext2 /dev/hdXY
Замените X и Y буквой жесткого диска и номером раздела, который вы хотите проверить (hda2, hdb3, и т.д.).
Измените тип файловой системы на файловую систему ext2/3 .
$ tune2fs -j /dev/hdXY
Теперь монтируйте корневую файловую систему на /mnt/sysimage и запустите grub:
$ mount -t ext2 /dev/hdXY /mnt/sysimage ИЛИ $ mount -t ext2 /dev/hdXY /mnt/sysimage $ cd /mnt/sysimage/sbin $ grub
Вы снова вернулись в знакомую среду.
Для получения дополнительной информации о командах Linux, например, fsck.ext2 , tune2fs и других, обратитесь к Manual pages на Linux Reviews .
В заключение, несколько каверзных вопросов, отвеченных в Ubuntu
Производится с «живой» системы (например, в Knoppix), так как без рабочего загрузчика невозможно запустить дистрибутив Linux, установленный на жестком диске вашего компьютера.
Базовая информация о загрузочном секторе
Прежде чем я расскажу, как на самом деле производится установка , необходимо ненадолго заглянуть внутрь BIOS и MS DOS. Интерпретация (одного или нескольких) загрузочных секторов происходит по принципу, появившемуся не один десяток лет назад. В дальнейшем предполагается, что вы знаете о существовании нескольких типов разделов.
Основная запись диска (MBR). Это первый сектор жесткого диска. Он занимает 512 байт и обычно содержит крошечную программу (не больше 446 байт). Далее следует таблица разбиения диска для четырех основных разделов (64 байт) и цифровая подпись (2 байт).
Загрузочный сектор раздела.
Такой сектор есть не только в MBR, но и в каждом разделе, и в действительности он может занимать до 16 секторов жесткого диска (8192 байт). В большинстве файловых систем загрузочный сектор раздела не используется, то есть сами данные начинаются только с последующих секторов. Но есть и исключения. Например, файловая система XFS использует все сектора. Если при этом информация загрузочного сектора раздела XFS будет стерта, то файловая система разрушится!Запуск компьютера.
При запуске BIOS считывает запись MBR первого жесткого диска, загружает ее в оперативную память и проверяет, содержатся ли в двух последних байтах шестнадцатеричные коды 55 АА. Эти коды служат для идентификации носителей с возможностью загрузки. Если коды совпадают, то выполняется минипрограмма с загрузочного сектора. На компьютере, где установлена система MS DOS или Windows (не Linux), такая программа «узнает», какие из системных разделов помечены как активные (обычно это первый раздел). Затем эта программа загружает еще одну программу — из загрузочного сектора активного раздела — и выполняет ее. И уже эта программа отвечает за запуск Windows или MS DOS.Если на компьютере установлено несколько жестких дисков, можно настроить в BIOS, в каком порядке будут запрашиваться жесткие диски при загрузке. Таким образом, в современных компьютерах система может загружаться с внешнего диска или USB-флешки. BIOS можно настроить и так, чтобы загрузка производилась с CD или DVD.
Существует несколько стратегий, позволяющих обеспечить мирное сосуществование Windows и Linux.
Самый обычный способ заключается в том, чтобы установить загрузчик Linux в MBR и выбирать, какую систему запускать, — Windows или Linux.
Если на компьютере уже установлена современная версия Windows (новее 9х/ ME), можно настроить загрузчик Windows так, чтобы он запускал . Достоинство в том, что MBR даже не нужно трогать. Недостаток состоит в том, что процесс установки относительно сложен. Кроме с WUBI, мне не известен ни один дистрибутив Linux, который мог бы выполнять такую операцию. Всегда требуется работать вручную.
Третий вариант заключается в том, чтобы установить в загрузочный сектор основного раздела и пометить этот раздел как активный. При использовании такого варианта есть то же существенное достоинство, что и в предыдущем случае: не нужно трогать MBR. Недостаток в том, что метод работает лишь с основными разделами (но не с логическими) и лишь с теми файловыми системами, которые не касаются загрузочного сектора вашего раздела. Поскольку эти ограничения существуют, мы этот вариант далее рассматривать не будем.
Создание резервной копии MBR
Root# cp /usr/lib/grub
Затем запустите и выполните в нем следующую команду setup. Вместо (hdl,12) нужно указать имя устройства того раздела вашего жесткого диска, в котором находится каталог /boot. Обратите внимание — часто каталог /boot находится в собственном разделе, а не в системном! Переменная (hdO) обозначает место, куда должен быть установлен
Если запускается опосредованно, через загрузчик Windows.
Если запускается опосредованно, через загрузчик Linux (например, ), который уже находится в MBR, а вы не хотите его трогать. Этот вариант возможен прежде всего в тех случаях, когда вы намереваетесь параллельно использовать несколько экземпляров Linux.
устанавливается в загрузочный сектор основного раздела, и вы помечаете этот раздел как «активный» с помощью команды fdisk (клавиша А, команда toggle a bootable flag). В таком случае программа, находящаяся в MBR, учитывает загрузочный сектор активного раздела. Данный метод не работает для логических разделов, а также в тех случаях, когда в MBR уже установлен GRUB или другой загрузчик.
Обычно для такой установки применяется системный раздел Linux. Иначе говоря, если вы установили Linux в раздел /dev/sda7 и хотите установить GRUB в загрузочный сектор этого же раздела, выполните приведенные ниже команды. Единственное отличие по сравнению с установкой в MBR состоит в том, что в setup вы указываете не (hdO), а нужный раздел.
root# grub grub> root (hd1,12)
grub> setup (hd0,6) (Установка в загрузочный сектор /dev/sda7) grub> quit
ВНИМАНИЕ
В некоторых файловых системах загрузочный сектор раздела нельзя использовать с помощью загрузчика или других программ. К таким системам относится XFS. Если установить GRUB в загрузочный сектор раздела XFS, то файловая система будет разрушена! По этой причине в таких системах установка в загрузочный сектор не применяется.Установка на USB-носитель
В BIOS современных компьютеров обычно предусмотрена возможность загружать систему с USB-носителя. В принципе вполне можно установить GRUB
В загрузочный сектор флешки и загружать с его помощью Windows, Linux и т. д. Теоретически все просто, но на практике часто возникают проблемы. Есть две основные причины проблем.
Материнская плата должна правильно распознавать USB-носитель уже при загрузке и работать с ним как со средством загрузки. Обратите внимание и на то, что флешку можно отформатировать двумя способами: как «супердискету» (superfloppy) или как жесткий диск. Какой вариант будет использоваться, зависит от BIOS.
Учитывайте также, что необходимо активизировать поддержку USB в BIOS (обычно для этого предназначается специальный параметр BIOS). В отличие от Linux, GRUB может обращаться к USB-носителям только через BIOS!Если BIOS опознает USB-носитель как загрузочный диск, то при этом (как минимум в некоторых версиях BIOS) изменится порядок, в котором GRUB будет «видеть» носители с данными. Теперь первым диском (hdO) будет считаться USB-носитель, встроенные жесткие диски будут запрашиваться через (hdl), (hd2) и т. д. При необходимости соответствующим образом измените /boot/ grub/devices.map перед установкой GRUB.
Оптимальная стратегия — сначала попробовать установить GRUB на флешке. Когда Linux запущена, GRUB опознает флешку под названием (hdn+1), где n — это последний внутренний жесткий диск. Если ваша система Linux, как в предыдущих примерах, находится в разделе /dev/sdb13 и в компьютере имеется два внутренних диска, флешка будет называться (hd2). Для того чтобы установить GRUB в MBR флешки, используйте следующие команды:
root# grub grub> root (hd1,12)
grub> setup (hd2) (Установка в MBR USB-носитоля) grub> quit
В идеальном случае после перезапуска компьютер обнаружит GRUB в MBR на флешке и, как и предполагалось, загрузит операционные системы, указанные в menu.l st. Если при запуске операционных систем возникнут сложности, перейдите из меню GRUB в интерактивный режим, нажав клавишу С, а затем, воспользовавшись командой cat и клавишей табуляции, узнайте, под какими названиями GRUB «видит» жесткие диски. Нажатие Esc выводит вас обратно в меню, где с помощью клавиши Е можно изменить команды загрузки и испробовать их еще раз.
Установка Linux на жестких дисках, подключаемых через USB. До сих пор предполагалось, что USB-флешка будет использоваться только для запуска загрузки. Но ситуация осложняется, если и сама Linux находится на большой флешке или на внешнем жестком диске, подключаемом через USB. В большинстве дистрибутивов можно без труда установить USB-носитель, но при запуске могут возникнуть проблемы. Вам придется преодолеть три основных препятствия. GRUB — как было указано выше, уже при установке GRUB на USB-носитель могут возникать проблемы. Вы можете попробовать, получается ли такая установка. При необходимости поэкспериментируйте с настройками BIOS и обозначениями приводов и попробуйте настроить эти свойства в файле menu.lst вручную.
USB-модули для ядра — ядро уже в момент запуска должно быть «в состоянии» обратиться к USB-носителю. Чтобы это получилось, в файле Initrd должны храниться все необходимые USB-модули. Базовые сведения о том, как построены файлы Initrd и как они создаются, сообщаются в следующем разделе.
Названия устройств — в зависимости от того, как загружается компьютер — с подключенными внешними жесткими дисками (USB) или без них, — названия устройств жестких дисков могут изменяться (/dev/sda на /dev/sdb). Поэтому целесообразно использовать в файле /etc/fstab и при задании корневых параметров в строке kernel в menu.lst не названия устройств, аномера UUID. Если вы работаете с , то в menu.lst с помощью uuid также можно выбрать тот раздел, в котором будут находиться ядро и файл Initrd.
При работе с современными материнскими платами, как правило, можно без проблем использовать Linux, установленную прямо на USB-носителе. Однако, чтобы все заработало, порой приходится потрудиться и потратить время. Если вы только начинаете работать с Linux, не рекомендую использовать этот вариант.
Читайте так же:
Что такое загрузчик? — Определение из Техопедии
Что означает загрузчик?
Загрузчик — это основной компонент операционной системы, который обеспечивает загрузку всех необходимых программ и библиотек, что важно на этапе запуска программы. Он помещает библиотеки и программы в основную память, чтобы подготовить их к выполнению. Загрузка включает в себя чтение содержимого исполняемого файла, содержащего инструкции программы, а затем выполнение других подготовительных задач, необходимых для подготовки исполняемого файла к запуску, и все это занимает от нескольких секунд до минут в зависимости от размера файла. программа, которую нужно запустить.
Techopedia объясняет погрузчик
Загрузчик — это компонент операционной системы, который выполняет задачу подготовки программы или приложения к выполнению в ОС. Он делает это, считывая содержимое исполняемого файла и затем сохраняя эти инструкции в ОЗУ, а также любые элементы библиотеки, которые должны находиться в памяти для выполнения программы. Это причина того, что экран-заставка появляется прямо перед запуском большинства программ, часто показывая, что происходит в фоновом режиме, то есть то, что загрузчик в данный момент загружает в память.Когда все это будет сделано, программа готова к выполнению. Для небольших программ этот процесс почти мгновенен, но для больших и сложных приложений с большими библиотеками, необходимыми для выполнения, таких как игры, а также программное обеспечение 3D и CAD, это может занять больше времени. Скорость загрузки также зависит от скорости процессора и оперативной памяти.
Не весь код и библиотеки загружаются при запуске программы, а только те, которые необходимы для фактического запуска программы. Другие библиотеки загружаются по мере выполнения программы или только по мере необходимости.Это особенно верно для таких приложений, как игры, которым нужны только ресурсы, загруженные для текущего уровня или местоположения, в котором находится игрок.
Хотя загрузчики в разных операционных системах могут иметь свои особенности и специализированные функции, присущие этой конкретной операционной системе, они по-прежнему выполняют в основном одну и ту же функцию. Ниже перечислены обязанности загрузчика:
- Проверить программу на предмет требований к памяти, разрешений и т. Д.
- Скопировать необходимые файлы, такие как образ программы или необходимые библиотеки, с диска в память
- Скопировать необходимые аргументы командной строки в стек
- Свяжите начальную точку программы и свяжите любую другую необходимую библиотеку
- Инициализировать регистры
- Переход к начальной точке программы в памяти
Загрузка операционной системы
Как запустить эту первую программу?
Пол Кшизановски
26 января 2015
Операционная система иногда описывается как «первая программа», тот, который позволяет запускать другие программы.Однако обычно его хранят как файл (или, чаще, набор файлов) на диске. Как запускается эта «первая» программа?
Передняя панель PDP – 11/70Операционная система загружается через процесс начальной загрузки , подробнее кратко известный как загружается . Загрузчик — это программа, задача — загрузить больший программа, например, операционная система.
Когда вы включаете компьютер, его память обычно не инициализируется. Следовательно, нечего бежать.Рано компьютеры будут иметь оборудование, которое позволит оператору нажмите кнопку, чтобы загрузить последовательность байтов с перфокарт, перфорированная бумажная лента или магнитофон. Переключает на передней панели компьютера Panel будет определять источник данных и целевой адрес памяти. В некоторых случаях программное обеспечение загрузчика будет жестко подключено как энергонезависимая память (в ранних компьютерах это была бы сетка провода с надрезами в подходящих местах, где требовался 0-бит).
В ранних системах миникомпьютеров и микрокомпьютеров, оператор компьютера будет использовать переключатели на передней панели компьютера, чтобы переключить код, чтобы загрузить более крупный программу, программируя каждую ячейку памяти, а затем запуская программа.Эта программа может делать что-то базовое, например, последовательное чтение байтов в память с бумажной ленты, прикрепленной к телетайпу.
В более поздних системах постоянная память будет содержать небольшой загрузчик. который имел бы базовый интеллект, чтобы читать, скажем, первый сектор (512 байт) диска.
Поскольку эта первоначальная программа должна была быть как можно меньше, она имеют минимальные возможности. Часто случается, что ботинок загрузчик загрузит другой загрузчик, называемый второй ступенью погрузчик , который был посложнее.Этот загрузчик второй ступени будет иметь проверку ошибок, среди возможных других функций, таких как предоставление пользователю выбора операционной системы для загрузки, возможность для загрузки диагностического ПО или включения диагностических режимов в Операционная система. Это многоступенчатый загрузчик , имеющий загрузочную Загрузчик загружает более крупный загрузчик, называется с цепной загрузкой .
Загрузчик часто выполняет некоторую инициализацию ядра системы. оборудование, а затем загрузит операционную систему.После того, как операционная система загружена, загрузчик передает ей управление и больше не нужен. Операционная система инициализируется сама, настроить аппаратное обеспечение системы (например, настроить управление памятью, настроить таймеры, установите прерывания) и загрузите драйверы устройств, если необходимо.
Чтобы конкретизировать пример процесса загрузки, возьмем посмотрите на 32-битные Intel-совместимые ПК (мы скоро перейдем к 64-битным системам). Этот архитектура известна как IA – 32 (архитектура Intel, 32-разрядная версия) и определяет набор команд большинства микропроцессоров Intel, так как Intel 80386, представленный в 1986 году.Он по-прежнему поддерживается Новейшие процессоры Intel.
Ожидается, что компьютер на базе IA – 32 будет иметь BIOS ( Basic Input / Output System , который содержит прошивку загрузчика) в энергонезависимой памяти (ПЗУ в прошлом и НИКАКАЯ флэш-память в наши дни). BIOS — это потомок BIOS, обнаруженный в ранних системах CP / M, в том смысле, что он содержит низкоуровневые функции для доступа к некоторым базовым системным устройствам, таким как выполнение дискового ввода-вывода, чтение с клавиатуры и доступ к видео дисплей.Он также содержит код для загрузки загрузчика , этап 1, .
Когда ЦП сбрасывается при запуске, компьютер начинает выполнение в
ячейка памяти 0xffff0
(архитектура IA – 32 использует
сегмент: офсетная форма адресации; сегмент кода установлен на 0xf000
и указатель инструкции установлен на fff0
).
Процессор запускается в реальном режиме , что дает ему доступ к
только 20-битное адресное пространство памяти и обеспечивает прямой доступ к
Ввод-вывод, прерывания и память (32-битная адресация и виртуальная память
вступает в игру при переключении процессора в защищенный режим ().Расположение по адресу 0xffff0
фактически находится в конце
ПЗУ BIOS и содержит инструкцию перехода в область
BIOS, содержащий код запуска.
При запуске BIOS выполняет следующую последовательность:
- Самотестирование при включении (POST)
- Обнаружение BIOS видеокарты (чипа) и выполнение его кода для инициализации видеооборудования.
- Обнаружение BIOS любого другого устройства и вызов их функций инициализации
- Отобразить начальный экран BIOS
- Выполните краткий тест памяти (определите, сколько памяти в системе)
- Установить параметры памяти и привода
- Настройка устройств Plug & Play (традиционно устройств с шиной PCI)
- Назначить ресурсы (каналы DMA и IRQ)
- Определите загрузочное устройство
Когда BIOS определяет загрузочное устройство (обычно одно из нескольких
диски, которые были помечены как загрузочные), он читает
блок 0 с этого устройства в ячейку памяти 0x7c00
и
прыгает туда.
Этап 1: основная загрузочная запись
Этот первый дисковый блок, блок 0, называется Master Boot Record ( MBR ) и содержит загрузчик первой ступени. Поскольку стандартный размер блока составляет 512 байт, весь загрузчик должен соответствовать в это пространство. Содержимое MBR:
- Загрузчик первой ступени (≤ 440 байт)
- Подпись диска (4 байта)
- Таблица разделов диска, которая определяет отдельные области диска (16 байт на раздел × 4 раздела)
Этап 2: загрузочная запись тома
Как только BIOS передает управление началу MBR, которая была загруженный в память, код MBR просматривает свою таблицу разделов и загружает загрузочную запись тома ( VBR ) для этого раздела.VBR — это последовательность последовательных блоков, начинающихся на первом блоке диска обозначенного раздел. Первый блок VBR определяет тип раздела. и размер и содержит Initial Program Loader ( IPL ), который является кодом, который загрузит дополнительные блоки, составляющие загрузку второй ступени погрузчик . В системах, производных от Windows NT (например, Windows Server 2012, Windows 8), IPL загружает программу под названием NTLDR , которая затем загружает операционная система.
Одна из причин, по которой загрузчикам низкого уровня сложно работать с загрузка полной ОС, особенно той, которая может состоять из нескольких files, заключается в том, что для этого требуется способность анализировать файловую систему состав. Это означает понимание того, как каталоги и имена файлов выложены и как найти блоки данных, которые соответствуют конкретный файл. Без большого количества кода гораздо проще просто читать последовательные блоки. Загрузчик более высокого уровня, например NTLDR от Microsoft, может читать форматы файлов NTFS, FAT и ISO 9660 (CD).
Помимо Windows
Существует множество вариантов загрузки других операционных систем на ПК Intel. Одним из популярных загрузчиков в системах Linux является GRUB или GRand Unified Загрузчик. GRUB также является многоступенчатым загрузчиком. BIOS, конечно же, делает то, что делает всегда: определяет загрузочное устройство, загружает основную загрузочную запись и передает управление этому вновь загруженному код. В GRUB MBR обычно содержит загрузчик первого уровня под названием GRUB Stage 1 . Этот загрузчик этапа 1 загружает GRUB Stage 2 .Загрузчик этапа 2 предоставляет пользователю выбор операционных систем для загрузки и позволяет пользователю указать любые дополнительные параметры загрузки для этих систем (например, установить максимальный объем памяти, включить отладку). Тогда это читает в выбранном ядре операционной системы и передает ему управление.
Конкретная проблема с использованием GRUB для загрузки Windows заключается в том, что Windows не Мультизагрузка совместимый. Мультизагрузка — это спецификация Free Software Foundation для загрузки нескольких операционных систем с использованием единый загрузчик.В этом случае GRUB подделывает обычный процесс загрузки Windows. Это загружает загрузчик, который обычно находится в MBR (или запустите программу меню загрузки Windows). С этого момента GRUB больше не используется, Windows понятия не имеет, что произошло, и процесс загрузки Windows берет верх.
Прощай, BIOS. Привет, UEFI
По мере того, как 64-битные архитектуры пришли на смену 32-битным архитектурам, BIOS начал выглядеть довольно устаревший. Intel намеревалась создать спецификацию преемника BIOS, которая не имела ограничений на необходимость запуска кода запуска в 16-битном режиме с 20-битной адресацией.Эта спецификация называется Unified Extensible Firmware Interface , или UEFI . Хотя он был разработан Intel, с 2005 года он находился под управлением Unified EFI Forum. Это используется во многих новых 64-битных системах, включая Mac, которые также поддерживают устаревшую версию BIOS для работы с Windows.
Некоторые из функций, которые поддерживает EFI:
- Компоненты BIOS
- сохранил некоторые компоненты из BIOS, включая питание управление (Advanced Configuration & Power Interface, ACPI) и компоненты системного управления (например,г., чтение и установка даты).
- Поддержка больших дисков
- BIOS поддерживает только четыре раздела на диске с емкостью до 2,2 ТБ на раздел. UEFI поддерживает максимальное количество разделов размер 9,4 ЗБ (9,4 × 10 21 байт).
- Нет необходимости запускать в 16-битном (реальном) режиме
- Среда выполнения перед загрузкой дает вам прямой доступ ко всей системной памяти.
- Драйверы устройств
- UEFI включает драйверы устройств, включая возможность интерпретации архитектурно-независимый байтовый код EFI (EBC).Операционные системы используют тем не менее, их собственные драйверы, так что, как и в случае с BIOS, драйверы обычно используются только для процесса загрузки.
- Диспетчер загрузки
- Это важный. В старом BIOS были только смарты для загрузки одного блока, что требует многоступенчатой загрузки процесс. В UEFI есть собственный командный интерпретатор и полный менеджер загрузки. Вам больше не нужна специальная загрузка погрузчик. Пока вы помещаете загрузочные файлы в загрузочный UEFI раздел, отформатированный как файловая система FAT (стандартная формат файловой системы в старых системах Windows; тот, который почти каждая операционная система умеет обращаться).
- Расширяемость
- Прошивка расширяемая. Расширения UEFI можно загружать в энергонезависимую память.
Загрузка с UEFI
С UEFI больше нет необходимости в главной загрузочной записи для хранить загрузчик первой стадии; UEFI умеет разбирать файл системе и загрузить файл самостоятельно, даже если этот файл не занимает смежные блоки диска. Вместо этого UEFI считывает GUID (глобально уникальный IDentifier) Таблица разделов ( GPT ), которая находится в блоки сразу после блока 0 (где MBR все еще находится по причинам наследия).GPT описывает схему раздела. стол на диске. Исходя из этого, загрузчик EFI идентифицирует EFI Системный раздел. Этот системный раздел содержит загрузчики для все операционные системы, которые установлены на других разделах на устройство. Для систем Windows с поддержкой EFI UEFI загружает Диспетчер загрузки Windows (bootmgfw.efi). Для старых 64-битных систем NT EFI загрузит IA64ldr . Для Linux есть много вариантов. Два общих одни должны использовать версию GRUB с поддержкой EFI (Grand Unified Загрузчик) и загрузите файл, например grub.efi или для загрузки EFI загрузка elilo.efi , загрузчик EFI.
В общем, даже с UEFI доминирующим подходом является загрузка загрузочного загрузчик, предназначенный для конкретной операционной системы, а не для загрузки эта операционная система напрямую. Однако необходимость в многоступенчатом процесс загрузки, требующий загрузки нескольких загрузчиков, отсутствует дольше необходимо.
Все наше обсуждение до сих пор было сосредоточено на загрузке с Intel Архитектура на базе ПК (включая IA-32 / IA-64-совместимую архитектуры, например AMD).Это доминирующая архитектура в современных ПК (ноутбуки через серверы), но есть много, много устройства сторонних производителей, особенно встраиваемые устройства, такие как как сотовые телефоны. Что насчет них?
Существует множество реализаций процесса загрузки. Многие встроенные устройства не загружают операционную систему, но она уже установлена хранятся в энергонезависимой памяти (например, флэш-памяти или ПЗУ). Те что загрузка ОС, например, телефонов Android на базе ARM, будет выполнять код в постоянной памяти (обычно во флэш-памяти NOR) когда устройство включено.Этот загрузочный код встроен в ASIC ЦП на некоторых устройствах, поэтому вы не нужна отдельная микросхема флеш-памяти на плате.
Когда система перезагружается (включая включение питания), процессор
находится в режиме супервизора (SVC), и прерывания отключены. На базе ARM
системы процессор начинает выполнение по адресу 0x00000000
. Флеш-память, содержащая код запуска,
отображается на адрес 0x00000000
при сбросе. Этот код выполняет различные
инициализации, включая настройку таблицы векторов исключений
в DRAM и копирование кода приложения из ROM в DRAM (код работает быстрее
в DRAM).Код переназначает DRAM на адрес 0, таким образом
сокрытие флеш-памяти (процессор имеет
бит REMAP для изменения отображения флэш-памяти). Память
затем инициализируется система. Это включает в себя настройку защиты памяти
и настройка системных стеков. Затем инициализируются устройства ввода-вывода, и
процессор переведен в пользовательский режим. Загрузочная прошивка определяет загрузочную
media и загружает и запускает загрузчик второй стадии (при необходимости).
Второй
этап загрузчика часто является GRUB для больших систем или uBoot для
встроенные системы.Этот загрузчик второй ступени загружает рабочий
система и передает ей управление.
Старые версии систем Apple Macintosh на базе PowerPC, по крайней мере, OS 8, а также OS X, были основаны на открытой прошивке. Открытая прошивка возникла в Sun и использовалась в компьютерах, отличных от Intel Sun. После того, как Apple перешла на системы Intel, она приняла UEFI в качестве прошивки на уровне загрузки.
Старые Mac
Open Firmware хранится в ПЗУ и, как и BIOS ПК, запускается при включении питания. Поскольку Open Firmware была разработана, чтобы быть независимой от платформы, она реализован на Forth (простой стековый язык) и скомпилирован в байт-коды, а не в собственные машинные инструкции.Прошивка содержит интерпретатор байт-кода.
В отличие от BIOS, Open Firmware предоставляет пользователю командную строку. процессор, с которого можно редактировать параметры конфигурации системы, например, уменьшить объем физической памяти, отладить систему или даже запустить telnet-сервер, чтобы вы могли взаимодействовать с прошивкой и процесс загрузки с удаленной машины через соединение Ethernet.
Перед загрузкой операционной системы Open Firmware создает дерево устройств, исследуя компоненты на основной плате и устройствах расширения.
Как и BIOS ПК, Open Firmware содержит драйверы устройств, Процесс загрузки в прошивке можно использовать для доступа к диску, клавиатуре, монитор и сеть. Однако все эти драйверы реализованы в FCode, система байт-кода Forth. Так же, как и BIOS, эти драйверы используется только во время загрузки. Сама операционная система имеет собственные драйверы времени выполнения.
В отличие от BIOS, Open Firmware может анализировать файловые системы HFS / HFS +.
(собственная файловая система на Mac), поэтому вы можете использовать Open Firmware
интерпретатор команд для загрузки загрузочного файла с жесткого диска и
запустить его.По умолчанию Open Firmware загружает файл из системы.
раздел. В системах OS 9 это был файл под названием «Mac OS ROM».
в папке System . В системах OS X он загружает / Система / Библиотека / CoreServices / BootX
. BootX
— загрузчик
который затем загружается в ядро.
Mac сегодня
Mac использует UEFI для своей системной прошивки.
Когда Mac запускается, первым исполняемым кодом является BootROM. Это устанавливает драйверы EFI для соответствующих аппаратных устройств, инициализирует некоторые аппаратные интерфейсы, проверяет, что достаточно память доступна и выполняет краткую самопроверку при включении.В отличие от BIOS ПК, который ничего не знал о файловых системах и мог только читать необработанные блоки диска, UEFI на Mac имеет был расширен для синтаксического анализа как FAT (устаревшие файловые системы DOS / Windows) и HFS + (родной Mac) на диске. Он считывает GPT (таблицу разделов GUID) для определения разделов диска. Загрузочный том по умолчанию хранится в NVRAM.
Вместо указания пути к загрузчику, том HFS + заголовок (данные в начале файловой системы HFS +) указывает на благословенный файл или благословенный каталог (см. благослови команду.Если каталог благословлен, это указывает прошивке EFI искать в этот каталог для загрузчика. Если файл благословлен, который сообщает прошивке EFI загрузить этот файл в качестве загрузчика (есть дополнительные варианты, например, загрузка с отключенного объем).
По умолчанию загрузчик находится в /System/Library/CoreServices/boot.efi
в корне (часто
только) раздел диска.
В качестве альтернативы прошивка поддерживает загрузку второй ступени. загрузчик или ядро с сетевого сервера (netboot server).
Когда загружен файл boot.efi
, компьютер отображает
металлический логотип Apple на экране. Загрузчик загружается в
ядро, а также необходимые расширения драйверов, которые затем запускаются launchd , который выполняет различные сценарии и программы запуска.
Как только ядро загружено, под
Логотип Apple. Когда ядро запускает первый процесс, запускает ,
экран станет синим.
Описание того, как запускается OS X, можно найти в Что такое Mac OS X.
Для поддержки загрузки операционных систем на базе BIOS, например, более старых Системы Windows и Linux, использующие GRUB или другие системы, поддерживающие BIOS загрузчики, EFI устанавливает «модуль поддержки совместимости» (CSM) из системной прошивки. Затем начинается Процесс загрузки на основе BIOS. Этот модуль поддержки совместимости загружается только тогда, когда пользователь выбирает Windows в качестве ОС по умолчанию для загрузки. В процесс загрузки теперь является стандартной загрузкой на основе BIOS. Мастер загрузки Запись (MBR) загружается и выполняется, а затем обнаруживает и загружает загрузочная запись тома раздела Windows (или Linux).
Ссылки на загрузку Mac
Ссылки на Mac OS X:
Это обновленная версия исходного документа, написанного 14 сентября 2010 года.
Fix: Загрузчик операционной системы не имеет подписи
Если вы не можете запустить компьютер из-за ошибки « Загрузчик операционной системы не имеет подписи », то это, вероятно, связано с плохим файлом образа загрузки, который не распознается вашей системой. Это может быть очень тревожным, поскольку оно появляется при загрузке и, следовательно, мешает вам получить доступ к вашим файлам.Загрузчик операционной системы
не имеет подписиЧто ж, не беспокойтесь, поскольку в этом руководстве будут рассмотрены различные решения, которые вы можете реализовать. Но прежде чем мы перейдем к этому, вы можете узнать больше о причине сообщения об ошибке.
Причина появления сообщения об ошибке «Загрузчик операционной системы не имеет подписи»?Есть разные причины, по которым вы можете получить эту ошибку. Вот некоторые из них —
- Плохой / неаутентичный файл загрузочного образа : ошибка вызвана плохим / неаутентичным файлом загрузочного образа, который компьютер не распознает.В современных компьютерах для загрузки используется режим UEFI вместо режима BIOS (устаревшего). В этом режиме загрузки есть функция под названием Secure Boot , которая при включении определяет, является ли загрузочный образ подлинным или нет.
- Windows, установленная в режиме BIOS: Если вы пытаетесь загрузить операционную систему, установленную в режиме BIOS (устаревший режим), не загрузится, если включена безопасная загрузка. Так что будьте осторожны с этим.
Теперь, чтобы исправить эту ошибку, вы можете попробовать разные вещи.
Примечание:Если вы получаете эту ошибку из-за того, что вы установили Windows 10 или любую операционную систему Linux в режиме BIOS, то простое решение для нее — просто отключить режим UEFI в настройках BIOS. Это избавит от ошибки.
Но если это не так, попробуйте некоторые из приведенных ниже решений. Один из них может сработать для вас, поскольку причина каждой ошибки различна, но это общие рабочие решения для этой конкретной ошибки.
Решение 1. Выполнение аппаратного сбросаВы можете выполнить полный сброс компьютера и посмотреть, избавится ли он от этой ошибки. Если вы используете настольный компьютер, поэтому для выполнения аппаратного сброса необходимо выключить компьютер. Удалите все периферийные устройства. Затем отсоедините кабель питания и нажмите и удерживайте кнопку питания в течение 15-20 секунд. Это приведет к полному сбросу вашего компьютера до заводских настроек по умолчанию.
Если это портативный компьютер, то вам необходимо выключить ноутбук, отсоединить кабель переменного тока и аккумулятор.Затем вам нужно нажать и удерживать кнопку питания в течение 15-20 секунд. Это выполнит полную перезагрузку вашего ноутбука. Я надеюсь, что после этого ваша ошибка будет исправлена, но если это не так, вы можете попробовать другие решения, перечисленные ниже.
Решение 2. Сбросьте BIOSВторое решение, которое вы можете попробовать, — это сбросить BIOS. Что ж, у каждого производителя свой интерфейс настроек BIOS, но я расскажу, как это сделать на компьютере Dell. Вот как это сделать:
- Выключите компьютер.Затем включите его и сразу несколько раз нажмите F2 .
- Это приведет вас к настройкам BIOS .
- Теперь прокрутите вниз, и вы увидите опцию Restore Settings или BIOS Defaults . Нажмите на это. Восстановить настройки BIOS по умолчанию
Вот и все, что BIOS было сброшено. Если это не решает проблему, не волнуйтесь, мы еще не закончили, вы можете попробовать решения, указанные ниже.
Решение 3. Измените последовательность загрузкиЕсли два вышеуказанных решения не работают для вас, вы можете попробовать изменить последовательность загрузки.Для этого следуйте приведенным ниже инструкциям:
- Прежде всего, вам нужно перейти в настройки BIOS .
- Оттуда выберите режим Legacy вместо режима UEFI .
- Если это не изолирует проблему, вы можете отключить опцию Secure Boot Disable Secure Boot
Наконец, если вышеуказанные решения не работают, тогда вы можете попробовать сбросить Windows 10.Имейте в виду, что при этом ваш компьютер вернется в состояние, в котором он был некоторое время назад, что может привести к недоступности некоторого программного обеспечения, которое у вас есть прямо сейчас. Поэтому для этого вам необходимо получить доступ к среде восстановления Windows. Вот как это сделать:
- Чтобы получить доступ к WinRE , вам придется принудительно выключить компьютер два раза. Для этого вам нужно нажать и удерживать кнопку питания , пока ваш компьютер не выключится. Сделайте это дважды, и вы получите доступ к Windows Recovery Environment .После того, как вы включите его в третий раз, вы сможете получить доступ к среде восстановления Windows .
- После этого вы должны выбрать опцию Устранение неполадок и оттуда вы должны выбрать « Сбросить этот ПК ». Сброс ПК
- На следующем экране вы должны выбрать « Сохранить мои файлы / Удалить все» ».
После этого ваш компьютер перезагрузится. Для завершения процесса потребуется некоторое время, так что наберитесь терпения. Ваша ошибка должна исчезнуть после сброса Windows 10.
|
|
Что такое загрузчик? Как работает загрузчик?
Загрузчик очень важен для операционных систем. Тем не менее, его часто упускают из виду как ключевой компонент компьютеров. Это потому, что он играет свою роль в фоновом режиме, помогая активировать правильную операционную систему. На большинстве процессорных плат в наших устройствах программы предварительно загружены. Эти программы известны как загрузчики.
В этой статье объясняется, что такое загрузчик и как он работает.Если вам интересно узнать, что такое загрузчик и как он работает, эта статья для вас.
Что такое загрузчик
При включении компьютер имеет чистое состояние. Это означает, что в его памяти нет программ и доступ к его компонентам невозможен.
Загрузчик помогает загрузить операционную систему или среду выполнения, чтобы добавить программы в память и предоставить доступ к компонентам.Это необходимо для запуска процесса запуска, инициализации оборудования и передачи управления ядру, которое инициализирует операционную систему.
BIOS
Ключевые компоненты загрузчика включают базовую систему ввода / вывода (BIOS), микропрограммное обеспечение, находящееся в постоянном запоминающем устройстве (ПЗУ) ПК. Когда компьютер включен, BIOS запускается до запуска любой другой программы.
BIOS состоит из следующего:
- POST (Самотестирование при включении)
- Загрузчик загрузочного сектора
- Прерывания BIOS
- Настройки
Меню настройки помогает настроить параметры загрузчика.Современные версии BIOS используются для установки различных параметров. Сюда входит порядок загрузки, который определяет устройства, которые BIOS проверяет перед загрузкой.
Загрузчик загрузочного сектора загружает первый 512-байтовый сектор с загрузочного диска в оперативную память. Это необходимо, чтобы первый доступный блок или сектор памяти на носителе был зарезервирован для записи.
Связанный: Как получить доступ к BIOS на компьютере с Windows 8
Прерывания BIOS — это драйверы устройств, которые используются загрузчиками для доступа к экрану, клавиатуре и дискам.Не все операционные системы используют прерывания BIOS.
Помимо BIOS есть расширения ROM. Основной BIOS может запускать ПЗУ расширения.
Загрузчик обычно состоит из трех программ:
- Программа загрузочного сектора, загружаемая BIOS непосредственно во время загрузки.
- Программа второго этапа, загружаемая программой загрузочного сектора для завершения процесса загрузки.
- Установщик загрузчика для установки загрузчика и программы второго этапа на загрузочный диск.
UEFI BIOS
Растущие требования пользователей компьютеров привели к созданию современного преемника BIOS.
UEFI (Unified Extensible Firmware Interface) — это мини-операционная система, которая загружает загрузчик в память перед выполнением дополнительных рабочих процедур.
Хотя он имеет некоторое сходство с BIOS, несколько ключевых отличий заставили многих рассматривать UEFI как расширение, а не замену традиционному BIOS.
Одно из основных различий между UEFI и BIOS заключается в том, как UEFI предоставляет рабочий интерфейс для компьютеров и использует новые механизмы и функции. Кроме того, хотя UEFI не определяет, как должно быть полностью запрограммировано микропрограммное обеспечение, он влияет на интерфейс между микропрограммным обеспечением и операционной системой.
Программа UEFI постоянно находится на микросхеме памяти на материнской плате.Это означает, что он сохраняется даже при отключении питания. Для связи между прошивкой и операционной системой используется уникальный операционный уровень. Режим UEFI можно инициализировать до запуска операционной системы.
Некоторые из ключевых преимуществ UEFI:
- Не требует активной оперативной системы для работы сети.
- Лучшее удобство использования за счет использования компьютерной мыши и графического пользовательского интерфейса
- Повышенная безопасность благодаря функции безопасной загрузки
- Гибкая модульная структура, которая помогает адаптироваться к специальным аппаратным средам и профилям требований.
- Менеджер загрузки, который управляет разными загрузчиками для разных операционных систем.
- Инструмент командной строки для проведения диагностики и устранения неполадок.
Целью безопасной загрузки является повышение безопасности.Перед запуском необходимо проверить компоненты прошивки UEFI, загрузчика и ядра операционной системы. Компоненты проверяются с помощью криптографических цифровых подписей в базе данных подписей прошивки UEFI. Загрузка системы может быть отменена, если проверка безопасности не пройдена.
В профессиональных средах безопасная загрузка обычно используется с аппаратным компонентом. Модуль доверенной платформы (TPM) — ключевой компонент безопасной загрузки, обеспечивающий безопасность компьютеров.
По сравнению с традиционным методом загрузки устаревшей системы BIOS, UEFI дает следующие преимущества, а GPT предлагает следующие преимущества:
- Позволяет одновременно устанавливать несколько операционных систем со своими собственными менеджерами загрузки.
- Загружается быстрее, чем унаследованные системы BIOS
- Поддерживает предзагрузочные приложения
В наши дни для настроек, связанных с загрузкой, используется NVRAM (энергонезависимая память с произвольным доступом).Настройки сохраняются после выключения компьютера. Используется небольшое количество энергии от батареи материнской платы.
Как работает загрузчик?
После включения компьютера на экране появляется информация об установленном оборудовании. Загрузчик помещает свою операционную систему в память. Базовая система ввода / вывода (BIOS) выполняет тесты перед передачей управления в основную загрузочную запись (MBR), которая содержит загрузчик.
Многие загрузчики настроены для предоставления пользователям различных вариантов загрузки. Варианты включают разные операционные системы, разные версии одной и той же операционной системы, варианты загрузки операционной системы и программы, которые запускаются без операционной системы.
Связанный: Как отключить безопасную загрузку UEFI для двойной загрузки любой системы
В некоторых случаях на устройстве может быть две операционные системы.На этих устройствах можно использовать загрузчики для автоматического запуска нужной операционной системы, которую пользователи предпочитают. Загрузчик также можно использовать для загрузки операционной системы в безопасном режиме для восстановления.
Вы можете использовать загрузчик для загрузки программы без запуска операционной системы. Это может быть полезно для таких устройств, как игровые приставки. После того, как диск с игрой вставлен в консоль и консоль включена, пользователь сразу переходит к игре, а не к экрану приветствия.
Исключения и прерывания
Загрузчики очень важны для поддержания безопасности и архитектуры программного обеспечения. Исключения и прерывания могут обрабатываться загрузчиками и приложениями по-разному. Метод, которым связаны аппаратное и программное обеспечение, напрямую влияет на работу исключений и прерываний и влияет на функциональность загрузчика.
5 способов исправить отсутствующие настройки прошивки UEFI в Windows 10Если вы войдете в BIOS и обнаружите недостающие настройки, вот как вы их вернете.
Читать далее
Об авторе Кальвин Эбун-Аму (Опубликовано 36 статей)Кальвин — писатель в MakeUseOf.Когда он не смотрит Рика и Морти или его любимые спортивные команды, Кэлвин пишет о стартапах, блокчейне, кибербезопасности и других сферах технологий.
Более От Кальвина Эбун-АмуПодпишитесь на нашу рассылку новостей
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Еще один шаг…!
Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.
Разверните, чтобы прочитать всю историю
Загрузчик операционной системыFix не имеет проблем с подписью в Windows 10
Загрузка компьютера — это сложный процесс. Во время загрузки операционной системы загружаются и запускаются миллионы файлов. Если вы попали на эту страницу, это означает, что вы увидели следующее сообщение об ошибке:
Загрузчик операционной системы не имеет подписи.Несовместимо с SecureBoot. Все загрузочные устройства не прошли проверку безопасной загрузки.
Есть две основные причины этой проблемы: компьютер использует плохой или неподлинный файл образа загрузки или операционная система Windows установлена в режиме BIOS. Мы рассмотрим, как исправить эту ошибку в обоих случаях.
Загрузчик операционной системы не имеет сигнатуры
Мы будем выполнять следующие исправления, чтобы избавиться от ошибки в Windows 10 —
- Выполните «холодную» загрузку.
- Перезагрузите BIOS.
- Измените последовательность загрузки.
- Сбросить Windows 10.
1] Выполнить «холодную» перезагрузку
Вам необходимо Нажмите и удерживайте кнопку питания на процессоре, пока она тоже не погаснет. Это называется выполнением «холодной загрузки» .
Загрузите компьютер и проверьте, решена ли проблема.
2] Сбросьте BIOS
Если это не поможет, вы можете сбросить BIOS и посмотреть.
Запустите компьютер и во время загрузки нажмите клавишу F10 , чтобы войти в BIOS — но это также может быть клавиша F1, F2 или Del.
Теперь нажмите клавишу F9 , чтобы получить подсказку Загрузить конфигурацию по умолчанию сейчас для BIOS.
Щелкните Да и следуйте инструкциям на экране, чтобы установить BIOS по умолчанию.
Перезагрузите компьютер и проверьте, нормально ли он загружается.
3] Изменение последовательности загрузки
Изменение последовательности загрузки также может помочь вам избавиться от этой ошибки.
4] Сбросить Windows 10
Вы можете сбросить установленную копию Windows 10. Это устранит все проблемы на вашем компьютере.
Помогли ли вам эти исправления?
[Fixed] Загрузчик операционной системы не имеет подписи. Несовместим с SecureBoot
Обзор : Вы не можете загрузить компьютер из-за сообщения об ошибке «Загрузчик операционной системы не имеет подписи. Несовместимо с SecureBoot.Все загрузочные устройства не прошли проверку безопасной загрузки ”? Я понимаю, что это сообщение об ошибке вас расстраивает, но будьте уверены, что мы устраним его. Эта статья предоставит вам пошаговые инструкции по исправлению этой ошибки.
Итак, начнем с практических сценариев реальных пользователей!
Практический сценарий 1: Подпись загрузчика операционной системы не найдена в базе данных SecureBoot («db»). Все загрузочные устройства не прошли проверку безопасной загрузки
Inspiron 15-3567 показывает «подпись загрузчика операционной системы не найдена в базе данных SecureBoot (« db »).Все загрузочные устройства не прошли проверку безопасной загрузки »после того, как я попытаюсь перезагрузить свой ноутбук, мой единственный вариант — выключить. Когда я его включаю, он снова показывает то же самое. Что мне делать?
Источник: Dell Сообщество
Практический сценарий 2: Inspiron 15-3567 Загрузчик операционной системы не имеет подписи
Обновил мой ноутбук Inspiron 15-3567 в воскресенье, и мой ноутбук работал отлично до сегодняшнего утра. Я открыл его, и на экране была ошибка, а также проблема с оборудованием.Затем сказал, что мне нужно сделать проверку или сканирование на ноутбуке, чтобы найти проблему и решить ее. Через 10-30 минут проблема решена, и мне пришлось перезагрузить ноутбук. После перезапуска моего ноутбука экран поддержки все еще существует. На этот раз говорится: «Загрузчик операционной системы не имеет подписи. Несовместимо с SecureBoot. Все загрузочные устройства не прошли проверку безопасной загрузки ». Единственная кнопка на экране — «Завершение работы», я нажимал ее много раз, но экран все еще на месте. Есть ли способ решить эту проблему?
Как и два вышеупомянутых пользователя, многие пользователи Dell сталкиваются с ситуацией отсутствия загрузки.Чтобы это исправить, выполните следующие действия.
Источник: Dell Сообщество
Также читайте: Исправить ошибку: Не найдено загрузочное устройство! И «SupportAssist выполняет сканирование системы для обнаружения любых потенциальных проблем с оборудованием»
Решение 1. Аппаратный сброс
Отключите все внешние устройства, попробуйте отключить все устройства от вашего компьютера. Единственные устройства, которые вы должны оставить подключенными к компьютеру, — это монитор, мышь и клавиатура, если компьютер является настольным компьютером.Теперь выключите рабочий стол и отсоедините кабель питания от рабочего стола.
В случае портативного компьютера отключите зарядное устройство и извлеките аккумулятор, если он есть.
Теперь нажмите и удерживайте кнопку питания примерно 15-20 секунд, затем снова подключите кабель питания к рабочему столу, снова подключите аккумулятор и зарядное устройство в случае ноутбука и запустите систему. В большинстве случаев проблема решается с помощью аппаратного сброса. Если проблема не устранена, перейдите к следующему шагу.
Вам также может понравиться:
Решение 2. Запустите аппаратный тест для определения любого аппаратного сбоя
Чтобы запустить тест оборудования, запустите компьютер и сразу же продолжайте нажимать клавишу F12 на клавиатуре.Вы попадете в меню загрузки, используйте клавишу со стрелкой вниз на клавиатуре, чтобы выбрать Diagnostic , а затем нажмите Enter на клавиатуре. Убедитесь, что зарядное устройство подключено, если у вас ноутбук Dell. Если вы получили какое-либо сообщение об отказе оборудования, замените его.
Решение 3. Сбросьте BIOS до значения по умолчанию
Включите компьютер и продолжайте нажимать F2 на клавиатуре, чтобы войти в программу настройки системы. В зависимости от типа BIOS экран BIOS будет отличаться, как показано ниже.
Если у вас есть этот экран BIOS, как показано на рисунке выше, нажмите Восстановить настройки или Загрузить значения по умолчанию в зависимости от того, что упомянуто.
Убедитесь, что выбрано BIOS Defaults , или подтвердите загрузку значений по умолчанию и нажмите OK .
Щелкните Выход .
Теперь система перезапустится.
Если ваш BIOS выглядит как на картинке выше, нажмите F9 на клавиатуре, чтобы Загрузить оптимальные значения по умолчанию или Загрузить оптимальные значения по умолчанию , а затем нажмите F10 на клавиатуре для сохранения и выхода.
Теперь система перезапустится. Если система не загружается после сброса BIOS, выполните следующий шаг.
Решение 4. Исправьте запись диспетчера загрузки Windows в последовательности загрузки в BIOS
Мы видели, что это решение работало в 90% случаев примерно . Итак, выполнение этого шага должно решить проблему.
Запустите компьютер и сразу же нажмите F2 на клавиатуре, чтобы войти в BIOS. Как только вы войдете в BIOS
Разверните опцию General , а затем выберите Boot Sequence , как показано ниже
Теперь нажмите Добавить параметр загрузки в разделе Параметр списка загрузки
Появится новое окно, в поле Boot Option Name введите Windows Boot Manager и в поле File Name введите / EFI / BOOT / BOOTX64.EFI , а затем щелкните небольшой прямоугольник с тремя точками перед именем файла , как показано ниже на рисунке. Теперь нажмите OK , все записи исчезнут, не беспокойтесь, нажмите OK , а затем нажмите Exit в правом нижнем углу экрана.
Система будет перезагружена сейчас, это может занять некоторое время, но теперь она должна загрузить Windows. Если проблема не устранена, выполните следующий шаг.
Решение 5. Измените последовательность загрузки
Иногда правильное изменение последовательности загрузки решает проблему.
Запустите систему и сразу же нажмите F2, чтобы перейти в BIOS.
В разделе General выберите Boot Sequence и проверьте опцию Boot List Option , установлен ли он на Legacy или UEFI. Если установлено значение Legacy , установите значение UEFI и нажмите Применить в правом нижнем углу. Иногда UEFI неактивен. В этом случае вы должны убедиться, что в разделе «Расширенные параметры загрузки » должен быть снят флажок «Включить устаревшие ПЗУ » и должна быть включена безопасная загрузка .Вам нужно нажимать Применить после каждого изменения, которое вы делаете в правом нижнем углу экрана. См. Картинку ниже, чтобы лучше понять это.
После внесения необходимых изменений нажмите «Выход» в правом нижнем углу. Система перезагрузится, и она должна загрузить Windows.
Иногда наоборот, проблема решается, например,
Вариант списка загрузки— устаревшая версия
Безопасная загрузка — отключено или выключено и
Загрузить устаревшие дополнительные ПЗУ — проверено
Если проблема не устранена, перейдите к следующему шагу.
Вам также может понравиться:
Решение 6. Сброс Windows 10
Если системные файлы каким-то образом испортились, сброс Windows решит проблему. Если вы видите Advanced Options на экране без загрузки, тогда мы можем сбросить Windows, используя Advanced option . В случае, если Advanced Options отсутствует, мы должны трижды прервать процесс загрузки. Чтобы перейти в среду восстановления Windows, вам необходимо дважды принудительно выключить систему с логотипом Dell и запустить компьютер в третий раз, чтобы перейти в среду восстановления Windows.Вы можете попробовать это несколько раз, чтобы попасть в среду восстановления Windows. Как только вы войдете в среду восстановления Windows
На экране Выберите вариант нажмите Устранение неполадок .
На экране Устранение неполадок выберите Сбросить этот компьютер или Восстановление заводского образа – Восстановление заводского образа Параметр занимает меньше времени, если этот параметр доступен, затем перейдите к восстановлению заводского образа.
На экране Сброс / Восстановление заводского образа выберите Сохранить мои файлы / Удалить все — я бы рекомендовал вам выбрать «удалить все», потому что, если системные файлы повреждены, это может не работать, обратите внимание, что вы потеряет все данные в системе.
Для сброса / восстановления заводского образа потребуется некоторое время. СБРОС займет больше времени. Как только это будет сделано, вам нужно настроить Windows 10 и начать использовать свой компьютер. Если система не переходит к Advanced Options или Windows Recovery Environment, выполните следующий шаг.
Решение 7. Переустановите Windows 10 с помощью USB-накопителя
Часто можно заметить, что система не переходит к расширенным параметрам или среде восстановления Windows, и в этом случае вам необходимо переустановить Windows 10 с помощью USB-накопителя.Чтобы переустановить ОС, вам понадобится еще один рабочий компьютер с доступом в Интернет (для загрузки Windows 10 и создания носителя на флэш-накопителе) и не менее 8 ГБ пустой флэш-памяти USB. Обратите внимание, что переустановка Windows приведет к удалению / удалению всех данных в системе.
Перейдите по этой ссылке, чтобы узнать, как переустановить Windows 10 с помощью USB-накопителя
.