Tuesday, January 20, 2009

Add extra storage on the fly with LVM2

Currently I am in the process of creating a file/print server for my home network. It's an older computer but I wanted to experiment with various set-ups and configurations. Two of my requirements were that I must be able to add extra storage on the fly and I must be able to see the two hard drives as one logical unit. The only way (at least that I know of) is to use LVM. I have used it in the past, but I never really needed so I usually did not pick it during the install. In fact my current Ubuntu desktop does not have LVM on it.

During my internet searches I came across this great article, A Beginners Guide to LVM. Read this all the way through and you should get a good grasp of the main commands of LVM. Since that article did not really explain how to what I wanted I had to adapt it to my needs. Here are the steps I used to get my 80GB Maxtor(sda) and 60GB Western Digital(sdb) to work together as one logical unit. I am also using ext3 as my filesystem because it supports on-line resizing.
  1. Fresh install of Ubuntu Server 8.10
  2. Run updates:
    sudo aptitude update && sudo aptitude safe-upgrade
  3. Reboot because of kernel upgrade
  4. Figure out what the extra hard drive is (mine is sdb):
    sudo fdisk -l
  5. Partition the hard drive as Linux LVM:
    sudo fdisk /dev/sdb
  6. Initialize partition for use by LVM (on my system sdb1 is swap):
    sudo pvcreate /dev/sdb2
  7. Display attributes of volume groups to find your group name (mine is ubuntu-server):
    sudo vgdisplay
  8. Add my physical volume to my volume group:
    sudo vgextend ubuntu-server /dev/sdb2
  9. Now extend the logical volume root to include the new physical volume:
    sudo lvextend -L128G /dev/ubuntu-server/root
  10. Lastly, resize the filesystem to include the new free space:
    sudo resize2fs /dev/ubuntu-server/root
After reading the beginners guide posted above I was able to go through these steps and add extra storage without unmounting the root parition. This is one of the features of ext3, but I do not know whether you can do that with other filesystems. Now I am able to use both drives to the fullest extent and when I want to add another drive it will be quite easy.


PapaRaven said...

Thanks a lot - I figured out up to step 10. But nowhere were there concise instructions all in one place like this. I actually got started correctly, but winding it up was not at all clear. There's an "fsadm" bug which, for the life of me, seems to have been here for years, but hasn't been corrected. Who knew you could just run resize2fs w/o parameters other than the device? (!)

erik said...

Very concise and easy to follow. Thank you.

The only problem I had was with `sudo lvextend -L128G /dev/ubuntu-server/root`. I had trouble getting the size exactly right (not sure why). Looking at the lvextend manpage, I found that `sudo lvextend /dev/ubuntu-server/root /dev/sdb2` will simply add the size of the new disk to the existing volume, without any need to specify the exact size.

Mathew Peterson said...

After 2.5 years, this is still relevant and works!

Tomcat said...

Thanks Joe and Erik for your help. I had two RAID arrays 146 G and 900G ( on RAID 1 & 5) on my IBM server running Ubuntu 10.04. Your steps worked very well. Thanks Erik for the easy step as I got stuck there. This works on ext4 too.