Linux VPS: Управление загрузчиком GRUB2

Администрирование виртуального приватного сервера (VPS) под управлением Linux предполагает полный контроль над системой, включая такой критически важный компонент, как загрузчик. GRUB2 (Grand Unified Bootloader version 2) — это стандартный загрузчик для большинства современных дистрибутивов Linux. Он отвечает за самую первую стадию запуска вашего сервера: загрузку ядра операционной системы и передачу ему управления.

Понимание принципов работы GRUB2 необходимо каждому системному администратору. Умение правильно его настроить позволяет решать множество задач: изменять параметры ядра для оптимизации производительности VPS, выбирать нужную версию ядра для отладки, устанавливать загрузчик после сбоев или переноса сервера, а также устранять проблемы, мешающие системе запуститься.

Данная статья предоставляет детальное руководство по управлению GRUB2 на вашем Linux VPS. Мы рассмотрим структуру конфигурационных файлов, ключевые команды для настройки, практические примеры и способы восстановления загрузчика в аварийных ситуациях.

Данная информация предназначена для услуг: VPS хостинг или Облачный хостинг

1. Что такое GRUB2 и зачем он нужен на VPS?

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

На физическом сервере вы часто видите GRUB2 в виде графического меню при запуске компьютера. На VPS, который вы обычно администрируете через SSH, прямого доступа к этому меню нет. Вместо этого вся работа ведется через конфигурационные файлы. Однако в критических ситуациях, когда система не загружается, хостинг-провайдеры часто предоставляют доступ к KVM-консоли или VNC — виртуальному аналогу монитора и клавиатуры, где вы можете взаимодействовать с загрузчиком напрямую.

Ключевые причины, почему важно уметь управлять GRUB2 на VPS:

  • Изменение параметров ядра: Добавление параметров для отключения сбоящего оборудования, настройки сетевых интерфейсов или управления ресурсами.

  • Выбор ядра: Загрузка предыдущей, стабильной версии ядра, если после обновления возникли проблемы.

  • Восстановление системы: Исправление проблем с загрузкой, вызванных повреждением конфигурации, файлов или самого загрузчика.

  • Загрузка в аварийном режиме (single-user mode): Для сброса пароля root или исправления критических ошибок в файловой системе.

2. Структура конфигурационных файлов GRUB2

В отличие от GRUB Legacy, который использовал единый файл /boot/grub/menu.lst или grub.conf, GRUB2 применяет модульную систему конфигурации.

  • /boot/grub/grub.cfg — это основной сгенерированный файл конфигурации. Важное предупреждение: этот файл НЕ следует редактировать вручную! Он автоматически генерируется утилитами при обновлении ядра или выполнении определенных команд. Все ваши настройки должны вноситься в другие файлы.

  • /etc/default/grub — главный файл для общих настроек GRUB2. Здесь задаются параметры, влияющие на все меню загрузки:

    • GRUB_DEFAULT — пункт меню, загружаемый по умолчанию.

    • GRUB_TIMEOUT — время в секундах, в течение которого отображается меню загрузки.

    • GRUB_CMDLINE_LINUX_DEFAULT — параметры ядра, передаваемые по умолчанию (например, quiet splash для скрытия логов загрузки).

    • GRUB_CMDLINE_LINUX — основные параметры ядра, добавляемые ко всем пунктам меню.

  • /etc/grub.d/ — это каталог, содержащий исполняемые скрипты. Эти скрипты отвечают за различные части итогового файла grub.cfg.

    • 00_header — загружает настройки из /etc/default/grub.

    • 10_linux — находит и добавляет в меню ядра Linux, установленные в системе.

    • 30_os-prober — ищет другие операционные системы (Windows, другие дистрибутивы Linux) на дисках. На VPS этот скрипт часто отключен, так как там обычно одна ОС.

    • 40_custom — ваш собственный скрипт для добавления ручных пунктов меню.

3. Основные команды для работы с GRUB2

Обновление конфигурации

После любого изменения в файлах /etc/default/grub или скриптах в /etc/grub.d/ необходимо обновить главный файл конфигурации. Для этого используется команда:

sudo update-grub

Эта команда является скриптом-оберткой для более длинной команды grub-mkconfig -o /boot/grub/grub.cfg (в дистрибутивах на основе Debian/Ubuntu) или grub2-mkconfig -o /boot/grub2/grub.cfg (в RHEL/CentOS).

Вывод команды покажет, какие ядра и конфигурации были обнаружены.

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

Если вы заменили системный диск вашего VPS или загрузчик был поврежден, его необходимо переустановить. Предположим, ваш основной диск в системе определяется как /dev/sda.

  1. Смонтируйте корневой раздел (если вы загружены с LiveCD/USB или аварийного образа).

  2. Смонтируйте необходимые системные каталоги (чтобы GRUB2 имел доступ к своим модулям и конфигам):

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /dev/pts /mnt/dev/pts
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys

  3. Войдите в окружение вашей системы:

    sudo chroot /mnt

  4. Переустановите GRUB2:

    grub-install /dev/sda

  5. Обновите конфигурацию:

    update-grub

  6. Выйдите из chroot и перезагрузитесь:

    exit
    sudo reboot

