Boot Debian 13 from external SSD USB 3.0 which is connected to external USB 3.0 adapter
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:
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 to: