Ubuntu 10.04 LTS bootable software RAID-1

Start from your home directory
cd ~

Install mdadm
sudo apt-get install mdadm

You need 2 modules loaded, md and raid1 Ubuntu 10.04 should automatically have md loaded. You can verify this by running "fgrep CONFIG_MD /boot/config-$(uname -r)"

We need to load the raid1 module so when you reboot it will load.
sudo echo raid1 >> /etc/modules

Now we will load it manually so we don't have to reboot
sudo modprobe raid1

Verify its loaded
lsmod | grep raid1

Next we are going to copy the partition info from sda to sdb.
sudo sfdisk -d /dev/sda > sda.out
sudo sfdisk -f /dev/sdb < sda.out
*NOTE* If you get "I don't like these partitions – nothing changed." Verify it by comparing the output of sfdisk -l /dev/sda and sfdisk -l /dev/sdb.

Change the partition type of the /dev/sdb Linux partition(s) to "Linux raid autodetect"
sudo sfdisk --change-id /dev/sdb 1 fd

Now we're ready to create the array. We specify a RAID 1 array with 2 devices. The first drive is missing (we add it later) and the second is /dev/sdb1:
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1

Now, we need to create and update the mdadm.conf.
sudo cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.bak && sudo cp /etc/mdadm/mdadm.conf mdadm.conf && sudo mdadm --detail --scan >> mdadm.conf && sudo cp mdadm.conf /etc/mdadm/mdadm.conf
*NOTE* It will put in a parameter metadata=00.90 that will cause warnings later. Apparently, this is a bug and it is safe to remove it.

Now, we format the raid volume
sudo mkfs -t ext4 /dev/md0

Find out the UUID of the array
sudo blkid

Make a copy of /etc/fstab in your home directory and change root to mount to the UUID of the array.  Don't change the real /etc/fstab quite yet.
sudo cp /etc/fstab /etc/fstab.bak && sudo cp /etc/fstab fstab && sudo nano fstab

Really quick, check what kernel you are running you will need this for the next section.
uname -r

Next is adding a custom GRUB2 setup
sudo cp /etc/grub.d/40_custom 09_swraid1_setup && sudo nano 09_swraid1_setup

Replace "2.6.32-36-server" with your kernel version you got from running "uname -r"
menuentry 'Ubuntu, with Linux 2.6.32-36-server' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod raid
        insmod mdraid
        insmod ext2
        set root='(md0)'
        linux   /boot/vmlinuz-2.6.32-36-server root=/dev/md0 ro   quiet
        initrd  /boot/initrd.img-2.6.32-36-server
}

Now copy both files we just created to their respective locations
sudo cp fstab /etc/ && sudo cp 09_swraid1_setup /etc/grub.d/

Let's update Grub
sudo update-grub && sudo update-initramfs -u

And make sure Grub is installed on both drives
sudo grub-install /dev/sda && sudo grub-install /dev/sdb

Create a directory called "tmpraid"
sudo mkdir /tmpraid

Mount the array on /tmparray
sudo mount /dev/md0 /tmpraid && sudo rsync -vaxP / /tmpraid

Reboot...
sudo reboot

Change the partition type of sda now
sudo sfdisk --change-id /dev/sda 1 fd

Add it to the array:
sudo mdadm --add /dev/md0 /dev/sda1

Let's watch /dev/sda sync:
watch cat /proc/mdstat

Let's delete the GRUB entry we created earlier since it is no longer needed
sudo rm -f /etc/grub.d/09_swraid1_setup

Now let's finish up
sudo update-grub && sudo update-initramfs -u

Now we're done, reboot and test if you so wish.

References:
http://www.jfamiglietti.com/john/?p=152
http://linuxconfig.org/Linux_Software_Raid_1_Setup