Computers need disks to store their operating system, programs and data. Good old disk partition management has not changed much over time. Using either MBR (created in 1983) or modern GPT paritions you are still using statically allocated partitions and filesystems. It can be challenging to deal with static partitions because initial choices can not be changed easily.
Unfortunately it is more complex to use Logical Volume Manager for Linux (wikipedia). Most factory installed computers use traditional partitioning. The added complexity is not usually needed but when it is needed it is really needed. The benefits of using LVM include the ability to more easily resize partitions and backup via snapshots. Server hardware can even replace disks using hot swapping. LVM is commonly used along with virtualization via LXC, Eucalyptus, OpenStack or other similar systems. Here are the steps needed to convert a root partition to LVM and mirror it on a redhat system.
1. Create a tar backup of your filesystem.
# tar czpf /root/redhat.tar --exclude=/var/tmp/portage/* --exclude=/root/* --exclude=/usr/portage/* --exclude=*.deb --exclude=/tmp/* --exclude=*.rpm --exclude=/sys/* --exclude=/proc/* --exclude=/dev/* --exclude=/mnt/* --exclude=/media/* --exclude=/home/*Â --exclude=/var/lib/libvirt/images/* --exclude=/oracle/*Â --exclude=redhat.tar
2. Use fdisk to create /boot  and 1 LVM partition on the new disk.
/dev/sda1Â Â * Â 1 Â Â 100Â Â Â Â Â 803218+Â 83Â Linux
/dev/sda2 101121601 Â 975956782+ 8e Linux LVM
3. Set /dev/sda1 to be bootable.
# parted /dev/sda set 1 boot on
4. Â Create the new LVM partition.
# pvcreate /dev/sda2
# vgcreate vg /dev/sda2
# lvcreate -L 200G /dev/vg -n root
# mkfs /dev/vg/root
# mkfs /dev/sda1
# mount /dev/vg/root /mnt
# mount /dev/sda1 /mnt/boot
5. Extract the tar file to /mnt
# tar xpf /root/redhat.tar -C /mnt/
6. Modify the following files:
/mnt/grub/menu.list:
Modify the kernel line to support LVM by adding the following LVM details:
rd_LVM_VG=vg rd_LVM_LV=root
Also ensure that initrd and kernel does not have /boot/ in the location.
Example:
kernel /vmlinuz-2.6.32-279.2.1.el6.x86_64 ro root=/dev/mapper/vg-root LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=128MÂ rd_LVM_VG=vg rd_LVM_LV=root rhgb quiet
initrd /initramfs-2.6.32-279.2.1.el6.x86_64.img
/mnt/etc/fstab:
Change the /boot and / entries to LVM:
/dev/sda1 /boot ext4 defaults 0 0
/dev/mapper/vg-root /     ext4   defaults       1 1
7. Mount and configure the new environment:
# mount /dev/vg/root /mnt
# mount /dev/sda1 /mnt/boot
# mount -o bind /sys /mnt/sys
# mount -o bind /dev /mnt/dev
# mount -o bind /proc /mnt/proc
# grep -v rootfs /proc/mounts > /mnt/etc/mtab
Modify /mnt/etc/mtab and add:
/dev/sda1 /boot ext4 rw 0 0
Change the apparent root directory for the current running process and its children:
# chroot /mnt
8. Install GRUB and reconfigure the ram disk image:
# grub-install --recheck /dev/sda
#Â dracut --force
9. Unmount and reboot:
Type exit to exit the chroot environment
# cd /
# umount /mnt/*
# umount /mnt
# reboot
Set your system to boot from the disk known as /dev/sda
10. Initialize and format your original boot disk.
Just like we did for /dev/sda.
 Device Boot     Start        End     Blocks  Id System
/dev/sdc1Â Â *Â Â Â Â Â Â Â Â Â Â 1 Â Â Â 100Â Â Â Â Â 803218+Â 83Â Linux
/dev/sdc2            101   121601  975956782+ 8e Linux LVM
11. Add /dev/sdc to the volume group.
# vgextend /dev/vg /dev/sdc2
12. Format the boot partition on the drive and set it bootable:
# mkfs /dev/sdc1
# parted /dev/sdc set 1 boot on
13. Mirror the boot disk:
# lvconvert -m1 /dev/vg/root
We hope this helps you with your disks. Berkeley LUG meetings continue every second and fourth Sunday each month at Bobby Gs Pizzeria from noon to three in Berkeley. Please join us.