Из-за чего могут возникнуть неполадки с загрузчиком GRUB в Linux?

«Из-за чего могут возникнуть неполадки с загрузчиком GRUB в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GRUB (GRand Unified Bootloader) — сложная система, и его поломка приводит к невозможности загрузить ОС. Основные причины сбоев:

1. Конфликт при двойной загрузке: Установка или обновление Windows часто перезаписывает загрузочную запись (MBR) или раздел EFI, удаляя GRUB.

2. Повреждение загрузочного сектора или раздела: Физические ошибки диска, некорректные операции с разделами (например, удаление или изменение размера раздела /boot с помощью fdisk, gparted).

3. Неполное обновление GRUB: После обновления ядра (apt upgrade, yum update) команда update-grub (или grub2-mkconfig) могла не выполниться автоматически или завершиться с ошибкой, из-за чего в меню загрузки отсутствует новая запись.

4. Повреждение конфигурационных файлов: Ручное редактирование /boot/grub/grub.cfg (что не рекомендуется) или /etc/default/grub с синтаксической ошибкой.

5. Изменение идентификаторов дисков (UUID): Если UUID раздела, указанный в /etc/fstab или конфиге GRUB, изменился (после клонирования, восстановления), загрузчик не найдет корневой раздел.

6. Аппаратные изменения: Замена диска, изменение режима работы SATA контроллера в BIOS/UEFI (с AHCI на RAID или наоборот).

Базовое восстановление GRUB с Live-USB:

# Предполагается, что корневой раздел на /dev/sda1, а загрузочный EFI раздел на /dev/sda2
# 1. Смонтировать корневую и загрузочную файловые системы
sudo mount /dev/sda1 /mnt
sudo mount /dev/sda2 /mnt/boot/efi  # Для UEFI систем

# 2. Привязать виртуальные файловые системы и перейти в окружение (chroot)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

# 3. Переустановить GRUB
# Для BIOS (MBR):
grub-install /dev/sda
# Для UEFI:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

# 4. Обновить конфигурацию
update-grub  # или grub2-mkconfig -o /boot/grub/grub.cfg

# 5. Выйти из chroot и перезагрузиться
exit
sudo reboot