Ubuntu 18.04 на ядре 4.15.0-34-универсальные начальные загрузки к BusyBox

Машина была новой установкой Ubuntu 18.04.1 и использовала LVM и LUKS во время установки. Машина хорошо работала на 4.15.0-33-универсальном ядре.

Ядро, обновленное от 4.15.0-33 до 4.15.0-34-универсального. После обновленного ядра это больше не запрашивает пароль LUKS и загружается прямо к BusyBox v1.27.2

При начальной загрузке от более старого ядра это запрашивает LUKS как нормальный, и машина может загрузиться правильно. Проблема при начальной загрузке от более нового ядра.

Я пытался выполнить fsck от liveCD 18,04. Я разблокировал диск, сначала затем работал

fsck -f /deb/sda3

Однако я только добираюсь

fsck from util-linux 2.31.1

и ничто иное.

Есть ли фиксация, которую я могу выполнить?

3
задан 14 September 2018 в 00:24

1 ответ

Проблема - это /sbin/cryptsetup не находится в initramfs файле /boot/initrd.img-4.15.0-36-generic.

Необходимо добавить CRYPTSETUP=y в /etc/cryptsetup-initramfs/conf-hook. Также необходимо добавить initramfs опция в /etc/crypttab. Затем необходимо работать update-initramfs, который решает эту проблему.

Подробное решение:

  1. В другой машине Ubuntu используйте "Создателя Загрузочного диска" для создания загрузочной Карты памяти Ubuntu 18.04
  2. Включите эту Карту памяти в USB-порту компьютера, который загружается к BusyBox
  3. Когда живой USB Ubuntu готов, подключение к Интернету (WiFi или соединенный проводом)

  4. Откройте терминал

    ubuntu@ubuntu:~$ sudo su
    
  5. Найдите устройство зашифрованного блока.

    root@ubuntu:~# blkid|grep LUKS
    /dev/nvme0n1p3: UUID="4b206e76-1531-48ae-95be-ae0ed7a244c1" TYPE="crypto_LUKS" PARTUUID="21db499d-b87b-41c6-864f-04d1531cb083"
    
  6. Дешифруйте устройство

    root@ubuntu:~# cryptsetup open UUID="4b206e76-1531-48ae-95be-ae0ed7a244c1" nvme0n1p3_crypt
    Enter passphrase for /dev/disk/by-uuid/4b206e76-1531-48ae-95be-ae0ed7a244c1: 
    
  7. Перечислите связанные устройства. control файл, используемый для отправки команды в картопостроитель устройства. nvme0n1p3_crypt дешифрованное устройство. ubuntu--vg-root логический том LVM в LVM ubuntu-vg группа объема.

    root@ubuntu:~# ls /dev/mapper/*
    /dev/mapper/control  /dev/mapper/ubuntu--vg-root  /dev/mapper/nvme0n1p3_crypt
    
  8. Создайте точку монтирования. Это - то, где мы смонтируемся / нашей системы, которая не загрузится.

    root@ubuntu:~# mkdir -p /mnt/ubuntu-root
    
  9. Смонтируйте корневой логический том

    root@ubuntu:~# mount /dev/mapper/ubuntu--vg-root /mnt/ubuntu-root/
    
  10. Смонтируйте псевдо файловые системы

    root@ubuntu:~# mount -o bind /sys /mnt/ubuntu-root/sys
    root@ubuntu:~# mount -o bind /proc /mnt/ubuntu-root/proc
    root@ubuntu:~# mount -o bind /dev /mnt/ubuntu-root/dev
    
  11. Информация DNS копии

    root@ubuntu:~# cp /etc/resolv.conf /mnt/ubuntu-root/etc/
    
  12. Корень изменения

    root@ubuntu:~# chroot /mnt/ubuntu-root/
    
  13. Смонтироваться /boot, который содержит initramfs файл. Этот раздел не шифруется.

    root@ubuntu:/# mount /boot/
    
  14. Установите binwalk (чтобы видеть, что содержание init таранит файловую систему)

    root@ubuntu:~# apt update
    root@ubuntu:~# apt install binwalk
    
  15. Найдите смещение gzipped initramfs содержанием

    root@ubuntu:~# binwalk /boot/initrd.img-4.15.0-36-generic | grep gzip
    1605632       0x188000        gzip compressed data, from Unix, last modified: 2018-10-18 13:00:32
    
  16. Проблема состоит в том, что initramfs файловая система не содержит cryptsetup. Так, именно поэтому нет никакой подсказки пароля LUKS.

    root@ubuntu:/# cd /root/
    root@ubuntu:~# mkdir initramfs-4.15.0-36-generic
    root@ubuntu:~# cd initramfs-4.15.0-36-generic
    root@ubuntu:~/initramfs-4.15.0-36-generic# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 | gunzip | cpio -i
    root@ubuntu:~/initramfs-4.15.0-36-generic# ls sbin/cryptsetup
    ls: cannot access 'sbin/cryptsetup': No such file or directory
    
  17. Для дешифрования корня при начальной загрузке initramfs должен содержать:

    sbin/cryptsetup
    lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
    
  18. Добавьте initramfs опция в /etc/crypttab

    root@ubuntu:/# cat /etc/crypttab 
    nvme0n1p3_crypt UUID=4b206e76-1531-48ae-95be-ae0ed7a244c1 none luks,discard,initramfs
    
  19. Добавить CRYPTSETUP=y в /etc/cryptsetup-initramfs/conf-hook

  20. Выполненный update-initramfs:

    root@ubuntu:~# update-initramfs -k 4.15.0-36-generic -c -v &> update-initramfs-4.15.0-36-generic.cryptsetup.log
    
  21. Теперь, мы имеем cryptsetup в initramfs и модуле ядра Linux dm-crypt.ko также:

    root@ubuntu:~# grep /sbin/cryptsetup update-initramfs-4.15.0-36-generic.cryptsetup.log
    Adding binary /sbin/cryptsetup
    
    root@ubuntu:~# grep dm-crypt.ko update-initramfs-4.15.0-36-generic.cryptsetup.log
    Adding module /lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
    
  22. Теперь, выполненное обновление-initramfs, без (нового)-c и без (подробного)-v:

    root@ubuntu:~# update-initramfs -k 4.15.0-36-generic -u
    
  23. Проверьте, что initramfs на самом деле корректен

    root@ubuntu:~# binwalk /boot/initrd.img-4.15.0-36-generic | grep gzip
    1605632       0x188000        gzip compressed data, from Unix, last modified: 2018-10-18 14:26:29
    
    root@ubuntu:~# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 2> /dev/null | gunzip | cpio -t 2> /dev/null |grep sbin/crypt 
    sbin/cryptsetup
    
    root@ubuntu:~# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 2> /dev/null | gunzip | cpio -t 2> /dev/null |grep dm-crypt.ko
    lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
    
  24. Теперь, перезагрузка.

2
ответ дан 1 December 2019 в 16:51

Другие вопросы по тегам:

Похожие вопросы: