Boot from USB3

Da hat man nun einen neuen, schnellen USB3-Stick - und das Linux will davon nicht booten. Erst wenn man den in einen USB2-Port steckt funktioniert's.

Das liegt dann meistens daran, dass die USB3 (XHCI) Treiber in der INITRD fehlen.

Diese muss man zuerst einmal mit in die INITRD einkonfigurieren

You finally have acquired a shiny new USB3 stick - and Linux is mulishly refusing to boot from it - until you start it in a (slower) USB2 port.

This usually is caused by the lack of USB3 (XHCI) drivsers in the Linux' INITRD.

You first have to configure a USB3-enabled XINITRD

 

# /etc/mkinitcpio.conf

[...]
# MODULES
# The following modules are loaded before any boot hooks are run. 
MODULES="ext2 xfs dm_mod xhci-hcd"
[...]

und dann eine INITRD erzeugen mit
mkinitcpio -p linux"

Dieser Aufruf miss auf einem PC mit USB3-Interface stattfinden - sonst optimiert mkintcpio den USB3-Treiber schnell aus der Initrd weg. Damit die dann auch beim Booten mit gezogen werden, müssen die entsprechende Treiber auch in der Kernel-Commandline des Bootloaders mitgestartet werden - hier am Beispiel von Syslinux. Für Grub u.ä. muss das entsprechend analog in die Konfiguration eingetragen werden.

...and the create the INITRD with the command
mkinitcpio -p linux"

You need to call this on a PC with a USB3 interface - otherwise mkinitcpio might remove the "unnecessary" driver when crating the initrd. Just creating the XINITRD unfortunately is not enough - you have to explicitly tell the Linux kernel to load and use those XHCI modules. The following example is for Syslinux - please adapt accordingly for Grub and other bootloaders.

 

# /noot/syslinux/syslinux.cfg

[...]
LABEL arch
    MENU LABEL Arch Linux
    LINUX ../vmlinuz-linux
    APPEND root=/dev/sda2 rw earlymodules=xhci_hcd modules-load=xhci_hcd
    INITRD ../intel-ucode.img,../initramfs-linux.img
[...]