Представьте ситуацию: мой игровой ноутбук Maibenben / Mechrevo с гордым Ryzen 7 5800H и RTX 3060 внезапно решил, что фиолетовый — его новый любимый цвет.
При каждой загрузке вместо рабочего стола — фиолетовый экран и вежливое предложение перезагрузиться.
Спасибо, не надо!
Диагноз:
KERNEL PANIC с драматичной подписью
UFS: Unable to mount root fs on unknown-block(0,0)
Даже звучит как из трейлера к фильму «Linux против человечества».
Расследование: кто виноват в этом бардаке
После пары перезагрузок и короткой сессии «гуглопоисковой терапии» я полез в журналы.
journalctl -xb показал интересную картину: ядро 6.14.0-34 хоть и ворчало, но загружалось (пусть и в emergency mode).
А вот его младший брат 6.14.0-35 устраивал полноценную истерику при любой попытке старта.
В чём подвох?
Когда вы ставите драйверы NVIDIA через DKMS, они компилируются под конкретную версию ядра.
Новое ядро пришло, а драйверы пересобраться не успели. В результате — конфликт интересов и kernel panic на ровном месте.
Ликбез: как вообще всё это должно работать
Если объяснить по-человечески, загрузка Linux проходит в несколько этапов:
- GRUB — швейцар, решающий, кого пустить внутрь.
- Ядро — главный администратор, запускает всё подряд.
- initramfs — мини-система, помогающая ядру найти корень файловой системы.
- Драйверы — рабочие, без которых железо просто не оживает.
В моём случае проблема случилась на третьем этапе: драйверы NVIDIA не смогли корректно стартовать, и ядро просто не нашло корневой раздел. Как результат — «фиолетовая кома».
Решение: ломаем, чтобы починить
Шаг 1. Расставание с проблемным ядром
# Безжалостно удаляем предателя
sudo rm -f /boot/*6.14.0-35*
sudo apt purge linux-image-6.14.0-35-generic linux-modules-6.14.0-35-generic
Иногда проще выгнать токсичного сотрудника, чем разбираться в корпоративных интригах.
Шаг 2. Наводим мосты с GRUB
В /etc/default/grub я прописал заклинание, которое должно знать каждый линуксоид:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.modeset=0 nvidia-drm.modeset=1"
GRUB_CMDLINE_LINUX="acpi_rev_override=1"
Расшифровка на человеческом:
nouveau.modeset=0— отключает open-source драйвер, чтобы он не мешал.nvidia-drm.modeset=1— включает нормальные драйверы NVIDIA с аппаратным ускорением.acpi_rev_override=1— фиксит странности управления питанием на гибридных ноутбуках.
Шаг 3. Защита от будущих атак
sudo apt-mark hold linux-image-generic linux-headers-generic
Или, если перевести с линуксового:
«Никаких обновлений ядра без моего личного разрешения!»
Бонусный раунд: война с мониторами
Когда ядра успокоились, на сцену вышел новый персонаж — монитор по USB-C.
Он включался только после переподключения, словно проверяя, действительно ли я этого хочу.
Решение оказалось простым: немного дисциплины через конфиг NVIDIA.
Section "Monitor"
Identifier "HDMI"
Option "Primary" "true"
EndSection
Section "Monitor"
Identifier "USB-C"
Option "Enable" "true"
EndSection
Теперь все мониторы знают своё место и работают с первого раза.
Главное — вовремя напомнить, кто тут главный.
Почему это сработало: техническое послесловие
Проблема была в несовместимости нового ядра и версии драйвера NVIDIA.
Linux 6.14.0-35 изменил API и внутренние структуры, с которыми работал nvidia-drm.
DKMS должен был пересобрать модуль автоматически, но что-то пошло не так —
и система просто не смогла запуститься.
Моё решение сработало потому что:
- Удаление проблемного ядра убрало конфликт.
- Параметры GRUB обеспечили корректную инициализацию драйверов.
- Блокировка обновлений не позволила истории повториться.
Мораль истории
Иногда лучше не чинить то, что не работает, а просто откатиться на стабильную версию.
Linux даёт такую свободу — и это одно из его главных преимуществ.
Теперь ноутбук загружается за 15 секунд, все мониторы слушаются,
а фиолетовый экран остался только на обоях рабочего стола.
Победа?
Скорее перемирие.
Потому что в мире Linux — тишина всегда временная.