Добавить в корзинуПозвонить
Найти в Дзене
WeLovePixel 🕹

Оживление моноблока Lenovo и установка на него Astra Linux

Всем привет! Сегодня будет немного непривычная для моего блога тема, а именно конфигурация ядра Linux и поиски причин зависания одного конкретного моноблока. Так уж вышло, что в перерывах между играми и ковыряниями разных эмуляторов я иногда, по роду своей деятельности, занимаюсь ремонтом и обслуживанием разной вычислительной техники. Волею судеб попал мне в руки моноблок Lenovo Ideacentre AIO 300-22ISU (Модель F0BX00GHRK) со следующей проблематикой: Задача: заставить работать на данном моноблоке хоть какой-нибудь свежий дистрибутив Linux, в приоритете это должен быть Astra Linux 1.8.4. Примечание: операционные системы семейства Windows на данном моноблоке работают замечательно, но по тех.заданию должен быть Linux. Обсуждение причин такого решения предлагаю оставить за рамками данного текста. Единственное что было заменено в ходе эксплуатации, это вместо родного HDD Seagate ST1000DM003 на 1 Тб, был установлен SSD ADATA SU650 на 240 Гб - стандартный апгрейд для ускорения работы, к тек
Оглавление

Всем привет!

Сегодня будет немного непривычная для моего блога тема, а именно конфигурация ядра Linux и поиски причин зависания одного конкретного моноблока.

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

Волею судеб попал мне в руки моноблок Lenovo Ideacentre AIO 300-22ISU (Модель F0BX00GHRK) со следующей проблематикой:

  • изначально на моноблок была установлена Ubuntu 22.04, после обновления системы (apt dist-upgrade) система стала зависать на этапе загрузки ядра, сразу после загрузки GRUB;
  • попытки переустановки системы на более новую результата не возымели;
  • установка Astra Linux так же не помогла, зависания остались.

Задача: заставить работать на данном моноблоке хоть какой-нибудь свежий дистрибутив Linux, в приоритете это должен быть Astra Linux 1.8.4.

Lenovo Ideacentre AIO 300-22ISU F0BX00GHRK
Lenovo Ideacentre AIO 300-22ISU F0BX00GHRK

Примечание: операционные системы семейства Windows на данном моноблоке работают замечательно, но по тех.заданию должен быть Linux. Обсуждение причин такого решения предлагаю оставить за рамками данного текста.

Технические характеристики

  • Год выпуска: 2016
  • CPU: Intel Celeron 3855U 1.6 GHz, 2/2 - ядер/потоков;
  • GPU: интегрированная Intel HD Graphics 510;
  • RAM: 4 Gb DDR4;
  • Экран: 21.5", максимальное поддерживаемое разрешение 1920х1080.

Единственное что было заменено в ходе эксплуатации, это вместо родного HDD Seagate ST1000DM003 на 1 Тб, был установлен SSD ADATA SU650 на 240 Гб - стандартный апгрейд для ускорения работы, к текущей проблеме не относящийся.

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

Симптомы

На данном моноблоке много лет крутилась Ubuntu 22.04 и горя не знала. В какой-то момент потребовалось обновить ОС, и после пресловутого apt dist-upgrade компьютер начинает наглухо виснуть на этапе загрузки ядра.

Предварительный диагноз

Несовместимость нового ядра и железа.

Лечение

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

Как я говорил, моноблок 2016 года сборки, с Intel Celeron 3855U и интегрированной Intel HD Graphics 510 на борту.

Так вот. Всё замечательно работало до тех пор, пока использовалось ядро Linux версии 5.10-5.15. Как только ядро обновилось до версии 6.1 и выше всё пошло не по плану. Соответственно, вывод напрашивается сам - что-то пошло не так, когда обновилось ядро.

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

Путём долгого гуглежа и наступаний на некоторое количество глабель удалось выяснить, что с некоторых пор по какой-то причине ядро Linux перестало адекватно работать со встроенными видеочипами Intel, а точнее драйвер i915 который встроен в ядро Linux, почему-то перестал адекватно работать с линейкой видеоадаптеров Intel HD Graphics.

Таким образом, чтобы избавиться от зависаний ядру потребуется указать дополнительные параметры, что бы драйвер i915 был принудительно применён к определенным версиям графического контроллера.

Как поменять параметры ядра Linux

Если у вас система уже установлена (в моем случае на него установлена Astra Linux 1.8.4), загрузка до GRUB доходит, но при дальнейшей загрузке появляются проблемы, то на экране GRUB нужно нажать клавишу "e"

