Wednesday, April 06, 2005

 

Boot Redhat RHEL 4 AS from USB Hard Drive

This document are totally based on the reference from http://simonf.com/usb/ and http://www.benusa.com/linux/boot.htm . Without Simon Ilyushchenko and Allen Benusa, I won't be able to make RedHat RHEL 4 bootable from external USB Drive.

Keyword: USB EXTERNAL REDHAT LINUX RHEL BOOT INITRD INSTALL

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

#!/bin/nash
mount -t proc /proc /proc
setquiet
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
/sbin/udevstart
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


/sbin/udevstart
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/libm.so.6 /lib/tls/librt.so.1 /lib/tls/libc.so.6 /lib/tls/libpthread.so.0 /tmp/a/lib/tls
cp /lib/ld-linux.so.2 /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!

Questions?


Email me: liulijian@gmail.com

Lijian Liu,
Sendmail, Inc.



Site Meter


Comments:
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