XFS LVM Grow CentOS7

This page describes how to increase the size of the various xfs LVM's on a CentOS7 desktop which uses LVM and xfs filesystems. In this case, I had purchased a laptop with a small 500Gb HDD and after I setup my complete CentOS system with source builds of LXC, OpenvSwitch and SCST, and had installed and confgured dynamic DNS/DHCP, I decided that I wanted to have (a) a copy of this fully-configured disk, and (b) have that copy on a much larger disk. So I found the largest 7mm laptop HD on Amazon which is a Seagate 5400 RPM 2Tb 7mm drive (granted a slow beast) and then I used Ubuntu install disk and booted into that Ubuntu disk to do a dd copy of the old disk to the new larger disk (example "dd if=/dev/sda of=/dev/sdb bs=128M").

After I was done with that, I put the new larger copy of the HDD into the original Lenovo ThinkPad P70 laptop and booted up with Gparted disk, and extended the 500Gb partition to the end of the 2Tb device giving me another 1.5 Tb or so of available space.

jNext boot up the laptop and now it's necessary to dole out that extra 1.5 Tb or so of space to the CentOS filesystem xfs filesystems in LV's, and that's what this guide is for to remind me how that was done when it's necessary to do that.

Here's an example of the kind of filesystem setup this guide covers as shown below.

[root@stlns01 ~]# df -TH

Filesystem Type Size Used Avail Use% Mounted on

/dev/mapper/centos-root xfs 54G 6.3G 48G 12% /

devtmpfs devtmpfs 34G 0 34G 0% /dev

tmpfs tmpfs 34G 164k 34G 1% /dev/shm

tmpfs tmpfs 34G 9.5M 34G 1% /run

tmpfs tmpfs 34G 0 34G 0% /sys/fs/cgroup

/dev/sda1 xfs 518M 226M 293M 44% /boot

/dev/mapper/centos-home xfs 438G 682M 437G 1% /home

tmpfs tmpfs 6.7G 13k 6.7G 1% /run/user/1000

[root@stlns01 ~]#

Extend the LV

Extend the LV as shown below. My reference for this was here.

[root@stlns01 ~]# lvextend -L60G /dev/centos/root

Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 60.00 GiB (15360 extents).

Logical volume root successfully resized.

[root@stlns01 ~]#

Recheck Filesystem Size

The filesystem should be the same size because it has not been grown yet even though the LV has already been extended.

[root@stlns01 ~]# df -TH

Filesystem Type Size Used Avail Use% Mounted on

/dev/mapper/centos-root xfs 54G 6.3G 48G 12% /

devtmpfs devtmpfs 34G 0 34G 0% /dev

tmpfs tmpfs 34G 164k 34G 1% /dev/shm

tmpfs tmpfs 34G 9.5M 34G 1% /run

tmpfs tmpfs 34G 0 34G 0% /sys/fs/cgroup

/dev/sda1 xfs 518M 226M 293M 44% /boot

/dev/mapper/centos-home xfs 438G 682M 437G 1% /home

tmpfs tmpfs 6.7G 13k 6.7G 1% /run/user/1000

[root@stlns01 ~]#

Grow the XFS Filesystem

[root@stlns01 ~]# xfs_growfs /

meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=3276800 blks

= sectsz=4096 attr=2, projid32bit=1

= crc=0 finobt=0

data = bsize=4096 blocks=13107200, imaxpct=25

= sunit=0 swidth=0 blks

naming =version 2 bsize=4096 ascii-ci=0 ftype=0

log =internal bsize=4096 blocks=6400, version=2

= sectsz=4096 sunit=1 blks, lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

data blocks changed from 13107200 to 15728640

[root@stlns01 ~]#

View the PV, VG and LV Information

Check the output of the following commands as shown below.

[root@stlns01 ~]# pvdisplay

--- Physical volume ---

PV Name /dev/sda2

VG Name centos

PV Size 1.82 TiB / not usable 3.00 MiB

Allocatable yes

PE Size 4.00 MiB

Total PE 476806

Free PE 355153

Allocated PE 121653

PV UUID gxYGbp-5QSG-v2gc-2W2P-fm74-P9bL-o0D02V

[root@stlns01 ~]# vgdisplay

--- Volume group ---

VG Name centos

System ID

Format lvm2

Metadata Areas 1

Metadata Sequence No 6

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 3

Open LV 3

Max PV 0

Cur PV 1

Act PV 1

VG Size 1.82 TiB

PE Size 4.00 MiB

Total PE 476806

Alloc PE / Size 121653 / 475.21 GiB

Free PE / Size 355153 / 1.35 TiB

VG UUID Pt0wBI-bQrK-uvlQ-KPp5-YlJd-7tUu-5nJfNt

[root@stlns01 ~]# lvdisplay

--- Logical volume ---

LV Path /dev/centos/root

LV Name root

VG Name centos

LV UUID KkLnrg-UeeS-BO6U-N5hA-3okg-gyNi-ftvQFH

LV Write Access read/write

LV Creation host, time localhost.localdomain, 2016-08-13 00:05:20 -0500

LV Status available

# open 1

LV Size 60.00 GiB

Current LE 15360

Segments 2

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:0

--- Logical volume ---

LV Path /dev/centos/home

LV Name home

VG Name centos

LV UUID pgn4Be-ZiGv-vaxh-bUz4-UVvP-H26m-wNcaeZ

LV Write Access read/write

LV Creation host, time localhost.localdomain, 2016-08-13 00:05:20 -0500

LV Status available

# open 1

LV Size 407.58 GiB

Current LE 104341

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:2

--- Logical volume ---

LV Path /dev/centos/swap

LV Name swap

VG Name centos

LV UUID re0udb-ePma-lYH2-P0ck-WBAz-OSCf-vp2pM1

LV Write Access read/write

LV Creation host, time localhost.localdomain, 2016-08-13 00:05:23 -0500

LV Status available

# open 2

LV Size 7.62 GiB

Current LE 1952

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:1

[root@stlns01 ~]#

That's all there was to it. Note that xfs filesystems cannot be "shrunk" in any straigtforward easy was like this as there is no shrink equivalent command for xfs filesystems similar to "xfs_growfs". Therefore, only growth is readily possible without much more involved measures.

Update 2019-04-05

There is a nice writeup on how to shrink an xfs filesystem here.