Після деяких останніх оновлень мій комп'ютер більше не завантажується! Ось що я міг би визначити:
- Це зовсім недавній комп’ютер, який мені надали корпоративні ІТ. Він має недавній процесор Intel (покоління Skylake).
- Комп'ютер працює під управлінням Ubuntu 16.04.
- Останнє завантаження комп'ютера коректно було деякий час у березні. Імовірно, проблема пов’язана з оновленням програмного забезпечення або помилкою апаратного забезпечення.
- У мене є інший комп'ютер під керуванням 16.04 з майже таким же програмним забезпеченням, який я встановив (я використав
apt-clone
), і він працює чудово. Він має інше обладнання (також amd64, але різний процесор, різний графічний процесор тощо). - Ядро дійсно запускається, initrd працює правильно. Коли я завантажуюсь із екраном заставки в графічному режимі, мені з'являється запит на пароль для мого тому dm-crypt, і останнє, що я бачу, це те, що він встановлений успішно.
- Зависання відбувається, перш ніж я отримаю запит на вхід. Коли комп'ютер висить, це важко повісити. Навіть Alt+ SysRqне відповідає. Очевидно, що центральний процесор зафіксований на 100%, оскільки вентилятори вмикаються на повному рівні.
- У мене ще є ядро, яке я працював перед перезавантаженням. Коли я вибираю це ядро в меню Grub, я отримую таку ж блокування. Так виглядає, що це вже наявна помилка ядра, яка викликає щось інше - але що?
- Якщо я вимикаю екран сплеску (видаляю
splash
зlinux
командного рядка в Grub), я бачу, що ряд сервісів починається, то він блокується. Я можу отримати кореневу оболонку, додавши
init=/bin/sh
доlinux
командного рядка в Grub. Я навіть можу пройти далі, додавшиsystemd.unit=basic.target systemd.shell
Це запускає ряд служб і запускає кореневу оболонку на tty9.
- Якщо я запускаю
systemctl start multi-user.target
з цієї кореневої оболонки, комп'ютер блокується. Тож, мабуть, проблема викликана однією з цих служб. - Я побіг
systemctl list-dependencies multi-user.target
подивитися, з яких служб почати роботу. Я вручну запустив перераховані залежності по черзі, і все почалося просто добре.
Таким чином, це виглядає як апаратний помилку (оскільки він виникає на одному комп’ютері, а не на іншому), який викликає деяке програмне забезпечення. Але яке програмне забезпечення? Оскільки комп'ютер замикається так важко, я не можу отримати жодного журналу. Я навіть не можу отримати корисний вихід консолі.
Корисні методи налагодження:
- Alt+ SysRq: магічний ключ SysRq , який дозволяє виконувати такі дії, як екстрене перезавантаження. Це доступ до ядра на дуже низькому рівні, тому він працює у всіх, крім найгірших збоїв. У моєму випадку Alt+ SysRqне відповідає, що показує, наскільки глибоко йде аварія.
- Щоб змінити параметри завантаження, натисніть і потримайте Shiftкілька секунд після включення живлення. Натиснути її потрібно після ініціалізації BIOS клавіатури, але перед завантаженням операційної системи. Через це з'являється меню Grub .
- У меню Grub натисніть, eщоб змінити командний рядок для запису меню. Щоб змінити параметри завантаження Linux, перейдіть до рядка, з якого починається
linux
. На сучасному Ubuntu ви знайдете старі ядра в розділі "Додаткові параметри для Ubuntu". Після внесення потрібних змін у командний рядок натисніть Ctrl+ xдля завантаження. Будь-які зміни, внесені тут, стосуються лише цього завантаження, вони не зберігаються на диску. - Деякі корисні параметри в
linux
командному рядку:quiet nosplash
приховує майже всі повідомлення завантаження. Видаліть їх, щоб отримати повідомлення на консолі під час завантаження, що необхідно, щоб мати будь-який шанс діагностувати проблеми.recovery
надає кореневу оболонку майже без послуг. Вам потрібно буде знати корінний пароль. Для цього використовується запис меню «Режим відновлення».init=/bin/sh
дає вам кореневу оболонку, яка взагалі не має служб. Щоб відновити нормальне завантаження, запустітьexec init
. У цей момент ви можете передавати системні параметри, наприклад,exec init --unit=basic.target
для запуску програми init та декількох служб (зауважте, що це не починає жодного способу входу, тому вам краще, щоб оболонка працювала на іншій консолі). Зауважте, що коренева файлова система монтується лише для читання; запустіть,mount -o remount,rw /
щоб мати можливість писати на нього.systemd.unit=basic.target
запускає дуже базовий набір послуг. Зауважте, що це не включає жодного способу входу! Ви можете зробити це за замовчуванням, запустившиsystemctl set-default basic.target
в кореневій підказці. Щоб відновити початкову ціль за замовчуванням, запустітьsystemctl set-default graphical.target
(абоsystemctl set-default multi-user.target
для сервера без графічного інтерфейсу).systemd.debug-shell
запускає кореневу оболонку на tty9. Ви можете ввімкнути це для кожного завантаження, запустившиsystemctl enable debug-shell
в кореневій запиті. Не забудьте вимкнути це після вирішення проблемиsystemctl disable debug-shell
. Натисніть Alt+, F9щоб перейти на tty9.- Дивіться також Fedora Systemd поради , Arch Linux проблеми завантаження поради .