http://www.nslu2-linux.org/wiki/OpenWRT/BootFromUsbDevice
This guide covers fast (12mbit/s) USB and ext2 filesystem only. Make sure you install package kmod-usb2 and load module ehci-hcd or your disk will be (very, hdparm -t
< 12,5mbit/s) slow.
This tutorial is for OpenWRT (kamikaze, backfire) with 2.6 kernel, but it will probably work for other devices too running OpenWRT on a 2.6 kernel. If you are unsure what kernel you have use: uname -a
which will give you something like this:
Linux OpenWrt 2.6.21.6 #1 Fri Dec 28 11:04:49 UTC 2007 armv5teb unknown
First of all make sure you have all the modules required:
ipkg update
ipkg install kmod-usb-core kmod-usb-uhci kmod-scsi-core kmod-usb-storage kmod-fs-ext2 kmod-fs-ext3
Then load these modules:
insmod ext2
insmod jbd
insmod ext3
Install e2fsprogs and fdisk:
ipkg install e2fsprogs fdisk
Partition your disk. I have a 1GB Verbatim and used 700 MB for ext2 and 300 MB for swap.
fdisk /dev/sdX
<- change this to your device
Then format your partition:
mke2fs /dev/sdX1
<- change this to your device
Mount it and copy the filesystem to your USB-device:
mount -t ext2 /dev/sda1 /mnt
mkdir /tmp/root
mount -o bind /rom /tmp/root
cp /tmp/root/* /mnt -a
umount /tmp/root
umount /mnt
vi /etc/init.d/pivotroot
copy and paste this into /etc/init.d/pivotroot
#!/bin/sh
# change this to your boot device
boot_dev="/dev/sda1"
/sbin/hotplug2 --override --persistent --max-children 1 --no-coldplug &
for module in usbcore uhci scsi_mod sd_mod usb-storage jbd ext2 ext3 ; do {
insmod $module
}; done
# this may need to be higher if your disk is slow to initialize
sleep 30s
# mount the usb stick
mount "$boot_dev" /mnt
# if everything looks ok, do the pivot root
killall hotplug2
[ -x /mnt/sbin/init ] && {
mount -o move /proc /mnt/proc && \
pivot_root /mnt /mnt/mnt && {
mount -o move /mnt/dev /dev
mount -o move /mnt/tmp /tmp
mount -o move /mnt/jffs2 /jffs2 2>&-
mount -o move /mnt/sys /sys 2>&-
}
}
Then make it executable:
chmod a+x /etc/init.d/pivotroot
Now, make the symlink so it will start at boot time:
ln -s /etc/init.d/pivotroot /etc/rc.d/S10pivotroot
replace everything in /etc/init.d/rcS with this
vi /etc/init.d/rcS
#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
if test $2 == "boot" ; then
/etc/init.d/pivotroot
fi
{
for i in /etc/rc.d/$1*; do
$i $2 2>&1
done
} | logger -s -p 6 -t '' &
Now reboot and telnet to your slug
Use 'passwd' to set your new root password
exit
Log in with ssh
.
To make sure it works type df -h
.
Which will give you something like this
Filesystem Size Used Available Use% Mounted on
/dev/sda1 1.0M 1.0M 0 100% /mnt/rom
/dev/mtdblock5 5.4M 752.0k 4.6M 14% /mnt/jffs
mini_fo:/jffs 1.0M 1.0M 0 100% /mnt
/dev/sda1 656.1M 19.0M 603.7M 3% /
Fixup resolv.conf symlink:
rm /etc/resolv.conf
ln -s /tmp/resolv.conf.auto /etc/resolv.conf
If you created a swap partition you may want to use it:
ipkg update
ipkg install swap-utils
mkswap /dev/sda2
swapon /dev/sda2
Make it start at boot time:
echo "#!/bin/sh" >> /etc/init.d/swapspace
echo "swapon /dev/sda2" >> /etc/init.d/swapspace
chmod a+x /etc/init.d/swapspace
ln -s /etc/init.d/swapspace /etc/rc.d/S99swapspace
Use free to see if it worked:
free
total used free shared buffers
Mem: 30472 11628 18844 0 960
Swap: 297192 0 297192
Total: 327664 11628 316036
OpenWRT full backuptar cv /bin /etc /home /lib /root /sbin /tmp /usr /www > openwrt.tar
scp openwrt.tar user@backup-serve:/backup