Поиск по сайту:

Как исправить загрузку Linux с ошибкой BIOS


Известно, что обновления GRUB приводят к загрузке компьютеров Linux с настройками BIOS или UEFI. Исправление для этого использует полезный трюк восстановления системы, о котором вы действительно должны знать.

Практический пример: GRUB 2:2.06.r322

Системное обновление для Arch и дистрибутивов Linux на базе Arch летом 2022 года включало новую версию GRUB. GRUB расшифровывается как gr и unified b загрузчик.

Загрузчик — это приложение, которое запускает процесс загрузки при включении компьютера. Необходимо запустить несколько программных инструментов и утилит — из правильного раздела и в правильном порядке — чтобы в конечном итоге получить работающую и доступную операционную систему. GRUB запускает этот каскад событий.

Если на вашем компьютере установлено более одной операционной системы, GRUB предоставляет меню, позволяющее выбрать, какую операционную систему использовать. Одно из изменений кода в GRUB 2:2.06.r322 добавило поддержку новой опции GRUB, --is-supported. Параметр используется, чтобы указать, присутствует ли возможность загрузки встроенного ПО или нет. Если это так, GRUB добавляет запись в меню загрузки, чтобы вы могли загрузить свои настройки EUFI.

На новую опцию ссылается скрипт под названием «30_uefi-firmware.in». Разница для этого файла показывает, что оператор if был удален, а две строки добавлены.

Одна из новых строк была заменой оператора if. Другая новая строка содержит fwsetup --is-supported . «fw» в «fwsetup» означает прошивку. Но поскольку эта строка над новой инструкцией if, она будет выполняться всегда. Если бы он находился внутри оператора if, он выполнялся бы только тогда, когда проверка в операторе if разрешается как истина.

Это вызвало проблемы на многих, но не на всех компьютерах с UEFI. Это зависело от того, поддерживает ли уже установленная версия GRUB эту команду. Затронутые машины будут делать одну из двух вещей. Они либо попадали в цикл загрузки, когда процесс загрузки никогда не завершался, а постоянно перезапускался, либо компьютер загружался прямо в настройки прошивки UEFI. В любом случае, не было никакого способа заставить ваш компьютер загрузиться в Linux.

Когда вы сталкиваетесь с такими ситуациями, всегда есть ядерный вариант полной переустановки. Это сработает, но в зависимости от того, как разбит ваш жесткий диск, без недавней резервной копии вы можете потерять данные.

Метод с низким уровнем воздействия использует chroot и Live USB или Live CD/DVD. Это хороший способ понять и подготовиться к всевозможным системным сбоям, когда вы не можете загрузиться или войти в систему на своем компьютере с Linux.

Техника, которую мы будем использовать

Чтобы использовать этот метод, вам необходимо иметь загрузочный USB-накопитель или CD/DVD с дистрибутивом Linux, который загружается в работающий экземпляр Linux. Обычно они называются Live USB или Live CD/DVD. Все основные дистрибутивы поддерживают эту функцию.

Мы не собираемся ничего устанавливать, поэтому живой носитель не обязательно должен быть тем же дистрибутивом, который вы установили на свой компьютер. Например, вы можете использовать Ubuntu USB для ремонта компьютера EndeavourOS. Если у вас нет доступа к каким-либо живым носителям, вам потребуется использовать другой компьютер, чтобы загрузить образ и записать его на карту памяти USB или на CD/DVD.

При загрузке с живого носителя вы сможете смонтировать существующую файловую систему и получить к ней доступ. Ваша установленная файловая система появится как часть файловой системы Linux, которая была загружена с живого носителя. Замечательно. Если мы сможем получить к нему доступ, у нас есть шанс починить его. Но поднимает вопрос.

Корнем этой гибридной файловой системы является корень файловой системы живого мультимедиа, а не корень вашей установленной файловой системы. Чтобы пути к файлам, настроенные в вашей системе Linux, ссылались на их правильные целевые местоположения — где-то внутри вашей файловой системы, а не где-то относительно корня работающего Linux — нам нужно использовать chroot для установки нового root, который указывает на корень вашей установленной файловой системы. Другими словами, пути, начинающиеся с «/», будут использовать корень вашей файловой системы в качестве начальной точки.

Тестовый компьютер, который мы использовали для этого, использует файловую систему ext4, но вы можете использовать эту технику и в других файловых системах. Вам просто нужно определить, какие разделы или тома вам нужно смонтировать и куда их смонтировать. Принципы те же.

Применение на практике

Мы создали загрузочный USB-накопитель и загрузили с него наш пораженный компьютер. Мы использовали дистрибутив EndeavourOS. Живой носитель EndeavourOS загружается в среду рабочего стола XFCE 4.

Чтобы определить, какие разделы содержат корень вашей файловой системы, а какие являются загрузочными, откройте окно терминала и используйте команду fdisk. Мы используем параметр -l (список разделов). Вам также нужно будет использовать sudo.

sudo fdisk -l

Прокрутите вывод, пока не увидите записи с пометками «Система EFI» и «Файловая система Linux».

На этом компьютере они оба находятся на жестком диске sda. Они находятся в разделах один и два, на что указывают метки разделов /dev/sda1 и /dev/sda2.

На вашем компьютере они могут находиться на разных жестких дисках и разделах. Обратите внимание на разделы, на которых они находятся, нам нужно будет использовать их в следующих командах.

Нам нужно смонтировать файловые системы на этих разделах, подключив их к живой файловой системе. Команда mount сделает это за нас. Помните, что метки ваших разделов, скорее всего, будут другими, поэтому убедитесь, что вы используете метки из результатов вашей команды fdisk.

sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi

Чтобы эффективный корень файловой системы начинался с корня вашей фактической установленной файловой системы, мы будем использовать chroot, чтобы установить корень как точку монтирования «/mnt». Здесь корень вашей установленной файловой системы прививается к работающей файловой системе.

sudo chroot /mnt

Обратите внимание, что командная строка изменится, показывая, что вы вошли в систему как пользователь root и находитесь в корневом каталоге «/» файловой системы вашего компьютера.

Мы можем легко проверить это, перейдя в каталог «/home» и проверив, какие каталоги существуют внутри него.

cd /home
ls

Вы должны увидеть каталог для каждого пользователя, настроенного на вашем компьютере, включая каталог для вашей собственной учетной записи пользователя. На этом компьютере есть один пользователь по имени «dave». Если бы мы использовали cd /home до того, как использовали команду chroot, мы бы вошли в каталог «/home» файловой системы live.

Для ясности: теперь вы получаете доступ к настоящей файловой системе от имени пользователя root , так что будьте осторожны.

Чтобы решить проблему с GRUB 2:2.06.r322, все, что нам нужно было сделать, это запустить команду grub-install.

grub-install

Запускать grub-install вслепую обычно не рекомендуется. В данном случае это то, что требовалось.

Отремонтировать или заменить

Если вы пытаетесь решить другую проблему, вам нужно проверить форумы вашего дистрибутива на наличие подходящего решения для вашей проблемы. Если это широко распространенная жалоба, вы скоро найдете для нее решение.

По крайней мере, теперь, когда вы можете получить доступ к своей файловой системе, вы можете скопировать свои данные на съемный носитель. Если вы решите сделать полную переустановку, вы не потеряете данные.