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
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.
mount /dev/sda5 /mnt/source
mount /dev/sda1 /mnt/source/boot
chroot /mnt/source
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)
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
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
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/
cd /tmp/a
find . | cpio -c -o | gzip -9 > /boot/usbinitrd.img
(output: 6077 blocks)
vi /boot/grub/grub.conf
Reboot your system, Modify your BIOS to make USB Drive boot first, Enjoy!
Email me: liulijian@gmail.com
Lijian Liu,
Sendmail, Inc.
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.