Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Внутренняя организация загрузчика GRUB

02 марта 2014

Защита паролем



Гибкость, характерная для GRUB, может не только приносить пользу, но и представлять опасность. Например, пользователь GRUB может воспользоваться командой cat и считать все файлы, сохраненные в разделах с файловыми системами ext2, ext3, reiserls или vfat. Поэтому обычно следует защищать GRUB паролем.

Для этого запустите команду grub и выполните вместе с ней md5crypt. Система потребует от вас ввести пароль. GRUB ответит зашифрованной последовательностью символов:

<code>root# <a class="myClass" href="http://www.modx.cc/linux/grub/">grub</a> grub> md5crypt Password: ******

Encrypted: $1$FWk/60$QfckeBVBoaWNBm274USH00</code>


Теперь с помощью ключевого слова password добавьте эту последовательность символов в файл меню GRUB:

<code># в глобальной области /boot/<a class="myClass" href="http://www.modx.cc/linux/grub/">grub</a>/menu.lst password --md5 $l$FWk/60$QfckeBVBoaWNBm274USH00</code>


Благодаря этому пользователи GRUB могут выбирать и выполнять любые команды меню, но доступ к другим интерактивным возможностям загрузчика для них закрыт. Если пользователи хотят изменить параметры загрузки ядра или выполнять другие команды, им сначала потребуется нажать клавишу Р, а потом указать пароль.

Возможно, вы захотите защитить паролем отдельные записи меню. Для этого введите прямо в строку title команду lock. Теперь такую строку меню можно будет использовать лишь после ввода пароля. Если вы хотите, чтобы GRUB вообще нельзя было использовать, не указав пароль, добавьте lock во все записи меню.

Запуск GRUB с помощью загрузчика Windows



Если вы устанавливаете на жестком диске и Windows, и Linux, то GRUB обычно устанавливается в MBR. Тогда загрузчик запускает либо Windows, либо Linux. Такой метод был описан выше в этой главе.

Если вы работаете с современной версией Windows (не с Windows 9х/МЕ), то можно применить и обратный метод: вы не трогаете MBR и устанавливаете GRUB в загрузочный сектор вашего системного или загрузочного раздела (см. также раздел 14.4). Затем загрузчик Windows конфигурируется так, чтобы он запускал GRUB. Достоинство этого метода заключается в том, что GRUB будет работать и после установки другой версии Windows. Обычно этого не происходит, так как Windows стирает информацию, находящуюся bMBR.

