LINUX.ORG.RU
ФорумAdmin

После обновления система не видит LUKS

 , ,


0

2

Что я делаю:

Boot usb in live mode

cryptsetup luksOpen /dev/mmcblk2p2 gentoo
Enter passphrase for /dev/mmcblk2p2:

Смотрю что там открылось

lsblk
NAME                    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0                     7:0    0 506.3M  1 loop  /run/rootfsbase
sda                       8:0    1  14.4G  0 disk  
├─sda1                    8:1    1   250K  0 part  
├─sda2                    8:2    1   2.8M  0 part  
├─sda3                    8:3    1 593.1M  0 part  /run/initramfs/live
└─sda4                    8:4    1   300K  0 part  
mmcblk2                 179:0    0  29.1G  0 disk  
├─mmcblk2p1             179:1    0   255M  0 part  
└─mmcblk2p2             179:2    0  28.9G  0 part  
  └─gentoo              253:0    0  28.9G  0 crypt 
    └─vg_system-root_lv 253:1    0  28.9G  0 lvm   
mmcblk2boot0            179:8    0     4M  1 disk  
mmcblk2boot1            179:16   0     4M  1 disk  

Факин щет! Я точно помню, что при разметке диска указывал имя вольюм группе gentoo, а имя логическому разделу root, зуб даю (металлокерамический), но после обновления группа стала vg_system, а диск root_lv.

Что же нам скажет lvdisplay

  --- Logical volume ---
  LV Path                /dev/vg_system/root_lv
  LV Name                root_lv
  VG Name                vg_system
  LV UUID                TjkIQw-bcWN-BWiw-N04Z-Z8qX-szzF-mktDY2
  LV Write Access        read/write
  LV Creation host, time livecd, 2024-09-30 10:56:22 +0000
  LV Status              available
  # open                 0
  LV Size                28.85 GiB
  Current LE             7386
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

Йоптыть, ну конечно! По данным из LV Path и VG Name имена группы томов и имя диска изменились.

Смотрим что с LVM

lvmdiskscan
  /dev/live-base     [    <506.34 MiB] 
  /dev/mapper/gentoo [      28.85 GiB] LVM physical volume
  /dev/mmcblk2p1     [     255.00 MiB] 
  /dev/sda2          [       2.81 MiB] 
  /dev/mmcblk2p2     [      28.87 GiB] 
  /dev/sda3          [     593.14 MiB] 
  /dev/mmcblk2boot0  [       4.00 MiB] 
  /dev/mmcblk2boot1  [       4.00 MiB] 
  1 disk
  6 partitions
  1 LVM physical volume whole disk
  0 LVM physical volumes

Аткивирую lvm тома

vgchange -ay
1 logical volume(s) in volume group "vg_system" now active

Монтирую lvm и бут разделы

mount /dev/mapper/vg_system-root_lv /mnt/gentoo/
mount /dev/mmcblk2p1 /mnt/gentoo/boot/

Смотрим

lsblk /dev/mmcblk2
NAME                    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
mmcblk2                 179:0    0 29.1G  0 disk  
├─mmcblk2p1             179:1    0  255M  0 part  /mnt/gentoo/boot
└─mmcblk2p2             179:2    0 28.9G  0 part  
  └─gentoo              253:0    0 28.9G  0 crypt 
    └─vg_system-root_lv 253:1    0 28.9G  0 lvm   /mnt/gentoo

Отлично! Переходим в каталог куда смонтировались, монтируем ФС и чрутимся

cd /mnt/gentoo
mount --types proc /proc /mnt/gentoo/proc 
mount --rbind /sys /mnt/gentoo/sys 
mount --rbind /dev /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run/
chroot /mnt/gentoo /bin/bash
source /etc/profile

Убеждаюсь что у меня включена поддержка luks и lvm в genkernel.conf

vim /etc/genkernel.conf
# Add LVM support
LVM="yes"

# Add LUKS support
LUKS="yes"

Генерирую initramfs с поддержкой необходимого

genkernel --lvm --luks initramfs
* Gentoo Linux Genkernel; Version 4.3.16
* Using genkernel configuration from '/etc/genkernel.conf' ...
* Running with options: --lvm --luks initramfs

* Working with Linux kernel 6.6.62-gentoo-dist for x86_64
* Using kernel config file '/usr/src/linux-6.6.62-gentoo-dist/.config' ...

* Current kernel's LOCALVERSION is set to '-gentoo-dist'; Will ignore set --kernel-localversion value '-x86_64' because kernel was not built ...

* initramfs: >> Initializing ...
*         >> Appending devices cpio data ...
*         >> Appending base_layout cpio data ...
*         >> Appending util-linux cpio data ...
*         >> Appending eudev cpio data ...
*         >> Appending devicemanager cpio data ...
*         >> Appending auxiliary cpio data ...
*         >> Appending busybox cpio data ...
*         >> Appending luks cpio data ...
*         >> Appending lvm cpio data ...
*         >> Appending modprobed cpio data ...
*         >> Appending modules cpio data ...
*         >> Deduping cpio ...
*         >> Pre-generating initramfs' /etc/ld.so.cache ...
*         >> Compressing cpio data (.xz) ...
* 
* You will find the initramfs in '/boot/initramfs-6.6.62-gentoo-dist.img'.

* WARNING... WARNING... WARNING...
* Additional kernel parameters that *may* be required to boot properly:
* - Add "dolvm" for LVM support
* - Add "crypt_root=<device>" for LUKS-encrypted root
* - Add "crypt_swap=<device>" for LUKS-encrypted swap

* Do NOT report kernel bugs as genkernel bugs unless your bug
* is about the default genkernel configuration...
* 
* Make sure you have the latest ~arch genkernel before reporting bugs.

