You are not logged in.

#1 2025-11-25 17:01:07

D3vil0p3r
Member
Registered: 2022-11-05
Posts: 205

Arch does not boot if installed on an external disk - kernel panic

Me and my friend are using an Arch system with systemd-boot and UKI. The UKI is made of the initramfs built by mkinitcpio and then using `ukify` to build the UKI.

The computer we are using is an Apple MacOS with Intel CPU (x86_64). We tested by vanilla Linux kernel and Linux LTS kernel, but when we reach the bootloader, and we select one of the entries, we get a message like this image
IMG_0292.jpg?ex=6926e44b&is=692592cb&hm=66261e3a3c343627eef161a4412d7665f511e738c51b58d9a8775cf373839548&=&format=webp&width=4096&height=3072


The `/etc/mkinitcpio.conf` content is:

# 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=(usb_storage uas xhci_hcd ahci libahci sd_mod usbhid hid_apple xhci_pci ehci_pci ohci_hcd uhci_hcd)

# 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 microcode modconf block filesystems fsck)
#
##   This setup will generate a 'full' image which supports most systems.
##   No autodetection is done.
#    HOOKS=(base udev microcode 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 microcode modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck)
#
##   This setup loads an lvm2 volume group.
#    HOOKS=(base udev microcode modconf block lvm2 filesystems fsck)
#
##   This will create a systemd based initramfs which loads an encrypted root filesystem.
#    HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole sd-encrypt block filesystems fsck)
#
##   NOTE: If you have /usr on a separate partition, you MUST include the
#    usr and fsck hooks.
HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)

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

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

# MODULES_DECOMPRESS
# Decompress loadable kernel modules and their firmware during initramfs
# creation. Switch (yes/no).
# Enable to allow further decreasing image size when using high compression
# (e.g. xz -9e or zstd --long --ultra -22) at the expense of increased RAM usage
# at early boot.
# Note that any compressed files will be placed in the uncompressed early CPIO
# to avoid double compression.
#MODULES_DECOMPRESS="no"

The `lsblk -f` output is:

NAME   FSTYPE   FSVER            LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0  squashfs 4.0                                                                              
sda                                                                                              
├─sda1 vfat     FAT32            EFI         67E3-17ED                                           
└─sda2 apfs                                  f24db0ef-f094-46a3-ad44-af4e5441a036                
sdb                                                                                              
├─sdb1 vfat     FAT32                        E79E-A77D                                           
└─sdb2 ext4     1.0                          65143aeb-2ce2-48c8-8c73-8e9f0a6e5450     96G    12% /
sdc    iso9660  Joliet Extension    2025-11-25-02-07-22-00                              
├─sdc1 iso9660  Joliet Extension    2025-11-25-02-07-22-00                              
└─sdc2 vfat     FAT32            ARCHISO_EFI 6925-0F5A                                           

and `blkid` is:

/dev/sdb2: UUID="65143aeb-2ce2-48c8-8c73-8e9f0a6e5450" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="ext4" PARTUUID="a50e47f4-fc29-47b2-9381-96f8138936df"
/dev/sdb1: UUID="E79E-A77D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI" PARTUUID="7667711a-f42e-4072-88cf-d530109f8bfa"
/dev/loop0: BLOCK_SIZE="1048576" TYPE="squashfs"
/dev/sdc2: LABEL_FATBOOT="ARCHISO_EFI" LABEL="ARCHISO_EFI" UUID="6925-0F5A" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="Appended2" PARTUUID="35323032-3131-4532-b032-303230373232"
/dev/sdc1: BLOCK_SIZE="2048" UUID="2025-11-25-02-07-22-00"  TYPE="iso9660" PARTLABEL="ISO9660" PARTUUID="35323032-3131-4532-b031-303230373232"
/dev/sda2: UUID="f24db0ef-f094-46a3-ad44-af4e5441a036" BLOCK_SIZE="4096" TYPE="apfs" PARTUUID="224b6cc6-12bd-42df-8c12-4327b1c09a85"
/dev/sda1: LABEL_FATBOOT="EFI" LABEL="EFI" UUID="67E3-17ED" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="9338d4a9-98f1-4078-ab90-386f828727c5"

So the root partition is installed in `/dev/sdb2` and the EFI partition of the external disk is `/dev/sdb1` (the external disk is `/dev/sdb`).

So, looking at the blue screen error above, it tries to boot the correct UUID but it cannot find it... it is like it is not able to detect the `/dev/sdb` external disk AFTER the boot entry selection (because at boot time, it is running the bootloader in `/dev/sdb1`.

If I install it on internal drives, it works correctly. Despite I added the right mkinitcpio modules for usb and rebuilt UKI by `ukify like:

ukify build \
  --linux=/boot/vmlinuz-linux-lts \
  --initrd=/boot/initramfs-linux-lts.img \
  --cmdline=@/etc/kernel/cmdline \
  --os-release=/usr/lib/os-release \
  --output=/efi/EFI/Linux/linux-lts.efi

(for Linux LTS and vanilla Linux), it returns always that blue screen with the same error, so it cannot find how to access to the disk partition `/dev/sdb2`. We also tried to use:

root=UUID=65143aeb-2ce2-48c8-8c73-8e9f0a6e5450 rw rootwait systemd.log_level=debug systemd.log_target=console rd.shell

in `/etc/kernel/cmdline` but no good result.

What are we missing? Is there a specific module or package to install?

Last edited by D3vil0p3r (2025-11-25 17:02:18)

Offline

#2 2025-11-25 17:42:43

Scimmia
Fellow
Registered: 2012-09-01
Posts: 13,582

Re: Arch does not boot if installed on an external disk - kernel panic

Try it without the autodetect mkinitcpio hook.

Offline

#3 2025-12-01 17:22:51

gromit
Administrator
From: Germany
Registered: 2024-02-10
Posts: 1,498
Website

Re: Arch does not boot if installed on an external disk - kernel panic

I can't see the image, could you try linking that again?

Offline

Board footer

Powered by FluxBB