I have installed a brand new pbx (using Pbx in a flash), all works fine, but I want to turn the working setup in RAID1.
Att.: With the new releases of the PiaF setup is no longer possible to perform a RAID installation (option ks_sataraid), and in spite of the usefulness of the raid on a pbx is much discussed (see link to the Pbx in a flash forum below). I prefer always to use a RAID1 in “important” installation and when the pbx will be used like file server too. And when it is not possible to use a RAID controller, I use Linux software RAID (it is, however, better than nothing !).
I found the how-to “How To Create A RAID1 Setup On An Existing CentOS/RedHat 6.0 System“ in how to forge (see link below), and in this tutorial I adapted it for our purposes.
In this example the initial layout for the hard disks was:
# mount|grep ^'/dev' /dev/sda2 on / type ext3 (rw) /dev/sda1 on /boot type ext3 (rw)</p> # fdisk -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000873c2 Device Boot Start End Blocks Id System /dev/sda1 * 1 13 102400 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 13 60704 487496704 83 Linux /dev/sda3 60704 60802 786432 82 Linux swap / Solaris#
We have only one hard disk, sda, and all works fine ! We want to transform our working server in RAID 1 setup adding the other hard disk /dev/sdb.
Att.: Before to start we have to backup everything !!
Let’s start……
Create partitions on /dev/sdb identical to the partitions on /dev/sda.
# sfdisk -d /dev/sda | sfdisk --force /dev/sdb
To check.
# fdisk -l /dev/sdb Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 * 1 13 102400 83 Linux Partition 1 does not end on cylinder boundary. /dev/sdb2 13 60704 487496704 83 Linux /dev/sdb3 60704 60802 786432 82 Linux swap / Solaris
Now run the the following commands.
# mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-disks=2 /dev/sdb1 missing mdadm: /dev/sdb1 appears to contain an ext2fs file system size=102400K mtime=Thu Sep 20 15:05:01 2012 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. #mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-disks=2 /dev/sdb2 missing mdadm: /dev/sdb2 appears to contain an ext2fs file system size=487496704K mtime=Thu Sep 20 15:31:25 2012 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
All these commands generates the raid devices in a degenerated state because the second drive is missing: we have only sdb in this RAID 1 !
Create a mdadm.conf from your current configuration.
# mdadm --detail --scan > /etc/mdadm.conf
Now we have to rebuild the initramfs with the new RAID: we will be using dracut.
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.old # dracut --mdadmconf --force /boot/initramfs-$(uname -r).img $(uname -r)
Now we can create the correct filesystems on these new software raid devices, and initialize the swap on sdb3.
# mkfs.ext3 /dev/md0 # mkfs.ext3 /dev/md1 # mkswap -c /dev/sdb3 # swapon /dev/sdb3
Now we can copy the data from the existing partitions to the newly created raid partitions. We will begin with boot and after the root.
# mkdir /mnt/raid # mount /dev/md0 /mnt/raid # cd /boot; find . -depth | cpio -pmd /mnt/raid # sync # umount /mnt/raid # mount /dev/md1 /mnt/raid # cd / ; find . -depth -xdev | grep -v '^\./tmp/' | cpio -pmd /mnt/raid # sync # umount /mnt/raid
At this step we have our raid system created and the existing data was mirrored manually onto the new devices . Now we have to modifiy grub and the boot process to use the brand new RAID and the new swap: but we have to obtain the related UUID.
# blkid | grep /dev/md /dev/md0: UUID="16b821f6-21ed-403e-a027-10e0bf89d9e5" SEC_TYPE="ext2" TYPE="ext3" /dev/md1: UUID="55de6ac7-d6f6-4db2-a573-78f3132d568c" SEC_TYPE="ext2" TYPE="ext3" # blkid | grep /dev/sdb3 /dev/sdb3: UUID="6f6a9cf2-9f06-4274-af0a-b45d6defe818" TYPE="swap"
Att.: Obviously your uuid will be different from mine.Pls write down the yours UUID: we will use shortly.
# mount /dev/md1 /mnt/raid
In fstab change the line containing the mount point /boot to the UUID of the new /dev/md0 filesystem and the line related root mount point to the UUID of /dev/md1.
# nano /mnt/raid/etc/fstab
Before edit
... UUID=594ceeec-816c-4e61-83b4-7f492d2a4479 / ext3 defaults 1 1 UUID=c504f053-05aa-471c-a626-acc76b435b61 /boot ext3 defaults 1 2 UUID=bada5049-3902-4e08-a858-945c1ee8cf0f swap swap defaults 0 0 ......
I have changed c504f053-05aa-471c-a626-acc76b435b61 with 16b821f6-21ed-403e-a027-10e0bf89d9e5.
Repeat for the UUID of the filesystem for the new / md device: I have changed 594ceeec-816c-4e61-83b4-7f492d2a4479 with 55de6ac7-d6f6-4db2-a573-78f3132d568c. Finally I have changed bada5049-3902-4e08-a858-945c1ee8cf0f with 6f6a9cf2-9f06-4274-af0a-b45d6defe818, the UUID related the swap area.
After edit.
... UUID=55de6ac7-d6f6-4db2-a573-78f3132d568c / ext3 defaults 1 1 UUID=16b821f6-21ed-403e-a027-10e0bf89d9e5 /boot ext3 defaults 1 2 UUID=6f6a9cf2-9f06-4274-af0a-b45d6defe818 swap swap defaults 0 0 ....
Close & Save and unmount /mnt/raid.
Mount /dev/md0 again to /mnt/raid.
# mount /dev/md0 /mnt/raid/
Now we have to modify the grub menu.lst.
nano /mnt/raid/grub/menu.lst
Before edit
...... default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz verbose=0 hiddenmenu title CentOS (2.6.32-220.17.1.el6.i686) root (hd0,0) kernel /vmlinuz-2.6.32-220.17.1.el6.i686 ro root=UUID=594ceeec-816c-4e61-83b4-7f492d2a4479 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM vga=791 initrd /initramfs-2.6.32-220.17.1.el6.i686.img
I have changed 594ceeec-816c-4e61-83b4-7f492d2a4479 with a5900125-51b9-4684-a268-bc47be21f705 and deleted the option rd_NO_DM.
After edit
..... default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz verbose=0 hiddenmenu title CentOS (2.6.32-220.17.1.el6.i686) root (hd0,0) kernel /vmlinuz-2.6.32-220.17.1.el6.i686 ro root=UUID=a5900125-51b9-4684-a268-bc47be21f705 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us vga=791 initrd /initramfs-2.6.32-220.17.1.el6.i686.img
Now we have to install grub on the new hard disk
# grub > root (hd1,0) > setup (hd1) > quit
It is possible to restart the system using the RAID. Reboot the machine and enter in the system BIOS, and choose the new disk as the one that your system boots from. Save the BIOS setting and boot.
If alla works fine after the reboot.
# mount|grep ^'/dev' /dev/md1 on / type ext3 (rw) /dev/md0 on /boot type ext3 (rw)
Att. The md is related to the RAID: the system is using RAID 1 !
Now you have to change the partition type
# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 * 1 13 102400 83 Linux Partition 1 does not end on cylinder boundary. /dev/sdb2 13 60704 487496704 83 Linux /dev/sdb3 60704 60802 786432 82 Linux swap / Solaris Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): fd Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): p Command (m for help): w
The partition table has been altered!
Reboot another time !
Now we can submit the sda in the raid. To begin reset the MBR.
# dd if=/dev/zero of=/dev/sda bs=512 count=1 # sfdisk -d /dev/sdb | sfdisk --force /dev/sda
Recreate grub on sda (hd0)
# grub > root (hd0,0) > setup (hd0) > quit
Now try to restart: all works fine ? Now we launch the final command that will rebuild the RAID 1.
mdadm /dev/md0 -a /dev/sda1 mdadm /dev/md1 -a /dev/sda2
Will start the rebuild of the raid: it take very long time.
To see what’s going on, use the commands.
# cat /proc/mdstat
The final step is to configure the system to use the swap in both the hard drive: we have to add the sda3 swap area. We will use the swap on both drives for perfomance and because if a hard disk fails the other can support the swap process.
# blkid | grep /dev/sda3 /dev/sda3: UUID="52ef671d-a892-4059-9476-e1697e824381" TYPE="swap" # mkswap -c /dev/sda3 # swapon /dev/sda3
Now we have to modify the /etc/fstab file adding a new line to use the swap in the other hard drive: before we have to find the UUID.
# blkid | grep /dev/sda3 /dev/sda3: UUID="52ef671d-a892-4059-9476-e1697e824381" TYPE="swap"
/etc/fstab before edit
.... UUID=a5900125-51b9-4684-a268-bc47be21f705 / ext3 defaults 1 1 UUID=56008161-316f-4d38-86a7-5e3043d0cc83 /boot ext3 defaults 1 2 UUID=52ef671d-a892-4059-9476-e1697e824381 swap swap defaults 0 0 ......
I have addee a new line
UUID=52ef671d-a892-4059-9476-e1697e824381 swap swap defaults 0 0
/etc/fstab after edit
.... UUID=a5900125-51b9-4684-a268-bc47be21f705 / ext3 defaults 1 1 UUID=56008161-316f-4d38-86a7-5e3043d0cc83 /boot ext3 defaults 1 2 UUID=6f6a9cf2-9f06-4274-af0a-b45d6defe818 swap swap defaults 0 0 UUID=52ef671d-a892-4059-9476-e1697e824381 swap swap defaults 0 0 ......
Linkografia
HowToForge: How To Create A RAID1 Setup On An Existing CentOS/RedHat 6.0 System
PiaF Forum: Software Raid