25 мар. 2014 г.

Debian Sid Fails to initramfs when root on lvm2

Сделав в очередной раз на рабочем десктопе с Debian Sid aptitude dist-upgrade, получил выпадение загрузчика в initramfs shell с ошибкой нахождения устройства, на котором находится корневой раздел. Диски на рабочей станции разбиты следующим образом: отдельный /boot раздел, все остальные разделы, включая корневой - внутри lvm-группы Debian.
Таким образом, GRUB отработал успешно, но не смог смонтировать корень и продолжить загрузку основной системы.
Далее выяснилось, что проблема заключается в том, что вышеуказанная lvm-группа не активируется при старте, поэтому ее логические тома для загрузчика и ядра не видны. Если в командной строке шелла написать lvm vgchange -ay Debian, а затем выйти из шелла через Ctrl+D, загрузка системы продолжится и пройдет успешно.
Поиски в этих ваших интернетах навели сразу на два дебиановских бага - первый, посвежее, связан с "недосовместимостью" lvm2 и systemd, второй, постарше, с некорректной работой одного из скриптов initramfs (опять же связанный с lvm2).
Так что если у вас аналогичная проблема, но вы уже используете systemd - скорее всего, поможет обновление пакета lvm2 до версии 2.02.104-1 (на момент написания доступна уже версия  2.02.104-2).
В случае использования sysvinit (или upstart, кто вас знает) обозначенная проблема затрагивает initramfs (см. второй баг) и на момент написания еще не решена. Суть бага - некорректная обработка имен lvm-разделов в случае использования UUID в grub.cfg. Таким образом, временное решение - отключение использования UUID в /etc/default/grub:
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true
После этого grub-mkconfig && update-grub решают проблему с загрузкой ОС.