- Home
- Packages
- Forums
- Wiki
- Bugs
- AUR
- Download

# GRUB2 (Русский)

From ArchWiki

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

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

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

## Предисловие

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

Retrieved from "https://wiki.archlinux.org/index.php?title=GRUB2_(Русский)&oldid=273900"
Categories:

- Процесс Загрузки (Русский)
- Руководства (Русский)

## Navigation menu