4. Практические примеры настройки

Изменение параметров ядра по умолчанию

Допустим, на вашем VPS есть проблема с драйвером сетевой карты, и вы хотите отключить использование аппаратного ускорения (параметр io_accelerated=off).

  1. Откройте файл конфигурации:

    sudo nano /etc/default/grubgit config --list

  2. Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте параметр:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash io_accelerated=off"

    Или, если параметр критически важен для загрузки, добавьте его в GRUB_CMDLINE_LINUX, чтобы он применялся даже к пункту меню "recovery mode".

  3. Сохраните файл и обновите конфигурацию:

    sudo update-grub

  4. Перезагрузите VPS для применения изменений.

Загрузка в однопользовательском режиме (Recovery Mode)

Этот режим загружает систему с минимальным набором служб и без сетевого доступа, что идеально для сброса пароля или исправления критических конфигов (например, /etc/fstab).

  1. При перезагрузке VPS вам необходимо получить доступ к KVM-консоли (обычно предоставляется панелью управления хостинга).

  2. В консоли, как только появится меню GRUB2, нажмите клавишу E для редактирования параметров загрузки выбранного пункта.

  3. Найдите строку, начинающуюся с linux или linux16, и в ее конце найдите параметры ro quiet splash.

  4. Измените ro (read-only) на rw (read-write) и добавьте параметр init=/bin/bash в конец строки.

    ... ro quiet splash $vt_handoff

    меняем на:

    ... rw init=/bin/bash quiet splash $vt_handoff

  5. Нажмите Ctrl+X или F10 для загрузки с этими параметрами. Система загрузится прямо в корневую оболочку (bash). Теперь вы можете, например, изменить пароль root командой passwd.

Создание собственного пункта меню

Вы можете добавить статичный пункт меню, который не будет изменяться при автоматическом обновлении grub.cfg.

  1. Создайте или отредактируйте файл /etc/grub.d/40_custom.

  2. Добавьте в него запись, например, для резервного ядра:

    #!/bin/sh
    exec tail -n +3 $0
    menuentry 'My Custom Kernel Backup' {
      set root='hd0,msdos1'
      linux /boot/vmlinuz-backup root=/dev/sda1
     initrd /boot/initrd.img-backup
    }

    • hd0,msdos1 означает первый диск (hd0) и первый раздел (msdos1 для схемы MBR; для GPT будет gpt1).

    • Укажите правильные пути к вашему ядру (vmlinuz-backup) и образу initramfs (initrd.img-backup).

  3. Сделайте скрипт исполняемым и обновите конфигурацию:

    sudo chmod +x /etc/grub.d/40_custom
    sudo update-grub

     

5. Восстановление GRUB2 после сбоя

Если ваш VPS не загружается и вы видите ошибку grub rescue> или unknown filesystem, это означает, что загрузчик не может найти свои модули или корневой раздел.

Шаги по восстановлению из режима grub rescue>:

  1. Через KVM-консоль вы окажетесь в приглашении grub rescue>.

  2. Определите, где находятся разделы с вашей системой. Вам нужно найти корневой раздел (например, /dev/sda1) и, скорее всего, отдельный раздел /boot (если он есть).

    ls

    # Команда покажет все доступные диски и разделы: (hd0), (hd0,msdos1), (hd0,msdos2)...
  3. Поочередно проверяйте разделы, пытаясь найти тот, где находится каталог /boot:

    ls (hd0,msdos1)/
    ls (hd0,msdos2)/boot

  4. Как только вы найдете правильный раздел, задайте его как корневой для GRUB:

    set root=(hd0,msdos1)

  5. Загрузите необходимые модули (нормальный и модуль для файловой системы, например, ext2):

    insmod normal
    insmod ext2

  6. Запустите обычный режим GRUB:

    normal

  7. Теперь вы должны увидеть стандартное меню GRUB. Загрузитесь в свою систему и выполните полную переустановку загрузчика, как описано в разделе 3.

6. Частые проблемы и решения

  • "error: unknown filesystem": GRUB не может распознать файловую систему на разделе. Убедитесь, что загружен правильный модуль ФС (insmod ext4). Проверьте целостность файловой системы с помощью fsck после загрузки.

  • "error: no such partition": Указан неверный раздел. Перепроверьте правильность указания диска и раздела командой ls.

  • После обновления ядра система не загружается: В меню GRUB выберите предыдущую, рабочую версию ядра. После загрузки проверьте логи установки обновления (/var/log/dpkg.log), возможно, образ initramfs не был создан корректно. Попробуйте пересобрать его вручную: sudo update-initramfs -u -k all.

  • Меню GRUB не появляется, сразу идет загрузка системы: Установлено слишком малое значение GRUB_TIMEOUT в файле /etc/default/grub. Измените его на 5 и выполните sudo update-grub.

  • 0 Пользователи нашли это полезным

Помог ли вам данный ответ?

Ищете что-то другое?

mhost.by