Проблема

После очередного обновления пакетов:

sudo apt-get update && sudo apt-get upgrade

Ubuntu 14.04, корневой раздел которой был на lvm, перестала загружаться и стала выпадать в initramfs shell с сообщением Gave up waiting for root device.
На первый взгляд все просто.
Корневая файловая система работает на томе lvm и почему-то при старте не активируются тома lvm. Однако, кроме того, в консоли initramfs не вводятся символы, не виден мигающий курсор.
Опытным путем установлено, что причина неработоспособности клавиатуры в initramfs shell не в ядре (я пробывал установить и более новые и более старые версии с помощью chroot в LiveCD), не в клавиатуре (она работает в LiveCD).
Временно починить ввод в initramfs shell удалось с помощью добавления к строке запуска ядра параметра console. Для этого в меню grub идем в Advanced Options, выбираем строку с нужным ядром, жмем e и в конце строки linux дописываем:

console tty=1

или

console tty=2

И нажимаем F10.
В результате удалось загрузиться в initramfs shell и там появился курсор, однако вводимве символы были не видны.
Ну да ладно. Чтобы загрузить систему я выполнил:

lvm vgchange -ay

системы сказала что 2 тома Activated. Теперь делаем:

exit

И система грузится. Тепеь надо починить все как было. Я предположил, что дело в поврежденных скриптах initramfs и для тогт чтобы все поправить надо переустановить initramfs-tools, однако в моем случае переустановить его оказалось не так-то просто. Выполнение команды

sudo apt-get install --reinstall 

и последующее пересоздание initrd результата не принесли. Удалить оказалось тоже невозможно, так как от этого пакета зависят многие другие (хз зачем он им). Для того чтобы точно переустановить initramfs-tools я отредактировал файлик /var/lib/dpkg/status. В нем нужно найти и удалить секцию пакета initramfs-tools (в результате apt будет думать, что пакета нет) а потом выполнить:

sudo apt-get -f install

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

update-initramfs -c -k all

и

reboot

Наконец-то система стала загружаться в нормальный initramfs shell, без необходимости указания console=tty1.
Дальнейшее гугление подсказало, что нужно создать или починить скрипт /usr/share/initramfs-tools/scripts/local-top/lvm2, который должен подготовить тома lvm к монтированию.
На моей системе его просто не было, хотя до определенного момента все работало. Я создал этот скрипт и написал туда вот что:

#!/bin/sh
lvm vgchange -ay

После этого собрал initramfs командой:

 sudo update-initramfs -c -k all

И перезагрузился. Система загрузилась нормально. Дальнейшее выяснение привело меня сюда: https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1573982 И там написано, что причина такого глюка в обновлении lvm2.

lvm2 (2.02.133-1ubuntu8) xenial; urgency=medium

  * Drop debian/85-lvm2.rules. This is redundant now, VGs are already
    auto-assembled via lvmetad and 69-lvm-metad.rules. This gets rid of using
    watershed, which causes deadlocks due to blocking udev rule processing.
    (LP: #1560710)
  * debian/rules: Put back initramfs-tools script to ensure that the root and
    resume devices are activated (lvmetad is not yet running in the initrd).
  * debian/rules: Put back activation systemd generator, to assemble LVs in
    case the admin disabled lvmetad.
  * Make debian/initramfs-tools/lvm2/scripts/init-premount/lvm2 executable and
    remove spurious chmod +x Ubuntu delta in debian/rules.

 -- Martin Pitt <email address hidden> Wed, 30 Mar 2016 10:56:49 +0200
Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/ubuntu_wont_boot_initramfs_no_input_no_cursor.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1