Ноутбуки выпуска 2011-2014 годов стоят копейки и отлично подходят под офис, учебу или домашний файловый сервер. Едва ли не каждая вторая такая машина несет на борту одну из первых реализаций UEFI, которая на бумаге современна, а в жизни капризна: не сохраняет загрузочные записи, игнорирует созданные пункты меню и упрямо возвращает пользователя в Windows. Установка Linux на такое железо без подготовки превращается в лотерею. Ниже разобран реальный сценарий работы с подобным ноутбуком: диагностика прошивки, симптомы сломанного EFI, осознанный переход в legacy-mode, разметка диска, настройка GRUB и восстановление загрузки, после которых система начинает грузиться каждый раз одинаково.
Диагностика прошивки до запуска установщика
Первое действие - загрузиться с флешки в режиме UEFI и посмотреть на поведение прошивки из живой системы. Флешку готовят с проверкой образа: после скачивания сравнивают контрольную сумму, затем записывают образ побайтово:
sha256sum linuxmint-21.3-cinnamon-64bit.iso
sudo dd if=linuxmint-21.3-cinnamon-64bit.iso of=/dev/sdX bs=4M status=progress
Подключать носитель стоит к заднему порту USB 2.0: первые UEFI-реализации капризничают с портами 3.0 и зависают на этапе чтения. В живой системе достаточно двух команд:
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
sudo efibootmgr -v
Первая строка показывает режим, в котором прошла загрузка, вторая выводит список записей NVRAM. Если efibootmgr отвечает "EFI variables are not supported on this system" при заведомо UEFI-загрузке, прошивка либо не смонтировала efivarfs, либо ее переменные повреждены. Иногда ситуацию меняет ручное монтирование:
sudo mount -t efivarfs efivarfs /sys/firmware/efi/efivars
Журнал ядра дополняет картину: команда dmesg | grep -i efi выявляет сбои чтения и записи переменных, а именно они чаще всего и ломают установку загрузчика на этапе grub-install. Заодно стоит заглянуть в настройки BIOS. У Lenovo режим называется Legacy Support, у HP - Legacy Support Enable, у ASUS - Launch CSM, у Samsung - OS Mode Selection. Fast Boot разумно выключить сразу: прошивка не успевает инициализировать USB-порты, и флешка просто не появляется в списке загрузки. Отдельная примета старого ноутбука - сбитое системное время из-за севшей батарейки CMOS: прошивка показывает десятилетней давности дату, репозитории отвечают ошибками сертификатов, и установка обрывается на полпути. Время правят в BIOS до запуска установщика, батарейку меняют при первом удобном случае.
Симптомы неисправного EFI на старых ноутбуках
Классическая картина выглядит так. Установка проходит без ошибок, grub-install отрабатывает, efibootmgr создает запись "ubuntu", а после перезагрузки машина снова открывает Windows. Прошивка просто игнорирует все записи, кроме "Windows Boot Manager". Второй вариант: установщик выдает "Failed to set new EFI boot target" или "unable to create EFI boot entry" - это уже сбой записи в NVRAM, обычно из-за ее переполнения. Старые прошивки хранят всего несколько записей и не умеют чистить мусор от прошлых экспериментов. Удаление устаревших пунктов командой вида efibootmgr -b 0003 -B иногда возвращает работоспособность.
Показаниям стоит доверять и по другой причине: прошивки тех лет нередко теряют переменные после сбоя питания. Когда все записи исчезают, efibootmgr выводит пустой список, а прошивка создает записи заново только после сброса настроек BIOS. Если живая система монтирует efivarfs без ошибок, но новые записи не появляются, помогает полная очистка таблицы: команда efibootmgr -b 0000 -B повторяется для каждого пункта по очереди, после чего прошивка соглашается принять свежую запись установщика. Третий симптом - черный экран после выбора пункта GRUB: прошивка передает управление ядру, но не согласует видеорежимы. Лечится параметром nomodeset, о нем ниже. Четвертый вариант встречается на машинах ASUS и Samsung начала 2010-х: прошивка принимает только запись с точным именем "Windows Boot Manager". Можно переименовать shimx64.efi на EFI-разделе в нужное имя, но после каждого обновления GRUB файл возвращается в исходный вид, и фокус приходится повторять. Такое поведение - прямое показание к смене режима загрузки, а не к вечной борьбе с прошивкой.
Когда переход в legacy-mode становится разумным решением
Legacy-mode не признание поражения, а штатный режим прошивки, который проектировался как основной задолго до появления UEFI. На железе 2012 года он надежен и предсказуем. Если на диске уже стоит Windows в legacy-режиме с MBR-разметкой, установка Linux в UEFI не имеет смысла: для двойной загрузки обе системы должны жить в одном режиме, а Windows не умеет грузиться с GPT через BIOS-механизм. Если диск чистый, а efibootmgr упорно сыпет ошибками записи, legacy-mode экономит часы.
Порядок действий в такой ситуации выглядит так:
- Загрузить живую сессию с флешки и выполнить efibootmgr -v, чтобы убедиться в сбоях записи NVRAM;
- Проверить журнал командой dmesg | grep -i efi и удалить мусорные записи через efibootmgr -b 0003 -B;
- Сбросить настройки BIOS к заводским, отключить Fast Boot и повторить попытку установки в UEFI;
- Если ошибки сохранились, включить в BIOS режим Legacy или CSM и перезагрузиться с той же флешкой;
- Разметить диск под MBR или под GPT с BIOS boot разделом и установить систему;
- Поставить загрузчик командой grub-install --target=i386-pc и собрать меню через update-grub.
Минус у legacy-режима ровно один: Secure Boot остается недоступным. На ноутбуках 2012 года это не потеря, потому что ранние реализации Secure Boot появились позже и встречаются редко, а неподписанный загрузчик в таком режиме и не нужен. Обновлению прошивки тоже находится место в плане: fwupd на живой сессии иногда предлагает обновления для подобных машин, а производители выпускали новые версии прошивок именно ради исправления проблем загрузки. Если у производителя есть утилита под Windows, прошивку обновляют до любых экспериментов с разметкой: свежая версия нередко чинит и NVRAM, и порядок загрузки.
Разметка диска под загрузку в legacy-mode
Здесь два рабочих варианта. Первый - классическая MBR-разметка: GRUB встраивает первую стадию в загрузочный сектор и stage1.5 в промежуток после MBR. Промежуток размером 1 МиБ образуется автоматически, если первый раздел начинается с сектора 2048:
sudo parted /dev/sda --script mklabel msdos
sudo parted /dev/sda --script mkpart primary ext4 1MiB 100%
sudo mkfs.ext4 /dev/sda1
Второй вариант - GPT с отдельным BIOS boot разделом размером 1 МиБ типа ef02, куда GRUB кладет свой core.img:
sudo parted /dev/sda --script mklabel gpt
sudo parted /dev/sda --script mkpart BIOSboot 1MiB 2MiB
sudo parted /dev/sda --script mkpart root 2MiB 100%
sudo parted /dev/sda --script set 1 bios_grub on
sudo mkfs.ext4 /dev/sda2
Схему разделов продумывают до форматирования: под /boot хватает 512 МиБ, корню на домашней машине отдают 40-60 ГиБ, остальное уходит в /home, а под своп оставляют объем не меньше установленной памяти, если планируется гибернация. Выравнивание по границе МиБ сберегает и производительность, и место под код загрузчика. После разметки установка загрузчика одинакова для обоих вариантов:
sudo grub-install --target=i386-pc /dev/sda
sudo update-grub
Команда mklabel стирает таблицу разделов целиком, поэтому перед ней делают резервные копии. Перед экспериментами с загрузчиком саму MBR тоже сохраняют в файл командой dd с параметрами bs=512 и count=1: 512 байт возвращают работающую загрузочную запись за секунду, если что-то пойдет не по плану. Если диск уже размечен под GPT с файлами, добавить раздел ef02 на свободное место в начале диска удается редко - проще остаться на MBR или планировать переразметку заранее.
Ловушки GRUB, которые всплывают после установки
Самая частая ошибка звучит как "embedding is not possible. GRUB can only be installed in this setup by using blocklists". Она означает, что на GPT нет раздела ef02, а блочные списки на современной файловой системе ненадежны. Лечение - выделить 1 МиБ в начале диска, создать раздел с флагом bios_grub и выполнить grub-install заново. Вторая ловушка: загрузка падает в приглашение grub rescue после замены диска или переноса /boot. Первая стадия не находит core.img, потому что адреса блоков уехали. Спасает загрузка с флешки, chroot в установленную систему и повторный grub-install.
Третья ловушка связана с os-prober. В свежих выпусках Debian и Ubuntu автоматический поиск других систем отключен, и пункт Windows не появляется в меню. В файл /etc/default/grub добавляется строка GRUB_DISABLE_OS_PROBER=false, затем выполняется update-grub. Четвертая особенность старых прошивок: они грузят MBR строго с первого диска в порядке, заданном в BIOS. Второй диск со своим загрузчиком сбивает машину с толку, поэтому порядок дисков стоит зафиксировать заранее. Параметр GRUB_TIMEOUT=5 оставляет время выбрать запасное ядро, а опция GRUB_DEFAULT=saved с GRUB_SAVEDEFAULT=true после сбоя питания возвращает меню к последнему удачно загруженному ядру. Правки вносят в /etc/default/grub, а не в grub.cfg, который перегенерируется при каждом обновлении.
Восстановление загрузчика после обновлений Windows
При двойной загрузке готовьтесь к повторению сюжета: крупное обновление Windows или ее переустановка затирают MBR своим загрузчиком, и машина стартует прямо в Windows, будто Linux исчез. Система никуда не делась - затерт только первый сектор диска. Восстановление занимает пять минут. Флешку с Linux загружают именно в legacy-режиме, иначе chroot упрется в несоответствие архитектуры загрузчика:
sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install /dev/sda
update-grub
exit
sudo reboot
Те же действия автоматизирует утилита boot-repair из live-сессии Ubuntu: она ставится из репозитория после подключения интернета и сама переустанавливает GRUB в MBR. Ручной способ надежнее хотя бы потому, что вы понимаете каждый шаг. Вторая помеха называется fast startup: Windows не выключается по-настоящему, а уходит в гибридный сон, оставляя разделы NTFS в открытом состоянии, и Linux отказывается монтировать их на запись. Режим отключается в настройках электропитания Windows, после чего общий раздел для обмена файлами перестает вызывать разногласия.
Параметры ядра для графики, яркости и сна
Черный экран во время установки лечится параметром nomodeset: в меню установщика он добавляется по клавише F6, а после установки прописывается навсегда в строку GRUB_CMDLINE_LINUX_DEFAULT файла /etc/default/grub, после чего снова выполняется update-grub. Яркость на старых матрицах часто не регулируется; параметр acpi_backlight=vendor возвращает ползунок. Некоторые машины Samsung и HP 2012 года не стартуют из-за сломанных окон ресурсов PCI: им помогает pci=nocrs. Параметр acpi=off остается крайним средством, потому что вместе с ним перестают работать сон и датчики батареи.
Звук с кодеками Realtek на ноутбуках тех лет иногда играет не на те гнезда; параметр model= у модуля snd_hda_intel возвращает правильную раскладку выходов. Wi-Fi с жестким блокировщиком проверяется через rfkill list и снимается командой rfkill unblock all, а упрямые модули acer_wmi или hp_wmi иногда требуют выгрузки через modprobe -r. Сон в оперативную память тестируется одной командой systemctl suspend, и проверять его стоит еще в живой сессии, до разметки диска: если после пробуждения экран не оживает, журнал dmesg показывает, какой драйвер отказался возвращаться. Связка MBR, GRUB для i386-pc и умеренные параметры ядра живут на старом железе годами: Debian, Ubuntu и Mint до сих пор выпускают сборки с поддержкой BIOS-загрузки, так что обновления система будет получать столько, сколько просуществует сам ноутбук. Отдельный совет напоследок: настройки BIOS до изменений фотографируют. Пара снимков с режимом контроллера диска и порядком загрузки экономит целый вечер, когда после обновления прошивки машина вдруг отказывается видеть диск в прежнем виде.