Greetings.
I need your help with the following situation:

I want to install Debian 13 on an external SSD USB 3.0 and I want to boot from 
that drive which is connected to an external USB 3.0 adapter that is not 
recognized by the BIOS: the motherboard ASUS P5K (LGA775 Socket), which is old, 
supports fine USB 2.0 boot.
And because it seems that there is no a solution to that problem (booting 
directly from external USB 3.0 adapter), I want to know if I could boot from 
USB 2.0 with GRUB or a GNU/Linux distribution (Debian 13) installed on it as an 
intermediary step and then select a USB 3.0 disk which would be connected to 
USB 3.0 external card to boot from it.

So, I searched for info and also I asked Proton Lumo (AI).
Could you validate the following info and then respond to me?

Thanks in advance.

Question to Proton Lumo:
"I have a motherboard ASUS P5K (LGA775 Socket) and an installed external USB 
3.0 card adapter: Via VL800 USB 3.0 Hub 4 Port Card Adapter to PCI-e x1:
https://www.via-labs.com/product_show.php?id=51

Booting from the USB 2.0 interface which this motheboard has is fine. But even 
though the external USB 3.0 card works fine on Windows 7 with related drivers 
installed, my external hard drives and SSDs are not shown in the BIOS when they 
are connected via the USB 3.0 external card.

1) Do you know how to boot from the USB 3.0 external card and how to make my 
external drives to be shown in the BIOS?
2) Also, could I boot from USB 2.0 with GRUB or a GNU/Linux distribution 
(Debian 13) installed on it as an intermediary step and then select a USB 3.0 
disk which would be connected to USB 3.0 external card to boot from? And if 
yes, how?
"

The answer:
"Great questions — this is a classic problem with older BIOS motherboards and 
add-on USB controllers. Let me break down both the root cause and your options.

1) Why USB 3.0 drives don't appear in BIOS — and can you fix it?

Root cause: The ASUS P5K is a legacy BIOS motherboard (circa 2007). Its BIOS 
firmware contains USB drivers only for its onboard USB 1.1/2.0 controllers 
(EHCI/UHCI). The VIA VL800 PCIe card is a third-party USB 3.0 (xHCI) controller 
that the BIOS knows nothing about. For BIOS to enumerate USB devices behind an 
add-on card, the card would need its own Option ROM — a small firmware blob 
that runs during POST and registers the card's devices with the BIOS boot 
table. The VIA VL800 cards sold for consumers generally do not include an 
Option ROM, which is why neither drives nor boot entries show up.

Can you fix it?

- BIOS update: ASUS stopped updating the P5K BIOS years ago, and no version 
added xHCI support. A dead end.
- Option ROM injection: Theoretically, you could extract a VIA VL800 Option ROM 
and inject it into the P5K BIOS using tools like CBROM or MMTool, then flash 
the modified BIOS. In practice, this is extremely fragile, risky (you could 
brick the board), and I'm not aware of a readily available VL800 Option ROM for 
this purpose. Not recommended.
- Card with native Option ROM: Some rare USB 3.0 PCIe cards shipped with an 
Option ROM (e.g., certain ASMedia-based cards). If you could find one, it might 
work. But this is hit-or-miss and increasingly hard to source for such an old 
platform.

Bottom line: On the P5K, you almost certainly cannot boot directly from the VIA 
VL800 USB 3.0 card through BIOS. The hardware limitation is fundamental.

2) Can you use USB 2.0 → Linux → boot from USB 3.0 drive?

Yes, absolutely. This is a well-known technique, and there are two practical 
approaches:

Approach A: Root filesystem on USB 3.0, kernel + initramfs on USB 2.0 
(Recommended)

This is the cleanest method. The idea is:
1. USB 2.0 stick holds: GRUB, the Linux kernel, and the initramfs.
2. USB 3.0 drive holds: the actual root filesystem (your full Debian 13 
installation).
3. During boot, GRUB loads the kernel and initramfs from USB 2.0 (which BIOS 
can see).
4. The initramfs contains the xHCI drivers (xhci_hcd, xhci_pci) and a script 
that:
  - Loads the xHCI module → the VIA VL800 controller is initialized.
  - Waits a few seconds for the USB 3.0 drive to be detected (USB 3.0 devices 
take a moment to enumerate after xHCI init).
  - Finds the USB 3.0 drive by UUID/label.
  - Mounts it as the root filesystem.
  - Calls pivot_root / switch_root to hand control to the real OS.

The OS then runs entirely from USB 3.0 at full speed. The USB 2.0 stick is only 
used briefly during early boot.

How to set this up with Debian 13:

# On your working Debian system, create an initramfs that includes xHCI drivers:
sudo nano /etc/initramfs-tools/initramfs.conf