Сначала в Linux запускается команда grub, и с ее помощью загрузчик GRUB устанавливается в загрузочный сектор системного или загрузочного раздела. Для выполнения следующих команд необходимо, чтобы в /boot/grub/* уже находились все важные файлы GRUB, в том числе menu.lst. Чтобы узнать названия устройств системного раздела, используйте команду df.

root# df /


Файловая система 1К-блоки Использовано Доступно Использовано^ Подключено к

<code>/dev/sda3 14417392 4647540 9037488 34£ /

root# <a class="myClass" href="http://www.modx.cc/linux/grub/">grub</a>

grub> root (hd0,2)

grub> setup (hd0,2)

Windows NT, 2000, XP</code>

Дальше процесс будет зависеть от того, с какой версией Windows вы работаете. Если вы используете Windows ХР или более старую версию, скопируйте загрузочный сектор GRUB в файловую систему Windows с помощью указанной ниже команды. Предполагается, что файловая система доступна через каталог /media/ windows.

<code>root# mount /media/floppy

root# dd if=/dev/sdb13 of=/media/windows/grubfile bs=512 count=1
</code>

Затем перезапустите компьютер и загрузите Windows. Измените конфигурационный файл загрузчика Windows так, чтобы можно было запустить загрузчик GRUB, находящийся в grubfile. Для этого просто вставьте в текстовый файл C:\boot.ini следующую строку:

C:\grubfile="<a class="myClass" href="http://www.modx.cc/linux/grub/">GRUB</a>"

Теперь, после перезапуска GRUB, вы увидите, что GRUB будет добавлен в список имеющихся операционных систем отдельной строкой. Если выбрать этот параметр, то загрузчик Windows запустит GRUB. Там вы сможете выбрать нужный дистрибутив Linux.

Windows Vista, 2008 и 7



В Windows Vista и во всех более новых версиях Windows используется иной загрузчик. Он конфигурируется с помощью двоичного файла, для изменения которого из всего арсенала команд подходит только bcdedit, да и при ее использовании придется потрудиться. Чтобы не мучиться с bcdedit, просто установите бесплатную программу EasyBCD с сайта neosmart.net/software.php.

В этой программе, нажав кнопку Добавить/Удалить записи, вы вставляете новую запись в меню загрузки Windows. При этом нужно выбрать в диалоговом окне вкладку Linux, на ней — менеджер загрузки GRUB, а затем прямо указать жесткий диск и номер раздела, в который вы установили GRUB. В отличие от Windows ХР и других версий, не требуется предварительно копировать загрузочный сектор раздела в файловую систему NTFS локального компьютера.

Но будьте внимательны при указании номера жесткого диска и раздела: у жестких дисков нумерация начинается с 0, а у разделов — с 1. Дополнительные разделы, а также неиспользуемые основные разделы в нумерации не учитываются! Например, если ваш диск секционирован так, как показано в следующем примере, укажите для hdbl3 диск 1 и раздел 10:

<code>\dev\hdbl основной раздел, Linux 1 \dev\hdb2 дополнительный раздел \dev\hdb3 (не используется) \dev\hdb4 (не используется) \dev\hdb5 логический раздел подкачки 2 \dev\hdb6 логический раздел, Linux 3

\dev\hdbl3 логический раздел, Linux 10
</code>

Управление несколькими системами, установленными на одном компьютере


Если вы хотите установить на компьютере несколько операционных систем, то лучше всего начать с Windows.

ПРИМЕЧАНИЕ



В принципе можно установить сначала Linux, а потом Windows. Но Windows гораздо «прихотливее» относится к месту для установки. Проблемы сводятся к минимуму, если установить Windows в первый раздел первого жесткого диска. Последующие установки этой системы протекают без проблем, при условии что вы установили загрузчик Windows.

При установке на компьютер первого дистрибутива Linux настройте GRUB так, чтобы с его помощью можно было запускать и Windows, и Linux. Во многих ситуациях это означает, что загрузчик понадобится установить в MBR, но описанный выше вариант с применением загрузчика Windows также вполне уместен.

Самое интересное начнется при установке следующих дистрибутивов Linux. Можно выбрать один из трех вариантов.

Перезаписать GRUB — в таком случае вы заменяете имеющийся экземпляр GRUB новым. Будьте внимательны, иначе программа автоматически выберет именно этот способ.

Установочные программы некоторых дистрибутивов, включая Debian, Ubuntu, SUSE, но исключая Fedora, достаточно хитроумны — они анализируют все разделы жесткого диска. Если они обнаруживают, что на диске уже есть дистрибутив Linux, то автоматически создают новую запись в меню. В идеальном случае, завершив новую установку, вы сможете запустить все операционные системы, установленные на компьютере. О Изменение имеющейся конфигурации GRUB — при установке Linux вы должны прямо отказаться от создания загрузчика. В большинстве установочных программ такая возможность предусмотрена, хотя иногда она бывает не на виду. Разумеется, это означает, что вы не сможете сразу же пользоваться только что установленным дистрибутивом Linux. Вместо этого запустите первую систему Linux, установленную на вашем компьютере, и добавьте в ее конфигурационный файл menu.lst строки, нужные для запуска нового дистрибутива Linux. Для этого важно уже достаточно хорошо разбираться в Linux. О Установка GRUB в системном разделе и последующий опосредованный запуск — в таком случае вы выбираете установку GRUB в загрузочный сектор нового системного раздела. Подобная возможность предусмотрена практически в любой установочной программе. Но вам, вероятно, придется эту возможность немного поискать.

В таком случае вы также не сможете сразу же пользоваться новым экземпляром Linux. Сначала потребуется добавить в конфигурационный файл загрузчика вашего первого дистрибутива Linux несколько строк, чтобы центральный GRUB мог запустить GRUB нового дистрибутива (см. раздел 14.3). Однако внести такое изменение значительно проще, чем при предыдущем варианте установки. Если вы с самого начала планируете установить несколько дистрибутивов Linux сразу, можете заблаговременно подготовить в центральном конфигурационном файле GRUB несколько записей для новых разделов, например по следующему образцу.

Дополнение в /boot/grub/menu.lst title запуск GRUB в загрузочном секторе /dev/sda7 rootnoverify (hd0,6) chainloader +1 title запуск GRUB в загрузочном секторе /dev/sda8 rootnoverify (hd0,7) chainloader +1 title запуск GRUB в загрузочном секторе /dev/sda9 rootnoverify (hd0,8) chainloader +1

Надо отметить, что я всегда пользовался третьим вариантом — а мне не раз и не два доводилось параллельно устанавливать на компьютере несколько дистрибутивов. Основное преимущество третьего варианта перед двумя предыдущими заключается в том, что для каждого дистрибутива предусматривается отдельный конфигурационный файл GRUB. Это особенно важно при обновлениях ядра: почти в любом дистрибутиве при таком обновлении изменяется файл menu.lst. Однако при использовании вариантов 1 и 2 такие изменения обычно никак не влияют на систему, так как есть только один действующий конфигурационный файл GRUB сразу для всех дистрибутивов.

Учтите и следующий момент: в документации GRUB 2 открытым текстом не рекомендуется устанавливать программу в системный раздел и делается указание на то, что установка в MBR (вариант 1) более надежна и, следовательно, предпочтительна. При испытаниях, которые я проводил, возникали проблемы при попытке передать управление от GRUB 1 к GRUB 2, находящихся в системном разделе. Следовательно, если вы устанавливаете на своем компьютере сразу несколько дистрибутивов, одни из которых использует GRUB 1, а другие — GRUB 2, то в MBR должен быть установлен экземпляр GRUB 2.

Пример использования варианта 3. Третий вариант лучше всего продемонстрировать на примере. Допустим, в разделе /dev/sda1 на вашем компьютере находится

Windows ХР.

Теперь вам нужно установить вторую операционную систему — openSUSE. Для этого создается дополнительный раздел /dev/sda2. Системный раздел SUSE оказывается в первом логическом разделе /dev/sda5, а раздел подкачки — в /dev/sda6. GRUB устанавливается в MBR /dev/sda. Соответствующий конфигурационный файл GRUB — /boot/grub/menu.lst — будет выглядеть, как в следующем листинге:

<code>default О timeout 30 title Запуск SUSE kernel (hdO,4)/boot/vrnlinuz root=/dev/sda5 vga=0x317 initrd (hd0,4)/boot/initrd title Запуск Windows rootnoverify (hdO.O) chainloader +l</code>

Теперь требуется установить еще один дистрибутив Linux, предположим, Fedora. Его системный раздел называется /dev/sda7, а раздел подкачки остается без изменений. Установка GRUB производится в загрузочном секторе /dev/sda7.

При следующем перезапуске GRUB автоматически загружает SUSE, то есть тот дистрибутив Linux, который был установлен раньше. Теперь добавим в файл /boot/ grub/menu.lst три строки, позволяющие запустить GRUB системы Fedora. Дополненный конфигурационный файл GRUB /boot/grub/menu.lst (находящийся в файловой системе дистрибутива SUSE) теперь выглядит так:

<code>default 0 timeout 30 title Запуск SUSE root (hd0.4)

kernel /boot/vmlinuz root=/dev/sda5 vga=0x317 initrd /boot/initrd title Запуск GRUB системы <a class="myClass" href="http://www.modx.cc/linux/zapusk-sistemyi-v-fedora/">Fedora</a> (/dev/sda7) rootnoverify (hd0,6) chainloader +l title Запуск Windows rootnoverify (hdO.O) chainloader +l</code>


При следующем перезапуске компьютер предлагает начать работу с Windows, SUSE или Fedora. Если вы выберете Fedora, то запустится GRUB этого дистрибутива, находящийся в /dev/sda7. Он будет интерпретировать собственный конфигурационный файл GRUB, находящийся в файловой системе Fedora.

ПРИМЕЧАНИЕ



При работе с несколькими операционными системами спорным вопросом является обращение с каталогом /home. Казалось бы, логично использовать для всех дистрибутивов общий раздел /home, чтобы личная информация и настройки были в вашем распоряжении независимо от того, в какой операционной системе вы сейчас работаете. Однако на практике в подобном случае часто возникают конфликты и проблемы совместимости, поэтому я советую так не поступать. Компромиссное решение — создать собственный раздел для хранения данных и поместить там избранные каталоги (например, ~/.mozilla), проставив символьные ссылки из соответствующих каталогов /home, чтобы можно было использовать все личные данные вместе.

LVM и RAID



GRUB 0.9.П не в состоянии запускать системы Linux, загрузочные файлы которых находятся в разделах LVM или RAID. В таком случае вам потребуется отдельный раздел /boot, который расположен вне областей LVM или RAID (такое ограничение снимается только в GRUB 2).

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

Файловые системы ext4 и brtfs



GRUB пока несовместим с новыми файловыми системами ext4 и brtfs. Для ext4 уже существует неофициальная заплатка, интегрированная, например, в Ubuntu 9.04. Если она отсутствует (например, в Fedora 11) или в вашем системном разделе используется файловая система brtfs, вам потребуется отдельный загрузочный раздел с файловой системой ext3.

Создание файла Initrd



В файле меню GRUB для каждого дистрибутива Linux всегда указывается два файла: ядро Linux и относящийся к нему файл Initrd. Оба файла обычно находятся в каталоге /boot, но их названия отличаются от дистрибутива к дистрибутиву. В файле Initrd расположены те модули, которые нужны ядру для работы еще до того, как оно сможет обратиться к файловой системе, чтобы при необходимости считать оттуда другие модули. GRUB предоставляет ядру файл Initrd в виде псевдодиска, находящегося в оперативной памяти.

Обычно в файле Initrd имеется модуль ядра с драйвером системы, необходимым для работы системного раздела. Если системный раздел находится на жестком диске SCSI, то в файле Initrd должен находиться драйвер для вашей SCSI-карты. Если вы применяете LVM или RAID, то и в этом случае нужны специальные драйверы.

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

Файл Initrd необязателен. Если в ядре вашей системы содержатся все компоненты, необходимые для процесса загрузки, то систему можно запустить и без файла Initrd. Однако для этого ядро нужно скомпилировать особым образом (почти все модули ядра Linux можно интегрировать прямо в ядро, правда, файл ядра от этого увеличится). Тогда в файле GRUB не нужна строка initrd.

В большинстве новых дистрибутивах файлов Initrd как таковых уже нет. Их роль выполняют файлы initramfs, строение которых описано несколько ниже. Однако, поскольку и в параметрах GRUB/LILO, и в командах для создания файлов используется термин Initrd, а ядро правильно интерпретирует файл, хотя он и назван некорректно, мы и в дальнейшем будем употреблять термин Initrd, пусть это и заведомо неверно.

К сожалению, процесс создания файлов Initrd нисколько не стандартизирован. В каждом дистрибутиве для этого применяются собственные инструменты. В файлах Initrd содержатся не только модули ядра, но и сценарии, предназначенные для инициализации оборудования. Их выполнение длится сравнительно долго, и это мешает разработчикам — слишком тормозится процесс загрузки. По этой причине планируется провести коренную реконструкцию системы Initrd. Первопроходцем в данном отношении стала система Fedora 12 с программой Dracut.

Сценарий update-initframs (Debian, Ubuntu)



В Debian и Ubuntu созданием и администрированием файлов Initrd занимается сценарий update-initramfs. В простейшем случае требуется всего лишь указать параметр -u, чтобы обновить версию файла Initrd до соответствия новейшей версии ядра. Если вы хотите обновить файл Initrd до другой версии ядра, укажите номер версии с помощью параметра -k. Задание -k all позволит обновить файлы Initrd для всех установленных версий ядра.

С помощью параметров -c или -d сценарий update-initramfs создает новый файл Initrd, удаляя имеющийся. В таком случае нужно обязательно указать версию ядра с помощью параметра -k.

<code>root# update-initramfs -c -k 2.6.28-13-generic

update-initramfs: Generating /boot/initrd.img-2.6.28-l3-generic</code>

«За кулисами» происходит следующее: чтобы создавать файлы Initrd, сценарий update-initramfs обращается к сценарию mkinitramfs. Базовая конфигурация осуществляется в файле /etc/initramfs-tools/initramfs.conf, а также в файлах каталога /etc/initramfs-tools/conf.d. Кроме того, к файлу Initrd добавляются все модули, перечисленные в /etc/initramfs-tools/modules (одна строка — один модуль).

Сценарий mkinitramfs в ходе стандартной конфигурации (с использованием MODULES=most в initramfs.conf) создает очень большие файлы Initrd, в которых содержатся бесчисленные дополнительные модули, в том числе все важнейшие файловые системы Linux, различные драйверы USB, SCSI и SATA, а также сетевые драйверы и драйверы NFS.

Если вы обращаетесь напрямую к mkinitramfs (это требуется редко), следует как минимум передать имя нового файла Initrd (параметр -o). Если необходимо создать файл Initrd не для текущей версии ядра, то дополнительно укажите нужную версию:

root# mkinitramfs -o myinitrd 2.6.28-13-generic


Команда mkinitrd (Red Hat, Fedora)



Эта команда создает файл Initrd, содержащий все модули, необходимые для доступа к системному разделу (модули файловых систем, LVM и RAID). Если системный раздел находится на диске SCSI, то mkinitrd берет нужный модуль SCSI из файла /etc/modprobe.conf.

Модули, которые не опознаются программой автоматически, необходимо прямо указать с помощью параметра --with=имя_модуля. При этом для каждого модуля требуется собственный параметр — -with. Если вы хотите, чтобы определенный модуль загрузился раньше SCSI-модулей, используйте вместо — -with параметр --preload=имя_мoдyля.

Кроме этого, в качестве параметров необходимо передать название файла псевдодиска и точную версию ядра. Если вы хотите заменить уже имеющийся файл псевдодиска новым файлом, вам понадобится параметр -f. Еще несколько параметров описано в тексте справки man mkinitrd.

root# mkinitrd /boot/initrd-2.6.29.4-162.fc11.i686.PAE.img \ 2.6.29.4-162.fc11.i686.PAE

В Fedora 12 и выше, а также, предположительно, в RHEE 6 и выше вместо mkinitrd будет применяться новая команда dracut.

Сценарий mkinitrd (SUSE)



В SUSE команда mkinitrd работает несколько иначе, чем в Red Hat. Как правило, этой команде не требуется передавать никаких параметров. Она автоматически создает файлы initrd для всех файлов ядра, которые находит в каталоге /boot. Новые файлы получают названия вида /boot/initrd-nnn, где nnn — версия ядра. Кроме того, mkinitrd создает ссылку, указывающую из /boot/initrd на файл initrd, подходящий к vmlinuz.

Если вы хотите создать только определенный файл initrd, то можете указать версию ядра и файла initrd с помощью параметров -k и -i (по умолчанию — в каталоге /boot). Команда mkinitrd интерпретирует переменную INITRD_MODULES из файла /etc/sysconfig/kernel. В этой переменной указаны все модули, необходимые для загрузки, и она может выглядеть, например, так:

# в /etc/sysconfig/kernel

INITRD_MODULES="processor thermal ata_piix ata_generic piix ide_pci_generic fan jbd ext3 edd"

Дополнительные модули указываются с помощью параметра -m. Более подробную информацию о mkinitrd выдает параметр -h, а также справка man mkinitrd и исходный текст сценария (файл /sbin/mkinitrd).

Просмотр файла initrd



Файлы initrd для версии ядра 2.6.П внутри системы представлены как файлы initramfs. Initrd — это сжатый архивный файл (с расширением CPIO), в состав которого входят различные файлы и каталоги. Если вы хотите просмотреть содержимое архива, действуйте так:

<code>root# cd /boot

root# cp initrd-n.n initrd-test.gz root# gunzip initrd-test root# mkdir test

root# cd test

root# cpio -i < ../initrd-test root# ls -lR</code>


Обновления ядра



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

Проблем не избежать, если файл меню GRUB будет находиться не в /boot/grub, а в совершенно другом разделе (так как у вас на компьютере несколько дистрибутивов Linux и всего один активный файл меню GRUB). В таком случае вам придется самостоятельно вносить изменения в файл меню GRUB после каждого обновления. Такая же ситуация возникает, если вы обновляете ядро сами.
Читайте так же:
GRUB — экстренные меры

Подпишитесь на рассылку! Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать