How to resize a logical volume and a reiserfs or ext3 filesystem
Gather information
Type df -h to list the filesystem we would like to increase.
Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LVROOT 4.0G 3.4G 480M 90% /
We would like to increase the root filesystem by 500M so we need to determine if the volume group (VolGroup00) listed above has enough free space.
To do this type vgdisplay
--- Volume group --- VG Name VolGroup00 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 5 Open LV 5 Max PV 0 Cur PV 1 Act PV 1 VG Size 136.42 GB PE Size 4.00 MB Total PE 34924 Alloc PE / Size 5760 / 22.50 GB Free PE / Size 29164 / 113.92 GB VG UUID efvr7g-grgf5g-V0SP-45gdf-Xber-VKzj-fg5hf
The "Free PE / Size 29164 / 113.92 GB" line shows that we have 113.92 GB free in this volume group.
Type lvdisplay to show additional information about the logical volumes on the server.
--- Logical volume --- LV Name /dev/VolGroup00/LVROOT VG Name VolGroup00 LV UUID fdsff5-Ma8z-8rr3-5ytgb-fht7-N37h-465yhh LV Write Access read/write LV Status available # open 1 LV Size 4.00 GB Current LE 1152 Segments 2 Allocation inherit Read ahead sectors 0 Block device 253:0
Increase logical volume size
In this case we have identified /dev/VolGroup00/LVROOT as being the logical volume to be modified
The current size of the /dev/VolGroup00/LVROOT logical volume is 4G and we need to increase the size to 4.5G
The first step is to increase the logical volume and the second step to increase the filesystem
To increase the logical volume size use the lvextend command as follows
lvextend -L 4.5G /dev/VolGroup00/LVROOT
Increase the filesystem size
Then to increase the size of the filesystem to equal the new size of the LV, do one of the following depending on whether you have an reiserfs or ext3 filesystem.
To check what filesystems you are using type mount
/dev/mapper/VolGroup00-LVROOT on / type ext3 (rw)
We can see in this case we are using the ext3 filesystem
Reiserfs
resize_reiserfs /dev/VolGroup00/LVROOT
ext3
ext2online -d -v /dev/VolGroup00/LVROOT
or
resize2fs -p /dev/VolGroup00/LVROOT
Type df -k and lvdisplay to check that all is as expected
Decrease the filesystem size
ext3
We would like to decrease the size of the /home filesystem by 2GB.
First check the current size.
[root@linux1 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_linux1-lv_root 50G 4.8G 42G 11% / tmpfs 1002M 88K 1002M 1% /dev/shm /dev/sda1 485M 29M 431M 7% /boot /dev/mapper/vg_linux1-lv_home 20G 217M 19G 2% /home
Then resize the filesystem before resizing the LV to prevent data loss, however it is still important to backup the fileystem first.
Then try to reduce the size of the /home filesystem as follows.
[root@linux1 /]# resize2fs -p /dev/vg_linux1/lv_home 18G resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vg_linux1/lv_home is mounted on /home; on-line resizing required On-line shrinking from 5267456 to 4718592 not supported.
This shows that the filesystem needs to be unmounted first.
[root@linux1 /]# umount /home
Ok lets try again.
[root@linux1 /]# resize2fs -p /dev/vg_linux1/lv_home 18G resize2fs 1.41.12 (17-May-2010) Please run 'e2fsck -f /dev/vg_linux1/lv_home' first.
We are still unable to shrink the filesystem until we run the filesystem checker e2fsck
[root@linux1 /]# e2fsck -f /dev/vg_linux1/lv_home e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vg_linux1/lv_home: 212/1318912 files (2.8% non-contiguous), 138179/5267456 blocks
Ok lets have another go.
[root@linux1 /]# resize2fs -p /dev/vg_linux1/lv_home 18G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/vg_linux1/lv_home to 4718592 (4k) blocks. Begin pass 3 (max = 161) Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX The filesystem on /dev/vg_linux1/lv_home is now 4718592 blocks long.
Success!
Lets take a look.
[root@linux1 /]# mount /home [root@linux1 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_linux1-lv_root 50G 4.8G 42G 11% / tmpfs 1002M 88K 1002M 1% /dev/shm /dev/sda1 485M 29M 431M 7% /boot /dev/mapper/vg_linux1-lv_home 18G 217M 17G 2% /home
reiserfs
The following procedure will shrink the reiserfs filesystem mounted on /logs from 20G to 10G
[root@linux1 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/system-logs 20G 33M 20G 1% /logs
[root@linux1 /]# mount /dev/mapper/system-logs on /logs type reiserfs (rw,acl,user_xattr) [root@linux1 /]# umount /logs [root@linux1 /]# resize_reiserfs -s -10G /dev/system/logs [root@linux1 /]# mount /dev/system/logs /logs
Decrease the LV size
Ok we just need to reduce the size of the LV now.
[root@linux1 /]# lvreduce -L 18G /dev/vg_linux1/lv_home WARNING: Reducing active logical volume to 18.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv_home? [y/n]: y Reducing logical volume lv_home to 18.00 GiB Logical volume lv_home successfully resized