# Ensure MODULES=most (or MODULES=dep if you list modules manually)

# Explicitly add xHCI modules:
echo "xhci_hcd" | sudo tee -a /etc/initramfs-tools/modules
echo "xhci_pci" | sudo tee -a /etc/initramfs-tools/modules
echo "uas"      | sudo tee -a /etc/initramfs-tools/modules  # USB Attached SCSI 
for better performance

# Add a udev rule or custom initramfs script to wait for the USB 3.0 drive:
sudo nano /etc/initramfs-tools/scripts/local-premount/wait-usb3

Example script content:

#!/bin/sh
PREREQ=""
prereqs() { echo "$PREREQ"; }
case "$1" in prereqs) prereqs; exit 0;; esac

# Wait up to 10 seconds for USB 3.0 devices to settle
for i in $(seq 1 10); do
    if [ -b /dev/disk/by-uuid/YOUR-USB3-DRIVE-UUID ]; then
        break
    fi
    sleep 1
done

sudo chmod +x /etc/initramfs-tools/scripts/local-premount/wait-usb3
sudo update-initramfs -u

Then on the USB 2.0 stick:

# Format it, install GRUB:
sudo mount /dev/sdX1 /mnt/usb2
sudo grub-install --boot-directory=/mnt/usb2/boot /dev/sdX

# Copy kernel and initramfs:
sudo cp /boot/vmlinuz-* /mnt/usb2/boot/
sudo cp /boot/initrd.img-* /mnt/usb2/boot/

# GRUB config:
sudo nano /mnt/usb2/boot/grub/grub.cfg

set timeout=5
menuentry "Debian 13 (from USB 3.0)" {
    linux /boot/vmlinuz-6.x.x-amd64 root=UUID=YOUR-USB3-DRIVE-UUID rw 
rootdelay=10
    initrd /boot/initrd.img-6.x.x-amd64
}

Install Debian 13 normally onto the USB 3.0 drive (you can do this from a live 
USB session where the OS already sees the USB 3.0 card). Just make sure 
`root=UUID=...` matches the USB 3.0 drive's root partition.

Approach B: kexec (boot minimal Linux, then jump to USB 3.0 kernel)

This is more flexible but involves two full boot cycles:

1. Install a minimal Debian on the USB 2.0 stick (just enough to boot, with 
kexec-tools installed).
2. The minimal system boots via BIOS/GRUB from USB 2.0.
3. Linux initializes the VIA VL800 via xHCI drivers — the USB 3.0 drive is now 
visible.
4. A startup script finds the kernel on the USB 3.0 drive and calls kexec:

#!/bin/bash
# Wait for USB 3.0 drive
for i in $(seq 1 15); do
    [ -b /dev/disk/by-uuid/YOUR-USB3-UUID ] && break
    sleep 1
done

USB3_ROOT=$(readlink -f /dev/disk/by-uuid/YOUR-USB3-UUID)
USB3_PART=${USB3_ROOT##*/}

# Mount the USB 3.0 drive
mkdir -p /mnt/usb3
mount /dev/$USB3_PART /mnt/usb3

# Load kernel from USB 3.0 drive into memory
kexec --load /mnt/usb3/boot/vmlinuz-6.x.x-amd64 \
    --initrd=/mnt/usb3/boot/initrd.img-6.x.x-amd64 \
    --command-line="root=UUID=YOUR-USB3-ROOT-UUID ro rootdelay=10"

# Execute it
kexec --execute

5. kexec jumps directly to the new kernel without going through BIOS again — 
the USB 3.0 controller stays initialized since the hardware state persists 
across kexec.

Which approach to choose?

                     Approach A (initramfs)     | Approach B (kexec)
Complexity      | Moderate                         | Moderate-High
Boot speed      | Faster (one boot)             | Slower (two boot stages)
Reliability    | High                                 | High
Flexibility     | Fixed at build time          | Scriptable, can add logic

I'd recommend Approach A — it's simpler, faster, and the standard Debian 
initramfs system handles it naturally. The key things to get right are:
1. Including xHCI + UAS modules in the initramfs.
2. Adding a rootdelay or custom wait script so the USB 3.0 device has time to 
enumerate before the root mount attempt.
3. Using UUIDs (not /dev/sdX names) since device ordering can vary.

One thing to note: the VIA VL800 is known to have some quirks with Linux xHCI 
drivers. Make sure you're running a reasonably recent kernel (Debian 13 will 
have a modern kernel, so this should be fine). The uas module is worth 
including — it gives significantly better throughput than the default 
usb-storage driver for USB 3.0 SSDs/hard drives.
"

Reply via email to