====== Mini Raid Software howto ======
===== Prologue =====
* with the instructions that follow we move a complete root system disk from bare partitions to a RAID 1 software layer.
* obviously you can use the same trick to upgrade to a RAID 5 software system
* **all the work is done without putting the server off-line, but it's better to stop the services before starting the copy of the files from the old disk to the new one**
* only one reboot process is needed if the disks are already installed on the server and if the whole process is correct.
==== The second disk is already installed and the partition Table is empty ====
**else remove the partitions on the second disk by hand pbefore starting this procedure**
* /dev/sda: is the original disk from where the system boot
* /dev/sdb: is the second disk
==== create the correct partitions we need ====
* 100 MB for the boot partition
* 2Gbyte for the swap partition (there's no need to put the swap partitions on a raid system)
* rest of the space disk for the root and others partitions
start fdisk and follow these commands
fdisk /dev/sdb
n
p
1
[enter]
+100M
n
p
2
[enter]
+2048M
n
p
3
[enter]
[enter]
t
2
82
t
3
fd
w
==== now we need to create the raid 1 partitions for the boot and the other partitions ====
* /dev/md0 will be the first raid 1 partition used only by the /boot directory
* /dev/md1 will be the raid 1 disk used for everything else
mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb3
echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
* we created the raid devices (in downgraded mode)
* the informations about the devices is written in the **/etc/mdadm.conf** file.
==== the /dev/md0 partition will be used flat for the boot partitions ====
* so we can format it right now
mkfs.ext3 /dev/md0
==== the /dev/md1 partition will be splitted using the lvm layer ====
* if the virtual disk **vg1** is already used, please change the example below
pvcreate /dev/md1
vgcreate vg1 /dev/md1
lvcreate --name root -L 4G vg1
lvcreate --name usrlocal -L 4G vg1
lvcreate --name var -L 4G vg1
lvcreate --name export -L G vg1
lvcreate --name export -l vg1
* we assigned the /dev/md1 partition to an lvm disk and we created different lvm partitions
* now we need to format the partitions just created
mkfs.ext3 /dev/vg1/root
mkfs.ext3 /dev/vg1/usr/local
mkfs.ext3 /dev/vg1/var
mkfs.ext3 /dev/vg1/export
==== time to mount the partitions to copy the system from the original disk ====
mkdir /1
mount /dev/vg1/root /1
cd /1
mkdir -p boor usr/local var export proc sys dev
mount /dev/md0 boot
mount /dev/vg1/usrlocal usr/local
mount /dev/vg1/var var
mount /dev/vg1/export export
* ok, the new partitions are mounted and ready to receive all the contents
rsync -aH --exclude=/1 --exclude=/proc --exclude=/sys --exclude=/dev / /1/
* wait until the system is copied
==== Create the new initrd image file ====
* after the copy we need to create a new initrd and change the information in the **/1/etc/fstab** file
* avoid the use of label inside this file, instead use the physical name of the devices
* you should have something like that:
vi /1/etc/fstab
/dev/vg1/root / ext3 defaults 1 1
/dev/md0 /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/vg1/export /export ext3 defaults 1 2
/dev/vg1/var /var ext3 defaults 1 2
/dev/vg1/usrlocal /usr/local ext3 defaults 1 2
#LABEL=SWAP-sda2 swap swap defaults 0 0
LABEL=SWAP-sdb2 swap swap defaults 0 0
* the reference to the swap partition on the first disk must be commented
* now we can create the new initrd image **include also the serial-ata module, if necessary**
mkinitrd --preload raid1 --preload raid456 --preload sata_nv --fstab /1/etc/fstab /boot/initrd-$(uname -r)-raid.img $(uname -r)
==== Edit the grub configuration file in the original disk ====
* change the file adding a instance forthe new disk
* this is the original instance:
title Fedora (2.6.23.15-80.fc7) RAID
root (hd0,0)
kernel /vmlinuz-2.6.23.15-80.fc7 ro root=/dev/vg1/root vga=791 selinux=0 noipv6 panic=30
initrd /initrd-2.6.23.15-80.fc7.img
* must be changed in:
title Fedora (2.6.23.15-80.fc7) RAID
root (hd0,0)
kernel /vmlinuz-2.6.23.15-80.fc7 ro root=/dev/vg1/root vga=791 selinux=0 noipv6 panic=30
initrd /initrd-2.6.23.15-80.fc7-2.img
title Fedora (2.6.23.15-80.fc7) RAID
root (hd1,0)
kernel /vmlinuz-2.6.23.15-80.fc7 ro root=/dev/vg1/root vga=791 selinux=0 noipv6 panic=30
initrd /initrd-2.6.23.15-80.fc7-2-raid.img
* leave the default boot partition to the old disk, so in case of trouble we can reboot
==== Install the boot loader on the second disk ====
* we need to install the grub boot loader on the new disk using the **grub** command
* avoid the **grub-install** command, doesn't work for complex situation like this
grub
root (hd1,0) [enter]
setup (hd1) [enter]
quit [enter]
==== update the data on the second disk ====
* we need to copy the changes from the original disk to the new one
rsync -aH /boot/ /1/boot/
==== Reboot ====
* time to reboot and see what happens
reboot
* **at the boot prompt select the second boot option** and verify that is the right one checking that contains the **root (hd1,0)** line
* if everything was right the system should boot with the raid 1 disk
===== The New System =====
* now we have the system running on the software raid disk, but the raid is in downgrade mode (only one disk is operating at the moment)
* we need to connect the original disk tho the current one
* for this reason we need to remove all the partitions on the old disk a recreate the new partition map that must be identical to the one of the **/dev/sdb** disk we are using now.
* in our examples /dev/vg0 is the old lvm disk
==== Deleting the old lvm partitions ====
* we disable the old lvm partitions to avoid confusion
lvchange -a n vg0/root
lvchange -a n vg0/usrlocal
lvchange -a n vg0/var
lvchange -a n vg0/export
* now we can erase the lvm partitions
lvremove vg0/root
lvremove vg0/usrlocal
lvremove vg0/var
lvremove vg0/export
* then we need to remove the vg
vgremove vg0
pvremove /dev/sda3
==== Creating the new partition table form the second disk ====
* now we can recreate the new partition table copying the partition of /dev/sdb to /dev/sda
sfdisk -d /dev/sdb | sfdisk /dev/sda
==== add the second disk to the raid system ..... ====
mdadm --manage /dev/md0 --add /dev/sda1
mdadm --manage /dev/md1 --add /dev/sda3
* the raid subsystem is synchronizing the content of both disks
==== .... and update the grub code ====
grub
root (hd0,0)
setup (hd0)
quit
==== the last task is to create the second swap partition ====
mkswap -L SWAP-sda2 /dev/sda2
swapon /dev/sda2
* uncomment the line about the swap partition inside /etc/fstab
===== Kernel upgrade =====
**During Kernel upgrade the grub file must be manually modified in order to add the reference to the second disk**