Can't boot after update - NVMe device with luks partition not found

Hi everyone,

I’m new to EndeavourOS (and Arch to be honest). I did my installation via the GUI. All worked perfectly until today after I upgraded my linux kernel to the latest for arch (the last update I did on my system was 5 days ago). I’m using mkinitcpio to build images. When I rebooted my system, ramdisk couldn’t find my device :

So, I tried several solutions (https://forum.endeavouros.com/t/cant-boot-after-upgrading-endeavouros/41767, https://forum.endeavouros.com/t/system-no-longer-boot-after-update/36270, https://forum.endeavouros.com/t/boot-failing-device-not-found/35743 and https://discovery.endeavouros.com/system-rescue/arch-chroot/2022/12/). Unfortunately, all these methods didn’t work.

My system is (almost) up to date:
image

Here’s my disk partitions :
Before open encrypt partition and mount point :

after :

After a sudo arch-chroot /mnt, here’s my lsblk

NAME                                          TYPE  FSTYPE   SIZE UUID
loop0                                         loop           2.2G 
...
Windows crap and non related data disk
...
nvme0n1                                       disk           3.6T
├─nvme0n1p1                                   part           9.8G 
├─nvme0n1p2                                   part           512M 
└─nvme0n1p3                                   part           3.6T 
  └─luks-b8455122-3e78-4e8d-9aed-b528b43cf73d crypt          3.6T 

My /etc/fstab :

UUID=2bd3cd71-19f0-49ee-be75-366e0efc0ff2 /boot          ext4    noatime    0 2
UUID=8BD5-4635                            /boot/efi      vfat    fmask=0137,dmask=0027 0 2
/dev/mapper/luks-b8455122-3e78-4e8d-9aed-b528b43cf73d /              ext4    noatime    0 1
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0
/dev/disk/by-uuid/68DC0C9BDC0C6622 /mnt/68DC0C9BDC0C6622 auto nosuid,nodev,nofail,x-gvfs-show 0 0
/dev/disk/by-uuid/94D2CE6ED2CE5460 /mnt/94D2CE6ED2CE5460 auto nosuid,nodev,nofail,x-gvfs-show 0 0

And finally, my /boot/grub/grub.conf :

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if loadfont unicode ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_input console
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'EndeavourOS Linux' --class endeavouros --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7bd8c90b-00d2-4a3d-aa7c-0244e798350d' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root 2bd3cd71-19f0-49ee-be75-366e0efc0ff2
        echo    'Loading Linux linux ...'
        linux   /vmlinuz-linux root=UUID=7bd8c90b-00d2-4a3d-aa7c-0244e798350d rw  nowatchdog nvme_load=YES rd.luks.uuid=b8455122-3e78-4e8d-9aed-b528b43cf73d loglevel=3
        echo    'Loading initial ramdisk ...'
        initrd  /intel-ucode.img /initramfs-linux.img
}
submenu 'Advanced options for EndeavourOS Linux' $menuentry_id_option 'gnulinux-advanced-7bd8c90b-00d2-4a3d-aa7c-0244e798350d' {
        menuentry 'EndeavourOS Linux, with Linux linux' --class endeavouros --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-7bd8c90b-00d2-4a3d-aa7c-0244e798350d' {
                load_video
                set gfxpayload=keep
                insmod gzio
                insmod part_gpt
                insmod ext2
                search --no-floppy --fs-uuid --set=root 2bd3cd71-19f0-49ee-be75-366e0efc0ff2
                echo    'Loading Linux linux ...'
                linux   /vmlinuz-linux root=UUID=7bd8c90b-00d2-4a3d-aa7c-0244e798350d rw  nowatchdog nvme_load=YES rd.luks.uuid=b8455122-3e78-4e8d-9aed-b528b43cf73d loglevel=3
                echo    'Loading initial ramdisk ...'
                initrd  /intel-ucode.img /initramfs-linux.img
        }
        menuentry 'EndeavourOS Linux, with Linux linux (fallback initramfs)' --class endeavouros --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-7bd8c90b-00d2-4a3d-aa7c-0244e798350d' {
                load_video
                set gfxpayload=keep
                insmod gzio
                insmod part_gpt
                insmod ext2
                search --no-floppy --fs-uuid --set=root 2bd3cd71-19f0-49ee-be75-366e0efc0ff2
                echo    'Loading Linux linux ...'
                linux   /vmlinuz-linux root=UUID=7bd8c90b-00d2-4a3d-aa7c-0244e798350d rw  nowatchdog nvme_load=YES rd.luks.uuid=b8455122-3e78-4e8d-9aed-b528b43cf73d loglevel=3
                echo    'Loading initial ramdisk ...'
                initrd  /intel-ucode.img /initramfs-linux-fallback.img
        }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/15_ostree ###
