How can I resize logical volume to fit filesystem automagically?


To increase the size of a filesystem you must first grow the logical volume container and then increase the size of the filesystem within. When decreasing the size of a filesystem, shrinking the surrounding logical volume is done last.

A shorthand way of expanding a logical volume and the filesystem is contains can be achieved using lvextend with the --resizefs option. For example, assume that you have a logical volume of 1000 extents that you want to grow to 1600 and then expand the filesystem within; do:

lvextend -l 1600 --resizefs /dev/vg01/lvol1

This increases the logical volume size to a total of 1600 extents and then grows the filesystem associated with it. There is no need to unmount the filesystem to perform this operation.

In order to shrink the size of a filesystem, you must first unmount it and fsck it. Then, reduce the size of the filesystem first, followed by shrinking the size of the surrounding logical volume container. Use tune2fs to ascertain the "Block size" of the filesystem. Multiply the block size value by the number of physical extents you want the final logical volume to contain, and use that product as the argument to resize2fs. For example if the block size is 4096 and the final number of physical extents you want in your logical volume is 1200, then the product is 4915200 (blocks). Hence:

umount /myfs
e2fsck -f /dev/vg01/lvol1
resize2fs /dev/vg001/lvol1 4915200
lvreduce -l 1200 /dev/vg01/lvol1
[ respond "y" when asked if you really want to reduce it ]

JRFerguson provided a great answer. I think the OP was looking for something like this:

lvextend -l+100%FREE /dev/path/to/your/logical/volume

It's convenient to be able to refer to the available space in relative terms than calculating the number of blocks by hand. For more information, you can check out the man page for lvextend or any of the other lvm2 commands.


Another, slower, option for reducing:

  1. Resize filesystem smaller than intended (but still large enough to contain existing data)

sudo resize2fs /dev/mapper/LVM--vg-root 19G

  1. Reduce lv to intended size

sudo lvreduce -L 20G /dev/mapper/LVM--vg-root

  1. Then extend filesystem to fill avaliable space

sudo resize2fs /dev/mapper/LVM--vg-root

EDIT Just did this myself and the final resize took less than a second so may not be slower after all


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.