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