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:
- Resize filesystem smaller than intended (but still large enough to contain existing data)
sudo resize2fs /dev/mapper/LVM--vg-root 19G
- Reduce lv to intended size
sudo lvreduce -L 20G /dev/mapper/LVM--vg-root
- 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