Wednesday, April 06, 2005


Boot Redhat RHEL 4 AS from USB Hard Drive

This document are totally based on the reference from and . Without Simon Ilyushchenko and Allen Benusa, I won't be able to make RedHat RHEL 4 bootable from external USB Drive.


1. Install RedHat RHEL 4 AS to the USB Hard Drive

Boot RHEL4 Installation CD, enter "expert". Partition your USB Hard drive manually. In my case, I created 1GB /dev/sda1 mounted as /boot and /dev/sda5 mounted as / (root), I also have /dev/sda7 SWAP partition.

After installation, boot from the RHEL4 Installation CD again, type "linux rescue", don't let the installer mount the USB hard drive partitions.

2. Mount partitions

mount /dev/sda5 /mnt/source
mount /dev/sda1 /mnt/source/boot
chroot /mnt/source

3. Restore initrd image

cp /boot/initrd-2.6.9-5.EL.img /tmp/initrd.gz
cd /tmp
gunzip initrd.gz

mkdir /tmp/a
cd /tmp/a
cpio -i < /tmp/initrd
(Output: 2078 blocks)

4. Edit init script to load USB drivers

vi /tmp/a/init

mount -t proc /proc /proc
echo Mounted /proc filesystem
echo Mounting sysfs
mount -t sysfs none /sys
echo Creating /dev
mount -o mode=0755 -t tmpfs none /dev
mknod /dev/console c 5 1
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
mkdir /dev/pts
mkdir /dev/shm
echo Starting udev
echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug
echo "Loading scsi_mod.ko module"
insmod /lib/scsi_mod.ko
echo "Loading sd_mod.ko module"
insmod /lib/sd_mod.ko
echo "Loading libata.ko module"
insmod /lib/libata.ko
echo "Loading ata_piix.ko module"
insmod /lib/ata_piix.ko
echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
insmod /lib/ext3.ko

echo "*** Loading usb-storage ***"
insmod /lib/usb-storage.ko
echo "*** Loading usb-uhci ***"
insmod /lib/ehci-hcd.ko
echo "*** Sleeping 5 seconds ***"
/bin/sleep 5

echo Creating root device
mkrootdev /dev/root

echo "*** Reread partition table ***"
/sbin/sfdisk -R /dev/sda

umount /sys
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
mount -t tmpfs --bind /dev /sysroot/dev
echo Switching to new root
switchroot /sysroot
umount /initrd/dev

5. Copy USB drivers

cd /lib/modules/2.6.9-5.EL/kernel/drivers
cp usb/host/ehci-hcd.ko /tmp/a/lib
cp usb/storage/usb-storage.ko /tmp/a/lib
cp scsi/scsi_mod.ko /tmp/a/lib
cp scsi/sd_mod.ko /tmp/a/lib

6. Copy executables and dependent libraries

ldd /bin/sleep
ldd /sbin/sfdisk
cp /lib/tls/ /lib/tls/ /lib/tls/ /lib/tls/ /tmp/a/lib/tls
cp /lib/ /tmp/a/lib/
cp /bin/sleep /sbin/sfdisk /tmp/a/bin/

7. Re-Make the init image

cd /tmp/a
find . | cpio -c -o | gzip -9 > /boot/usbinitrd.img
(output: 6077 blocks)

8. Edit grub.conf to boot from the new usbinitrd.img

vi /boot/grub/grub.conf

Reboot your system, Modify your BIOS to make USB Drive boot first, Enjoy!


Email me:

Lijian Liu,
Sendmail, Inc.

Site Meter

mkinitrd has an option --with-usb that works with RHEL 4 and FC5. Apparently it adds the necessary delays for USB handling. I've used this command successfully:

mkinitrd --with-usb --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod /boot/usbinitrd-2.6.15-1.2054_FC5.img 2.6.15-1.2054_FC5

with both FC5 and RHEL 4. (Naturally the RHEL kernel version was different.)
Post a Comment

<< Home