How to resize LVM logical volumes with ext4 as filesystem

Ever been in the situation where you needed to save some important files to a server and your greeted with “Not enough space left on device”-kind messages? No? Well, as that happened too often too me for my liking, I decided to do it right this time when I set up my home server and use logical volume manager (LVM) straight from the start. So basically, all I had to do was to shrink a filesystem that had free space in it and its partition (logical volume (LV) to be precisely) afterwards and then to resize the logical volume/filesystem where I needed the space.

As all the necessary tools are available normally on a system with LVM support, I could dive right in:

# Unmount the filesystem and check its' LV
umount /mnt/foo
e2fsck -f /dev/mapper/vg0-foo

# Shrink ext4 and then the LV to the desired size
resize2fs -p /dev/mapper/vg0-foo 40G
lvreduce -L 40G /dev/mapper/vg0-foo

# Before continuing, run e2fsck. If it bails because the partition
# is too small, don't panic! The LV can still be extended with
# lvextend until e2fsck succeeds, e.g.: 
# lvextend -L +1G /dev/mapper/vg0-foo
e2fsck -f /dev/mapper/vg0-foo

# Resize the filesystem to match the LVs size, check and mount it
resize2fs -p /dev/mapper/vg0-foo
e2fsck -f /dev/mapper/vg0-foo
mount /mnt/foo

That was the tricky part. The rest is pretty straight forward:

  • unmount the filesystem,
  • extend the logical volume and
  • expand the filesystem afterwards.
umount /mnt/bar

# Extend the LV to use all free space
lvextend -l +100%FREE /dev/mapper/vg0-bar
e2fsck -f /dev/mapper/vg0-bar

# Resize the partition to fill the LV
resize2fs -p /dev/mapper/vg0-bar
e2fsck -f /dev/mapper/vg0-bar
mount /mnt/bar


  1. This guide was really simple and really helpful. I used it to enlarge my / partition using the Ubuntu Rescue Mode. Thanks for the help!

  2. Thxs buddy…
    Try this link, very easy to understand

  3. Many thanks for this tips !!!

  4. Handy reference to do the exact thing I’m doing now.

    • mp
    • July 19th, 2011

    Steps 16/17 aren’t necessary if line 13 is successful no? Thx

    • Well that depends. If you _don’t_ want your partition to fill the LV completely, then yes, they are not necessary.

        • Steve Nordquist
        • August 31st, 2011

        That’s peculiar to LVM somehow measuring the closest size differently from ext4, actually; and it doesn’t explain all the fscking when ext4 can be resized live (subject to programs and scripts that freak right out at something as pedestrian now as volume/partition/lvm/filesystem/cloud changes. Are you hardness testing versus filesystem fuzzing?) I don’t even get a certificate of having defragged twice for all that wear ‘n tear down.

        Part 2’s lines 5 and 9 (fsck, as if lvm cared or resize2fs was inadequate,) are pure garbage (better than tainted garbage, but meh.)

    • mike
    • October 18th, 2011

    Steve Nordquist :

    Part 2′s lines 5 and 9 (fsck, as if lvm cared or resize2fs was inadequate,) are pure garbage (better than tainted garbage, but meh.)


    resize2fs (at least in some environments) forces you to do a fsck -f beforehand. The one after isn’t absolutely necessary, but as it’s EXT4 it’s a quick procedure and certainly isn’t going to hurt anything.

    • Dan
    • May 28th, 2013

    Thank you so much. Super painless.

  5. I think there is a small typo in your second command snippet:

    Should not this line

    # Extend the LV to use all free space
    lvextend -l +100%FREE /dev/mapper/vg0-bar

    be instead like this?

    lvextend -L +100%FREE /dev/mapper/vg0-bar

    • No, -l is just fine because I want the LV to use the remaining space and that is only possible with that parameter. From the man page: {-l|--extents
      [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] | -L|--size

    • NStorm
    • June 5th, 2014

    Why not just use lvreduce/lvextend with -r key, which auto-resizes fs to match new LV size?

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


Get every new post delivered to your Inbox.

%d bloggers like this: