Администрирование виртуального приватного сервера (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
.
-
Смонтируйте корневой раздел (если вы загружены с LiveCD/USB или аварийного образа).
-
Смонтируйте необходимые системные каталоги (чтобы 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 -
Войдите в окружение вашей системы:
sudo chroot /mnt
-
Переустановите GRUB2:
grub-install /dev/sda
-
Обновите конфигурацию:
update-grub
-
Выйдите из chroot и перезагрузитесь:
exit
sudo reboot
4. Практические примеры настройки
Изменение параметров ядра по умолчанию
Допустим, на вашем VPS есть проблема с драйвером сетевой карты, и вы хотите отключить использование аппаратного ускорения (параметр io_accelerated=off
).
-
Откройте файл конфигурации:
sudo nano /etc/default/grubgit config --list
-
Найдите строку
GRUB_CMDLINE_LINUX_DEFAULT
и добавьте параметр:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash io_accelerated=off"
Или, если параметр критически важен для загрузки, добавьте его в
GRUB_CMDLINE_LINUX
, чтобы он применялся даже к пункту меню "recovery mode". -
Сохраните файл и обновите конфигурацию:
sudo update-grub
-
Перезагрузите VPS для применения изменений.
Загрузка в однопользовательском режиме (Recovery Mode)
Этот режим загружает систему с минимальным набором служб и без сетевого доступа, что идеально для сброса пароля или исправления критических конфигов (например, /etc/fstab
).
-
При перезагрузке VPS вам необходимо получить доступ к KVM-консоли (обычно предоставляется панелью управления хостинга).
-
В консоли, как только появится меню GRUB2, нажмите клавишу
E
для редактирования параметров загрузки выбранного пункта. -
Найдите строку, начинающуюся с
linux
илиlinux16
, и в ее конце найдите параметрыro quiet splash
. -
Измените
ro
(read-only) наrw
(read-write) и добавьте параметрinit=/bin/bash
в конец строки.... ro quiet splash $vt_handoff
меняем на:
... rw init=/bin/bash quiet splash $vt_handoff
-
Нажмите
Ctrl+X
илиF10
для загрузки с этими параметрами. Система загрузится прямо в корневую оболочку (bash). Теперь вы можете, например, изменить пароль root командойpasswd
.
Создание собственного пункта меню
Вы можете добавить статичный пункт меню, который не будет изменяться при автоматическом обновлении grub.cfg
.
-
Создайте или отредактируйте файл
/etc/grub.d/40_custom
. -
Добавьте в него запись, например, для резервного ядра:
#!/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
).
-
-
Сделайте скрипт исполняемым и обновите конфигурацию:
sudo chmod +x /etc/grub.d/40_custom
sudo update-grub
5. Восстановление GRUB2 после сбоя
Если ваш VPS не загружается и вы видите ошибку grub rescue>
или unknown filesystem
, это означает, что загрузчик не может найти свои модули или корневой раздел.
Шаги по восстановлению из режима grub rescue>
:
-
Через KVM-консоль вы окажетесь в приглашении
grub rescue>
. -
Определите, где находятся разделы с вашей системой. Вам нужно найти корневой раздел (например,
/dev/sda1
) и, скорее всего, отдельный раздел/boot
(если он есть).ls
# Команда покажет все доступные диски и разделы: (hd0), (hd0,msdos1), (hd0,msdos2)...
-
Поочередно проверяйте разделы, пытаясь найти тот, где находится каталог
/boot
:ls (hd0,msdos1)/
ls (hd0,msdos2)/boot -
Как только вы найдете правильный раздел, задайте его как корневой для GRUB:
set root=(hd0,msdos1)
-
Загрузите необходимые модули (нормальный и модуль для файловой системы, например, ext2):
insmod normal
insmod ext2 -
Запустите обычный режим GRUB:
normal
-
Теперь вы должны увидеть стандартное меню 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
.