How to migrate from an existing software RAID 1 array to a new RAID 1 array on CentOS 5.5
# File: Migrate_to_new_RAID_Array_on_CentOS_5.5.notes # Auth: burly # Date: 11/20/2010 # Refs: # Desc: How migrate from one RAID 1 array to a new one # on CentOS 5.5 # I booted from a Knoppix CD to do this. In retrospect, # I should have used a CentOS LiveCD because the # tooling, versions, and layout of Knoppix are different # which caused some issues. Also, because my OS is x86-64 # but Knoppix is x86, I could not chroot into my system # environment, which are ultimately required to create the # initrd files. # Boot from the Knoppix CD and drop to a shell # Start up the existing RAID Array (one of the 2 drives # from the existing RAID 1 array was on sdc for me) mdadm --examine --scan /dev/sdc1 >> /etc/mdadm/mdadm.conf mdadm --examine --scan /dev/sdc2 >> /etc/mdadm/mdadm.conf mdadm --examein --scan /dev/sdc3 >> /etc/mdadm/mdadm.conf /etc/init.d/mdadm start /etc/init.d/mdadm-raid start # Partition first SATA drive in whatever partition numbers # and sizes you want. Make sure all partitions that # will be in an RAID array use ID type "fd" for RAID # autodetect and type "82" for swap. Make sure /boot # is marked with the bootable flag fdisk /dev/sda # Repeat for the other disks OR if you are using the # identical setup on each, you can use sfdisk to # simplify your life. sfdisk -d /dev/sda | sfdisk /dev/sdb # Create the new boot array # NOTE: If you don't use metadata 0.90 (but instead # 1.0 or 1.1) you'll run into problems with grub. # In RAID 1, with metadata 0.90, you can mount # the fs on the partition without starting RAID. # With newer versions of metadata the superblock # for RAID gets written at the beginning of the # partition where the filesystem superblock # normally would go. This results in the inability # to mount the filesystem without first starting # RAID. In the case of your boot partition, this # results in the inability to setup grub and thus boot. mdadm --create --verbose --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 # Copy everything over for /boot mkdir /mnt/oldBoot mkdir /mnt/newBoot mkfs.ext3 /dev/md0 mount --options=ro /dev/md0 /mnt/oldBoot cd /mnt/oldBoot find . -mount -print0 | cpio -0dump /mnt/newBoot # Make the new swap mkswap /dev/sda2 mkswap /dev/sdb2 # Create the new array for LVM. I used metadata # 0.90 again for consistency AND because I believe # the version of mdadm in CentOS won't handle newer # versions of it mdadm --create --verbose --metadata=0.90 /dev/md1 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3 # Setup LVM2 pvcreate /dev/md1 vgcreate vg /dev/md1 lvcreate -L8G -nroot vg lvcreate -L10G -nhome vg lvcreate -L250G -nvm vg # Format the filesystems. # NOTE: I fixed the reserved space to 1% (default is 5%) # for the VM LV to save some space and # because in larger, non-root partitions, you # don't need all that reserved space. mkfs.ext3 /dev/vg/root mkfs.ext3 /dev/vg/home mkfs.ext3 -m 1 /dev/vg/vm # Copy everything over for / mkdir /mnt/oldRoot mkdir /mnt/newRoot mount --options=ro /dev/vgOS/lvRoot /mnt/oldRoot mount /dev/vg/root /mnt/newRoot cd /mnt/oldRoot find . -mount -print0 | cpio -0dump /mnt/newRoot # Copy everything over for /home mkdir /mnt/oldHome mkdir /mnt/newHome mount --options=ro /dev/vgOS/lvHome /mnt/oldHome mount /dev/vg/home /mnt/newHome cd /mnt/oldHome find . -mount -print0 | cpio -0dump /mnt/newHome # Copy everything over for /boot mkdir /mnt/oldVM mkdir /mnt/newVM mount --options=ro /dev/vgOS/lvVM /mnt/oldVM mount /dev/vg/vm /mnt/newVM cd /mnt/oldVM find . -mount -print0 | cpio -0dump /mnt/newVM # Remove any existing/stale lines in the mdadm.conf file # Setup the mdadm config on the new / mdadm -Esb /dev/sda1 >> /mnt/newRoot/etc/mdadm.conf mdadm -Esb /dev/sda3 >> /mnt/newRoot /etc/mdadm.conf # Update fstab on the new machine to use the new # mount points (e.g. if you changed VolumeGroup or # LogicalVolume names) vim /mnt/newRoot/etc/fstab # REBOOT TO A CENTOS LIVECD (if you weren't already on one) # First we chroot mkdir /mnt/sysimage mount /dev/vg/root /mnt/sysimage mount /dev/vg/home /mnt/sysimage/home mount /dev/md0 /mnt/sysimage/boot mount --bind /dev /mnt/sysimage/dev mount -t proc none /mnt/sysimage/proc mount -t sysfs none /mnt/target/sys chroot /mnt/sysimage # Make a new initrd to boot from cd /boot mv initrd-2.6.18-194.26.1.el5.img initrd-2.6.18-194.26.1.el5.img.bak mkinitrd initrd-2.6.18-194.26.1.el5.img 2.6.18-194.26.1.el5 # Setup grub on both of the drives grub root(hd0,0) setup(hd0) root(hd1,0) setup(hd1) quit # Reboot!