### END /etc/grub.d/15_ostree ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/25_bli ###
if [ "$grub_platform" = "efi" ]; then
  insmod bli
fi
### END /etc/grub.d/25_bli ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
if [ "$grub_platform" = "efi" ]; then
        fwsetup --is-supported
        if [ "$?" = 0 ]; then
                menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
                        fwsetup
                }
        fi
fi
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/45_eos_windows ###

menuentry 'Windows Boot Manager (on /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-efi-6673-58D3' {
        insmod part_gpt
        insmod fat
        set root='hd1,gpt1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  6673-58D3
        else
          search --no-floppy --fs-uuid --set=root 6673-58D3
        fi
        chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/45_eos_windows ###

When I do sudo mkinitcpio -P, I get some warnings :

==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
==> Using default configuration file: '/etc/mkinitcpio.conf'
  -> -k /boot/vmlinuz-linux -g /boot/initramfs-linux.img --microcode /boot/intel-ucode.img
==> Starting build: '6.6.9-arch1-1'
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [kms]
  -> Running build hook: [keyboard]
==> WARNING: Possibly missing firmware for module: 'xhci_pci'
  -> Running build hook: [keymap]
  -> Running build hook: [consolefont]
==> WARNING: consolefont: no font found in configuration
  -> Running build hook: [lvm2]
  -> Running build hook: [block]
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: '/boot/initramfs-linux.img'
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
==> Using default configuration file: '/etc/mkinitcpio.conf'
  -> -k /boot/vmlinuz-linux -g /boot/initramfs-linux-fallback.img -S autodetect --microcode /boot/intel-ucode.img
==> Starting build: '6.6.9-arch1-1'
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [modconf]
  -> Running build hook: [kms]
==> WARNING: Possibly missing firmware for module: 'ast'
  -> Running build hook: [keyboard]
==> WARNING: Possibly missing firmware for module: 'xhci_pci'
  -> Running build hook: [keymap]
  -> Running build hook: [consolefont]
==> WARNING: consolefont: no font found in configuration
  -> Running build hook: [lvm2]
  -> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: 'qed'
==> WARNING: Possibly missing firmware for module: 'qla2xxx'
==> WARNING: Possibly missing firmware for module: 'wd719x'
==> WARNING: Possibly missing firmware for module: 'qla1280'
==> WARNING: Possibly missing firmware for module: 'aic94xx'
==> WARNING: Possibly missing firmware for module: 'bfa'
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: '/boot/initramfs-linux-fallback.img'
==> Image generation successful

My /etc/mkinitcpio.conf :

# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run.  Advanced users may wish to specify all system modules
# in this array.  For instance:
#     MODULES=(usbhid xhci_hcd)
MODULES=()

# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image.  This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=()

# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way.  This is useful for config files.
FILES=()

# HOOKS
# This is the most important setting in this file.  The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added.  Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
##   This setup specifies all modules in the MODULES setting above.
##   No RAID, lvm2, or encrypted root is needed.
#    HOOKS=(base)
#
##   This setup will autodetect all modules for your system and should
##   work as a sane default
#    HOOKS=(base udev autodetect modconf block filesystems fsck)
#
##   This setup will generate a 'full' image which supports most systems.
##   No autodetection is done.
#    HOOKS=(base udev modconf block filesystems fsck)
#
##   This setup assembles a mdadm array with an encrypted root file system.
##   Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices.
#    HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck)
#
##   This setup loads an lvm2 volume group.
#    HOOKS=(base udev modconf block lvm2 filesystems fsck)
#
##   NOTE: If you have /usr on a separate partition, you MUST include the
#    usr and fsck hooks.
# HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont numlock block filesystems fsck)
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont lvm2 block filesystems fsck)


# COMPRESSION
# Use this to compress the initramfs image. By default, zstd compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="zstd"
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"

# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=()

# MODULES_DECOMPRESS
# Decompress kernel modules during initramfs creation.
# Enable to speedup boot process, disable to save RAM
# during early userspace. Switch (yes/no).
#MODULES_DECOMPRESS="yes"

Have a nice day and Happy New Year!

You don’t have any of the encryption hooks here. Did you merge pacnew files and overwrite your mkinitcpio.conf?

See here for how to fix that:
https://wiki.archlinux.org/title/Dm-crypt/System_configuration

1 Like

I’m so stupid. The systemd version fixed my issue.
I did not merge pacnew files. It means I must have modified it and I don’t remember it. Anyway.

Thank you !

1 Like

I have exactly the same problem, but I use dracut.
By updating the Zen kernel to version 6.6.9.Zen1-1 or LTS to version 6.1.70-1 the system no longer starts.
I currently managed to start using the Btrfs Snapshot and I updated the system excluding kernels.

That is definitely an unrelated issue. You should open a separate topic if you need help with it.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.