Обращаем внимание на варнинги, которые говорят включить dolvm и криптованный рут в дополнительные параметры загрузки

Идём в /etc/default/grub и добавляем

GRUB_CMDLINE_LINUX="crypt_root=/dev/mmcblk2p2 root=/dev/mapper/vg_system-root_lv rootfstype=ext4 dolvm quiet"

Проверяем что в граб включены необходимые параметры

cat /etc/portage/package.use/grub 
sys-boot/grub mount device-mapper

Обновляем граб

grub-mkconfig -o /boot/grub/grub.cfg
Генерируется файл настройки grub …
Найден образ linux: /boot/vmlinuz-6.6.62-gentoo-dist
Найден образ initrd: /boot/amd-uc.img /boot/initramfs-6.6.62-gentoo-dist.img
Найден образ linux: /boot/vmlinuz-6.6.58-gentoo-dist
Найден образ initrd: /boot/amd-uc.img /boot/initramfs-6.6.58-gentoo-dist.img
Предупреждение: os-prober не будет запущен для обнаружения других загрузочных разделов.
Их системы не будут добавлены в загрузочные настройки GRUB.
Прочтите документацию на параметр GRUB_DISABLE_OS_PROBER.
Добавляется элемент загрузочного меню для настроек микропрограммы UEFI …
завершено

Смущает размер initramf, который почему-то стал меньше, в сравнении с предыдущим ядром

ls -l boot | grep init
-rwxr-xr-x 1 root root 31886278 ноя  8 13:27 initramfs-6.6.58-gentoo-dist.img
-rwxr-xr-x 1 root root 12276100 дек  8 19:07 initramfs-6.6.62-gentoo-dist.img
-rwxr-xr-x 1 root root 12277464 дек  8 16:42 initramfs-6.6.62-gentoo-dist.img.old

Рестарюсь и загрузка вываливается -> в это <-

Я вангую что initramfs собирается без luks’а.

пАчИму…?!?

★★

Последнее исправление: Shprot (всего исправлений: 1)
  • Current kernel’s LOCALVERSION is set to ‘-gentoo-dist’; Will ignore set –kernel-localversion value ‘-x86_64’ because kernel was not built …

А тут нет расхождения версии ядра и модулей, которые в initramfs? Подобное может быть, если установлен пакет с ядром новой версии, но оно не собрано. Или собрано, но дефолтная ссылка для сборки initramfs указывает на старое ядро. На это косвенно указывает сокращение размера initramfs.

mxfm ★★
()
Ответ на: комментарий от mxfm

Будучи загруженным с лайв и чрутнутым, скомандовал

emerge -av gentoo-kernel-bin

Наличие букафффки R предвещало ПЕРЕустановку, ну я согласился с этим. Опосля обратив внимание на конец выхлопа процедуры

......
Installing kernel image for 6.6.62-gentoo-dist...
Installing initramfs image for 6.6.62-gentoo-dist...
Installing System.map for 6.6.62-gentoo-dist...
Installing config for 6.6.62-gentoo-dist...
......

Делаю вывод, что инитрамфс пересобрался в процессе. Проверяю его размер

ls -l | grep init
-rwxr-xr-x 1 root root 31886278 ноя  8 13:27 initramfs-6.6.58-gentoo-dist.img
-rwxr-xr-x 1 root root 31930718 дек  9 04:31 initramfs-6.6.62-gentoo-dist.img
-rwxr-xr-x 1 root root 12284068 дек  9 04:03 initramfs-6.6.62-gentoo-dist.img.old

Магия…! Предыдущий с размером меньше ушёл в .old, а действующий +/- соответсвует предыдущему. Рестартуюсь и о, чудо! Иксы, fluxbox и т.д. всё на своих местах.

P.S> в магию не верю, поэтому решил потратить время на эксперименты. Командую с рабочей системы

genkernel --lvm --luks initramfs

смотрю размер initramfs, снова в два раза меньше. Перезагружаюсь и всё валится в ошибку ненайденного люкса. Переустанавливаю бинарное ядро - всё снова работает.

В общем проблема решена, но почему решена я так и не понял…

Shprot ★★
() автор топика
Ответ на: комментарий от Shprot

emerge -av gentoo-kernel-bin

genkernel –lvm –luks initramfs

Вывод: genkernel на рабочей системе неправильно определяет версию ядра (поэтому не находит необходимые модули), либо не определяет, что модули нужны (маловероятно, если параметры lvm и luks заданы явно). Я бы копал в сторону отладочного вывода команды genkernel, чтобы понять какую версию ядра и модулей она собирает. Скорее всего emerge вызывает genkernel с какими-то дополнительными аргументами, которых недостаточно при обычном запуске. Ещё можно сравнить содержимое двух initramfs, чтобы понять, чего нет (судя по картинке - похоже нет драйверов диска или lvm).

P.S. В gentoo не так давно что-то изменили с installkernel, dracut и GRUB, что повлияло на автоматический процесс сборки ядра и initramfs. Не похоже, что это причина, так как было уже давно, но автоматическое определение необходимой версии ядра и модулей могло сломаться по другой причине.

Исходя из своего опыта (использую dracut) сделал так - если обновляется ядро, то пересобираю зависимые пакеты (например, nvidia-drivers и virtualbox-modules), далее запускаю скрипт dracut_update 6.xx.yy (обёртка над основной командой dracut с прописыванием всего необходимого + передача параметра версии ядра). Указываю новую версию явно, чтобы избежать таких ситуаций. Плюс этой схемы - никакие изменения процесса сборки initramfs со стороны дистрибутива/installkernel не сломают загрузку.

mxfm ★★
()
Последнее исправление: mxfm (всего исправлений: 1)