Difference between revisions of "GRUB (Русский)"

From ArchWiki
Jump to: navigation, search
(wikify some external links, use https for archlinux.org)
m (Использование командной строки)
Line 308: Line 308:
 
  sh:grub>
 
  sh:grub>
  
Если проблема серьёзная, (напримерЮ GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".
+
Если проблема серьёзная, (например GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".
  
 
  grub rescue>
 
  grub rescue>

Revision as of 08:35, 13 January 2013

Summary help replacing me
Covers various aspects of the next generation of the GRand Unified Bootloader (GRUB2).

GRUB2 - это следующее поколение GRand Uniform Bootloader (GRUB). GRUB2 основывается на PUPA, который является исследовательским проектом, изучающим следующее поколение GRUB. GRUB 2 был переписан с нуля, чтобы исключить мусор и внедрить модульность и портативность.

Вкратце, загрузчик - это первая программа, которая загружается при старте компьютера. Она отвечает за загрузку и передачу управления ядру Linux. Ядро, в свою очередь, запускает остальную часть операционной системы.

В данный момент, GRUB де-фа́кто является стандартным загрузчиком LINUX, и в скором времени будет заменён на GRUB2. Когда это случится, "GRUB" станет "GRUB Legacy".

Предисловие

GRUB2 до сих пор разрабатывается, и мы вынужденны сделать предупреждение. Считайте, что вы предупреждены! GRUB2 может не оправдать ожиданий, новшества могут отсутствовать, функциональность может изменится. Если нет особой причины использовать GRUB2, пользователь должен использовать более стабильный GRUB.

Замечание для текущих пользователей GRUB

  • Существуют различия между командами GRUB и GRUB2. Изучите команды GRUB2.
  • GRUB2 теперь модульный и больше не требует "stage 1.5". В результате, загрузчик сам по себе ограничен -- модули загружаются с жёсткого диска по надобности для расширения функциональности.
  • Наименования устройств изменились между GRUB и GRUB2. Разделы нумеруются с 1, приводы с 0. Например, /dev/sda1 будет ссылатся на (hd0,1) в GRUB2.

Установка

GRUB2 может быть установлен через pacman (и заменит grub, если он установлен):

# pacman -S grub2

Также, GRUB2 должен быть установлен в загрузочный сектор диска или раздела, чтобы быть загрузчиком. Это описано в секции #Установка загрузчика.

Установка GRUB2 в процессе установки Arch Linux

  • Пропустите шаг Установка загрузчика и выйдите из установщика.
  • Вы должны настроить сеть:
# aif -p partial-configure-network
  • Полученные настройки нужно скопировать в установленную систему:
# cp /etc/resolv.conf /mnt/etc/resolv.conf
  • Из живого окружения установщика, измените корневую папку на установленную систему:
# mount -o bind /dev /mnt/dev
# chroot /mnt bash
  • Установите пакет GRUB2:
# pacman -S grub2-bios

Установка загрузчика

GRUB2 должен быть установлен из живого окружения или напрямую из консоли установщика Arch.

Для установки GRUB2 нужно выполнить две команды от пользователя root:

# grub-install --boot-directory=/boot --no-floppy --recheck /dev/sda
# cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/
  • Также рекомендуется сгенерировать файл grub.cfg командой:
# grub-mkconfig -o /boot/grub/grub.cfg

где /dev/sda это место установки (в данном случае это MBR первого диска SATA). Если вы используете LVM для вашего /boot, вы можете установить GRUB2 на различные физические диски.

Эта команда читает конфигурационный файл /etc/default/grub, и, в случае вызова с консоли установщика, необходимо предварительно выполнить команду arch-chroot (чтобы не был использован файл /etc/default/grub с установочного образа).

Если при этом происходит ошибка:

grub-probe: error: Cannot get the real path of '/dev/fd0'
Auto-detection of a filesystem module failed.
Please specify the module with the option '--modules' explicitly.

Попробуйте добавить --recheck в аргументы как показано ниже:

# grub-install --recheck /dev/sda

Настройка

Файл настройки находится в /boot/grub/grub.cfg. Не редактируйте этот файл вручную. Для изменения конфигураций используйте файл /etc/default/grub и файлы в каталоге /etc/grub.d/. Если Вы хотите добавить свои пункты в меню граба то настроить их можно в файле /etc/grub.d/40_custom, либо в /boot/grub/custom.cfg. После изменений запускайте команду:

# grub-mkconfig -o /boot/grub/grub.cfg

Она не только создаст файл boot/grub/grub.cfg, но и проверит конфигурации на наличие ошибок.

grub-mkconfig

Скрипт grub-mkconfig может быть использован для генерации файла grub.cfg. Чтобы получить файл grub.cfg, выполните команду:

# grub-mkconfig -o /boot/grub/grub.cfg

Для автоматического обнаружения ОС отличных от Linux установите пакет os-prober.

grub.cfg

Основные файлы grub используют следующие опции:

  • (hdX,Y) - раздел Y на диске X, нумерация разделов начинается с 1,дисков с 0
  • set default=N - это загрузка записи с номером N, которую делает загрузчик после истечения таймера на действие пользователя.
  • set timeout=M - это время M ожидания в секундах для выбора пользователя, до того, как система по умолчанию не будет загружена.
  • menuentry "title" {entry options} - это название загрузочной записи title
  • set root=(hdX,Y) устанавливает загрузочный раздел, где хранится ядро и модули GRUB (boot может быть не отдельным разделом, а просто папкой в корневом разделе (/)

Пример конфигурации:

/boot/grub/grub.cfg
# Config file for GRUB2 - The GNU GRand Unified Bootloader
# /boot/grub/grub.cfg

# DEVICE NAME CONVERSIONS
#
#  Linux           Grub
# -------------------------
#  /dev/fd0        (fd0)
#  /dev/sda        (hd0)
#  /dev/sdb2       (hd1,2)
#  /dev/sda3       (hd0,3)
#

# Timeout for menu
set timeout=5

# Set default boot entry as Entry 0
set default=0

# (0) Arch Linux
menuentry "Arch Linux" {
set root=(hd0,1)
linux /vmlinuz26 root=/dev/sda3 ro
initrd /kernel26.img
}

## (1) Windows
#menuentry "Windows" {
#set root=(hd0,3)
#chainloader +1
#}

Если у вас нет отдельного раздела boot, '/boot' должен присутствовать в указании пути в grub.cfg. Пример:

# (0) Arch Linux
menuentry "Arch Linux" {
set root=(hd0,1)
linux /boot/vmlinuz26 root=/dev/sda1 ro
initrd /boot/kernel26.img
}

Мультизагрузка

Для добавления пунктов в загрузочное меню GRUB необходимо отредактировать файл /etc/grub.d/40_cutsom. Все, что добавлено в этот файл, будет дозаписано в grub.cfg вызовом команды grub-mkconfig. Примеры конфигурации для дополнительных пунктов меню запуска Linux и Windows приведены ниже. Их необходимо дописать в конец файла 40_custom и обновить конфигурацию GRUB2 командой grub-mkconfig -o /boot/grub/grub.cfg.

С GNU/Linux

Если другой дистрибутив Linux на разделе sda2:

# (1) Other GNU/Linux
menuentry "Other Linux" {
set root=(hd0,2)
linux /boot/vmlinuz #(add other options here as required)
initrd /boot/initrd.img #(if the other kernel uses/needs one)
}

С Windows

В данном примере Windows находится на разделе sda3.

# (2) Windows 7
menuentry "Windows 7" {
set root=(hd0,3)
chainloader +1
}

С Windows при помощи EasyBCD и NeoGRUB

До тех пор, пока EasyBCD's NeoGRUB не совместимы с форматом меню GRUB2, установите цепную загрузку через них, заменив содержимое файла C:\NST\menu.lst на строки, подобные следующим:

default 0
timeout 1
title       Chainload into GRUB v2
root        (hd0,7)
kernel      /boot/grub/core.img

Визуальная настройка

В GRUB2 это возможно сделать, меняя вид меню.

Фоновое изображение и растровые шрифты

GRUB2 имеет поддержку фоновых изображений и растровых шрифтов в формате pf2. Шрифты unifont включены в пакет grub2 под именем unicode.pf2, или, как только ascii знаки, под именем ascii.pf2. Поддерживаемые форматы изображений включают tga, png и jpeg, (обеспечивается загрузкой нужных модулей). Максимальное поддерживаемое разрешение зависит от вашего оборудования. Пример настройки, устанавливающий tga файл как фоновое изображение показан ниже:

if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode="1024x768x32"
  insmod gfxterm
  insmod vbe
  terminal_output gfxterm
  if terminal_output gfxterm; then true ; else
     terminal gfxterm
  fi
fi
insmod tga
background_image /boot/grub/archlinux.tga
Note: Если этот пример вам не подходит, попробуйте заменить gfxmode="1024x768x32" на vbemode="0x105".
Note: Чтобы показать все режимы, которые вы можете использовать, введите команду vbeinfo в командной строке grub2 (вы должны загрузить модуль vbe перед этим).
Note: Если у вас Grub установлен на отдельный раздел, /boot/grub/archlinux.tga заменяется на /grub/archlinux.tga.

Цвета меню

Чтобы изменить цвета в GRUB2, вы должны сделать настройку в файле /boot/grub/grub.cfg. Например, цвета по умолчанию для Arch:

set menu_color_normal=light-blue/black
set menu_color_highlight=light-cyan/blue

Доступные цвета для GRUB2 находятся на сайте: http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.

Скрытое меню

Для скрытого меню вставьте эти строки в файл grub.cfg после инициализации картинки, но до menuentries (например: background_image /boot/grub/archlinux.tga).

  set timeout=5
  echo -n "Press ESC to see the menu... "
if sleep --verbose --interruptible 5 ; then
  set timeout=0
fi

Установка разрешения буфера кадров

Чтобы изменить разрешение буфера кадров в grub2, добавьте строку, подобную этой, в раздел linux в grub.cfg:

video=vesafb:mode=1024x768-32 vga=790

В следующей формулировке, режим=<разрешение>-<глубина цвета> vga=<разрешение буфера кадров> используется, где разрешение буфера кадров можно найти по следующей схеме:

+-------------------------------------------------+
     | 640x480    800x600    1024x768   1280x1024
 ----+--------------------------------------------
 256 | 0x301=769  0x303=771  0x305=773   0x307=775
 32K | 0x310=784  0x313=787  0x316=790   0x319=793
 64K | 0x311=785  0x314=788  0x317=791   0x31A=794
 16M | 0x312=786  0x315=789  0x318=792   0x31B=795
+-------------------------------------------------+

Убедитесь, что вы вставили следующую строку где-нибудь, (insmod обычно можно найти на верху файла grub.cfg):

insmod vbe

Другие настойки

LVM

Если вы используете LVM для /boot, добавьте следующую строку после до строк menuentry:

insmod lvm

и обозначьте ваш root в menuentry как:

set root=(lvm_group_name-lvm_logical_boot_partition_name)

Пример:

# (0) Arch Linux
menuentry "Arch Linux" {
insmod lvm
set root=(VolumeGroup-lv_boot)
# you can only set following two lines
linux /vmlinuz26 root=/dev/mapper/VolumeGroup-root ro
initrd /kernel26.img
}

Постоянное наименование устройств

Чтобы просмотреть UUIDs, наберите:

# blkid

Замените линию root следующей:

linux /vmlinuz26 root=/dev/disk/by-uuid/<UUID> ro

Тем не менее, вы ещё должны установить упоминание о Grub2's в раздел root. Чтобы сделать это, используйте команду search. Так мы устанавливаем переменную grub'а "root" через поиск раздела по его UUID'у:

search --fs-uuid <UUID> --set=root

Пример содержимого загрузочной записи, использующей Постоянное наименование устройств будет выглядеть так:

menuentry "Arch Linux" {
    search --fs-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root
    linux /boot/vmlinuz26 root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e ro
    initrd /boot/kernel26.img
}

Использование меток

Есть возможность использовать метки - легко читаемые записи, присоединяемые к файловым системам при помощи опции --label в search. Сначала, пометьте ваши сущестующие разделы:

# tune2fs -L a <LABEL> <PARTITION>

Затем, добавьте содержимое используя метки. Например:

menuentry "Arch Linux, session texte" {
    search --label archroot --set root
    linux /boot/vmlinuz26 root=/dev/disk/by-label/archroot ro
    initrd /boot/kernel26.img
}

Использование командной строки

Так как MBR слишком мал, чтобы хранить все модули GRUB2, здесь располагаются только меню и несколько базовых команд. Основная часть функциональности GRUB2 заложена в модулях в /boot/grub, которые загружаются по надобности. В случае возникновения ошибки GRUB2 может не загрузится. Тогда появится командная строка.

GRUB2 поддерживает много консолей. Если есть проблема чтения меню, но загрузчик может найти диски, вас перебросит в "нормальную" консоль.

sh:grub>

Если проблема серьёзная, (например GRUB не может найти требуемые файлы),вас перебросит в консоль "восстановления".

grub rescue>

Консоль восстановления - это ограниченная версия обычной консоли, с меньшей функциональностью. Если вы переброшены в консоль восстановления, сначала попытаетесь загрузить модуль нормальной консоли, затем запустите её.

grub rescue> set prefix=(hdX,Y)/boot/grub
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod
rescue:grub> normal

Использование консоли восстановления

Сначала прочтите #Использование командной строки. Если невозможно активировать нормальную консоль, возможным решением может стать загрузка с Живого CD (LiveCD), или с других дисков восстановления чтобы исправить настройки и переустановить GRUB. Тем не менее, загрузочные диски не всегда доступны или необходимы.

Доступные команды в этой консоли включают "insmod", "ls", "set", и "unset". В следующем примере используется "set" и "insmod". "set" изменяет переменные, а "insmod" загружает модули для повышения функциональности.

Перед началом, пользователь должен знать местоположение своей папки /boot (будь она отдельным разделом, или подпапкой в корневом разделе):

grub rescue> set prefix=(hdX,Y)/boot/grub

Где Х - это номер физического диска и Y - номер раздела.

Чтобы расширить возможности консоли, загрузите модуль "linux":

grub rescue> insmod (hdX,Y)/boot/grub/linux.mod
Note: Если у вас отдельный boot раздел, исключите /boot из пути, (например, пишите set prefix=(hdX,Y)/grub и insmod (hdX,Y)/grub/linux.mod).

Это описание "linux" и "initrd" команд, которые должны быть вам знакомы (смотри #Настройка).

Например, загрузка Arch Linux:

set root=(hd0,5)
linux /boot/vmlinuz26 root=/dev/sda5
initrd /boot/kernel26.img
boot

С отдельным разделом boot измените пути, как было описано выше. Например:

set root=(hd0,5)
linux /vmlinuz26 root=/dev/sda6
initrd /kernel26.img
boot

После успешной загрузки Arch Linux, пользователь сможет подкорректировать grub.cfg и затем запустить:

# grub-install /dev/sda

для того, чтобы переустановить GRUB2 и полностью устранить проблему. Измените /dev/sda, если требуется. Смотрите #Установка загрузчика для детальной информации.

Примеры исправления проблем

Добавьте сюда сами.

Сообщение об ошибке msdos-style

grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
            However, blocklists are UNRELIABLE and its use is discouraged.
grub-setup: error: If you really want blocklists, use --force.

Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом здесь.

Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.

Grub-install вызывает зависание grub2 / legacy grub

Отключите флоппи дисковод в биосе, даже если у вас его нет. Попробуйте использовать также --no-floppy и удалить fd0 строку из /boot/grub/device.map. Тем не менее, без отключения его в биосе, GRUB2 может всё равно не работать.

Прочее

Я не нашёл, как удалять grub1, и установил grub2 в MBR, но после этого он не стал по умолчанию загружаться. Загружался по умолчанию grub1. Лёгкий способ это исправить, это переименовать menu.lst.pacsave или подобное, в menu.lst (в /boot/grub/) для каждой строки меню, для которой вы хотите использовать grub2. В конце введите "chainloader +1". Это даст команду grub1 вернуть контроль к grub2.

Возможное решение: Допустим, boot раздел (hd0,1), и корневой раздел (hd0,3) (grub2 наименование). grub-setup ищет (hd0,3)/boot/grub/core.img. Он не может его найти просто потому, что он в (hd0,1)/grub/core.img. Я скопировал папку grub в мою корневую дерикторию, и всё заработало отлично:

Например (от root:)

# mount /boot
# cp -a /boot/grub /
# umount /boot
# mv /grub /boot/
# grub-install /dev/sda