Экран GRUB
Экран GRUB

Найти строку приблизительно следующего содержания (в вашем случае в конце строки могут содержаться какие-то дополнительные параметры)

linux    /boot/vmlinuz-6.1.152-1-generic root=UUID=f923f219-185e-4747-9066-6b09fd0103ae ro  quiet splash

и дописать в конец строки nomodeset.

Вот так данная строка выглядит в моём примере

-3

Нажимаем F10 или Ctrl+X и любуется загрузкой нашей ОС.

Что мы сделали, дописав параметр nomodeset?

Мы полностью отключили аппаратное ускорение и запретили ядру управлять графикой, оставив эту задачу X-серверу.

Изменения которые мы произвели ранее на экране GRUB, это изменения одноразовые. После первой же перезагрузки система их забудет и наш компьютер опять начнёт зависать. Что бы такого не происходило, изменения нужно внести в конфигурационный файл /etc/default/grub.

Но перед этим необходимо чётко определить модель нашего видеочипа. Для этого воспользуемся командой

lspci -k | grep -EA 3 "VGA|3D|Display"

В моем случае результатом выполнения данной команды была следующая запись:

Результат выполнения команды
Результат выполнения команды

Из вывода команды видно, что используется встроенный видеоадаптер Intel HD Graphics 510.

И сейчас начинается самое интересное.

По идее с таким адаптером как у меня, Intel HD Graphics 510, не должно быть абсолютно никаких проблем ни у ядра, ни у драйвера i915. Но почему же происходит зависание на этапе загрузки?

Скорее всего проблема в прошивке BIOS для данной модели моноблока, которую Lenovo не выпускали с мая 2016 года, а именно в параметрах энергосбережения для данного видеоадаптера.

К такому выводу я пришел на основе анализа нескольких сотен строк логов ядра, как с удачными загрузками (с параметром nomodeset) так и с неудачными (без nomodeset). Душнить здесь тонкими техническими деталями я не хочу, просто прошу поверить мне, я перепробовал очень много разных параметров и способов загрузки ядра.

Таким образом, возвращаясь немного назад к теме редактирования конфигурационного файла grub, нам нужно дописать параметр указывающий драйверу i915 точную модель нашего видеоадаптера, либо вовсе отключить аппаратное ускорение.

Открываем файла для редактирования

sudo nano /etc/default/grub

Находим строку начинающуюся со слов GRUB_CMDLINE_LINUX_DEFAULT и дописываем в конец данной строки один из параметров:

  • для UHD Graphics 730:

i915.force_probe=4692 i915.modeset=1

  • для UHD Graphics 750:

i915.force_probe=4c8b i915.modeset=1

  • для UHD Graphics 770:

i915.force_probe=4680 i915.modeset=1

  • для таких же тяжелых случаев как в моем примере:

nomodeset

В итоге у меня получилась вот такая строчка

-5

Если вы прописываете параметр nomodeset напостоянку, учитывайте что у вас будет отключено аппаратное ускорение и разрешение по умолчанию у вас будет 1024х768. Чтобы это исправить, вам нужно здесь же, в конфигурационном файле найти строку GRUB_GFXMODE=1024x768 и исправить разрешение на необходимое вам. Если данной строки в файле нет, то дописать его вручную.

-6

После изменения файла конфигурации необходимо обновить параметры GRUB, выполнив команду

sudo update-grub

Вывод

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

Что имеем в сухом остатке?

  • Моноблок 2016 года с древним Celeron и графикой Intel HD Graphics 510.
  • Современные ядра Linux (6.1 и выше) с ним работают только с костылём в виде nomodeset.
  • Аппаратное ускорение отключено, но для роли «печатной машинки» с браузером и документами этого достаточно.
  • Главное — система стабильна, тех.задание выполнено.

Да, в какие-то современные игры с такой конфигурацией не поиграешь, но тот же RetroArch с ядрами NES, SNES или GameBoy будет работать как ни в чем не бывало. Ну а уж для работы браузера и текстовых документов этого более чем достаточно.

Будет ли это работать вечно? Скорее всего, нет. Рано или поздно какой-нибудь очередной apt upgrade принесёт новое ядро, которое окончательно рассорится с древним железом. Но пока — живём.

Мораль сей истории простая: даже если железо не хочет дружить с новым софтом, всегда есть способ их помирить. Иногда это изящное решение, а иногда — просто nomodeset и твёрдая уверенность, что через пару лет этот моноблок уедет на заслуженный отдых.

Всем стабильных ядер и никаких зависаний!