I took delivery of an eSATA multi-boot SheevaPlug from NewIT on Saturday. I now have it booting Ubuntu off a 1TB external drive connected over eSATA.
In case it helps anyone else, so far as I can remember, these are the steps I took ...
The first thing I did was to copy the two partitions off the Ubuntu SD card using another Linux system (so that I had a backup of the as-delivered state in case of major problems). I used an SD card reader, mounted each partition in turn and made a gzipped tar backup of the partition. For good measure I also used dd to make an image of the entire card.
Then, mainly guided by
http://www.computingplugs.com/index.php/Booting_entirely_off_an_external_USB_device (but dipping in and out of several other forum postings as well), on the SheevaPlug, having booted from the SD card:
Partitioned the external eSATA drive with fdisk: first partition approx 40MB, second partition approx 300GB (I suspect these are vastly larger than needed, but with 1TB to play with ...). The remainder of the disk unallocated. Both the partitions are Linux partitions. I marked the first partition as bootable (though I'm not sure this is necessary)
I then used mkfs.ext3 to put ext3 filesystems on both of them
Then:
mkdir /mnt/mtdroot
mkdir /mnt/sda1
mkdir /mnt/sda2
mount /dev/mmcblk0p2 /mnt/mtdroot
mount /dev/sda1 /mnt/sda1
mount /dev/sda2 /mnt/sda2
cp -av /mnt/mtdroot/. /mnt/sda2
cd /mnt
scp -p <the other sLinux system>:/mnt/usb/sheeva/as_delivered/sd_ubuntu_1.tgz .
# this is the gzipped tar copy of the first partition on the SD card as delivered.
tar -xvozf sd_ubuntu_1.tgz
cp -p uImage /mnt/sda1
I then re-booted and interrupted the boot to set extra UBoot variables:
setenv bootcmd_ide 'setenv bootargs ${bootargs_console} ${bootargs_root_ide}; ide reset; ext2load ide 1 0x800000 /uImage; bootm 0x00800000; reset'
setenv bootargs_root_ide 'root=/dev/sda2 rootdelay=10'
Most of the articles seem to suggest "ext2load ide 0:1 ...", but I couldn't get that to work.
There are various suggestions in different threads for what the two hex numbers should be. The two I chose are the same as the NewIT multi-boot uses in the boot strings for both internal NAND and SD card.
The two hex numbers should be the same - I scratched my head for several minutes wondering why things didn't work when through a typo, I had one as 8 followed by 5 zeroes and the other as 8 followed by 6 zeroes.
Then
run bootcmd_ide
and it boots from eSATA.
At some point I'll get around to making this the bootcmd varianble so that it automatically boots from the eSATA drive.