Skip to main content

Removing VGs or LVs from LVM

While are many excellent tutorials about creating and using LVM on Linux, not may show you how you can remove disks from LVM Volume Groups (VG) and reclaim storage or how to remove a Logical Volume (LV) from your LVM set-up.

Here is what I did:
Use -t to TEST ANY LVM action first!
We are going to release 1 TB from LVM. The Volume group was extended with 1 TB storage to serve as a cheap NFS/CIFS file server when setting up our data center. It is now deprecated and replaced by a NAS so it's no longer needed.

1) check LVM; note the four 256 GB LUNs

[root@server ~]# pvscan -v
Wiping cache of LVM-capable devices
Wiping internal VG cache
Walking through all physical volumes
PV /dev/sdb1 VG vgdata lvm2 [50.00 GB / 0 free]
PV /dev/sdc1 VG vgdata lvm2 [256.00 GB / 0 free]
PV /dev/sdd1 VG vgdata lvm2 [256.00 GB / 0 free]
PV /dev/sde1 VG vgdata lvm2 [256.00 GB / 0 free]
PV /dev/sdf1 VG vgdata lvm2 [256.00 GB / 0 free]
PV /dev/sdg VG vgdata lvm2 [10.00 GB / 5.00 GB free]
PV /dev/sda3 VG system lvm2 [7.88 GB / 0 free]
Total: 7 [1.07 TB] / in use: 7 [1.07 TB] / in no VG: 0 [0 ]
[root@server ~]# vgscan -v
Wiping cache of LVM-capable devices
Wiping internal VG cache
Reading all physical volumes. This may take a while...
Finding all volume groups
Finding volume group "vgdata"
Found volume group "vgdata" using metadata type lvm2
Finding volume group "system"
Found volume group "system" using metadata type lvm2
[root@server ~]# lvscan -v
Finding all logical volumes
ACTIVE '/dev/vgdata/lvuln' [54.99 GB] inherit
ACTIVE '/dev/vgdata/lvshare' [1.00 TB] inherit
ACTIVE '/dev/system/root' [4.03 GB] inherit
ACTIVE '/dev/system/tmp' [1.84 GB] inherit
ACTIVE '/dev/system/var' [2.00 GB] inherit
[root@server ~]#


From the lvscan, we see that one separate Logical Volume (LV) lvshare was added to the VG vgdata and it holds the entire 1 TB.

2) check the Volume Group

[root@server ~]# vgdisplay /dev/vgdata
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 6
Metadata Sequence No 10
VG Access read/write
VG Status resizable
MAX LV 256
Cur LV 2
Open LV 1
Max PV 256
Cur PV 6
Act PV 6
VG Size 1.06 TB
PE Size 2.00 MB
Total PE 555002
Alloc PE / Size 552443 / 1.05 TB
Free PE / Size 2559 / 5.00 GB
VG UUID 30mFGo-gcFZ-Dmx2-atLC-Wh44-qGL4-MCfwia


The LVM is healthy; Note that vgdata is resizable, currently has 6 PVs associated with it, all of them in use; extends are 2 MB each and there are 550000 of them: that's 1 TB; currently 5 GB capacity is free

Since vgdata contains 2 separate LVs, we can remove the LV lvshare.

[root@server ~]# lvremove -t -v /dev/vgdata/lvshare
Test mode: Metadata will NOT be updated.
Using logical volume(s) on command line
Do you really want to remove active logical volume "lvshare"? [y/n]: y
Test mode: Skipping archiving of volume group.
Found volume group "vgdata"
Found volume group "vgdata"
Releasing logical volume "lvshare"
Test mode: Skipping volume group backup.
Logical volume "lvshare" successfully removed
Test mode: Wiping internal cache
Wiping internal VG cache
[root@server ~]# lvremove -v /dev/vgdata/lvshare
Using logical volume(s) on command line
Do you really want to remove active logical volume "lvshare"? [y/n]: y
Archiving volume group "vgdata" metadata (seqno 10).
Found volume group "vgdata"
Removing vgdata-lvshare (253:4)
Found volume group "vgdata"
Releasing logical volume "lvshare"
Creating volume group backup "/etc/lvm/backup/vgdata" (seqno 11).
Logical volume "lvshare" successfully removed
[root@server ~]#

We've now deallocated the LV lvshare from the VG vgdata.
We still need to disassociate the 4 LUNs (PVs) from the VG:

[root@server ~]# vgdisplay -v /dev/vgdata
Using volume group(s) on command line
Finding volume group "vgdata"
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 6
Metadata Sequence No 11
VG Access read/write
VG Status resizable
MAX LV 256
Cur LV 1
Open LV 1
Max PV 256
Cur PV 6
Act PV 6
VG Size 1.06 TB
PE Size 2.00 MB
Total PE 555002
Alloc PE / Size 28155 / 54.99 GB
Free PE / Size 526847 / 1.00 TB
VG UUID 30mFGo-gcFZ-Dmx2-atLC-Wh44-qGL4-MCfwia

--- Logical volume ---
LV Name /dev/vgdata/lvuln
VG Name vgdata
LV UUID xrPs1G-nKkd-0Mxp-JOfB-QYIk-zJKz-MwI2V5
LV Write Access read/write
LV Status available
# open 1
LV Size 54.99 GB
Current LE 28155
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3

--- Physical volumes ---
PV Name /dev/sdb1
PV UUID HkcRpz-mDRN-3SBC-Dtq3-f2tj-x8QA-J7slPT
PV Status allocatable
Total PE / Free PE 25599 / 4

PV Name /dev/sdc1
PV UUID WMYlf1-0LPe-yasi-jdeC-GVKl-hTeI-ttZzoC
PV Status allocatable
Total PE / Free PE 131071 / 131071

PV Name /dev/sdd1
PV UUID MsoDqY-uflF-Rw30-JEMK-tZ8k-VmB2-F2wBfK
PV Status allocatable
Total PE / Free PE 131071 / 131071

PV Name /dev/sde1
PV UUID e0c037-vSBy-ATdS-9Cd3-2X2p-yroz-2dBOD3
PV Status allocatable
Total PE / Free PE 131071 / 131071

PV Name /dev/sdf1
PV UUID ntIMPv-A8Vs-p7wk-KbP3-IsKk-1oMS-BJvZp5
PV Status allocatable
Total PE / Free PE 131071 / 131071

PV Name /dev/sdg
PV UUID v1mkgm-OvIW-RvS1-6Vnf-yvll-BSL1-wm3ZDw
PV Status allocatable
Total PE / Free PE 5119 / 2559

[root@server ~]# vgreduce -t -v /dev/vgdata /dev/sdc1
Test mode: Metadata will NOT be updated.
Finding volume group "vgdata"
Using physical volume(s) on command line
Test mode: Skipping archiving of volume group.
Removing "/dev/sdc1" from volume group "vgdata"
Test mode: Skipping volume group backup.
Removed "/dev/sdc1" from volume group "vgdata"
Test mode: Wiping internal cache
Wiping internal VG cache
[root@server ~]# vgreduce -a -t -v /dev/vgdata
Test mode: Metadata will NOT be updated.
Finding volume group "vgdata"
Using all physical volume(s) in volume group
Physical volume "/dev/sdb1" still in use
Test mode: Skipping archiving of volume group.
Removing "/dev/sdc1" from volume group "vgdata"
Test mode: Skipping volume group backup.
Removed "/dev/sdc1" from volume group "vgdata"
Test mode: Skipping archiving of volume group.
Removing "/dev/sdd1" from volume group "vgdata"
Test mode: Skipping volume group backup.
Removed "/dev/sdd1" from volume group "vgdata"
Test mode: Skipping archiving of volume group.
Removing "/dev/sde1" from volume group "vgdata"
Test mode: Skipping volume group backup.
Removed "/dev/sde1" from volume group "vgdata"
Test mode: Skipping archiving of volume group.
Removing "/dev/sdf1" from volume group "vgdata"
Test mode: Skipping volume group backup.
Removed "/dev/sdf1" from volume group "vgdata"
Physical volume "/dev/sdg" still in use
Test mode: Wiping internal cache
Wiping internal VG cache

Now for the real thing: we remove all unused PV from VG vgdata. Note how both sdb and sdg, both still in use by the LV lvuln, are skipped!

[root@server ~]# vgreduce -a -v /dev/vgdata
Finding volume group "vgdata"
Using all physical volume(s) in volume group
Physical volume "/dev/sdb1" still in use
Archiving volume group "vgdata" metadata (seqno 11).
Removing "/dev/sdc1" from volume group "vgdata"
Creating volume group backup "/etc/lvm/backup/vgdata" (seqno 12).
Removed "/dev/sdc1" from volume group "vgdata"
Archiving volume group "vgdata" metadata (seqno 12).
Removing "/dev/sdd1" from volume group "vgdata"
Wiping cache of LVM-capable devices
Creating volume group backup "/etc/lvm/backup/vgdata" (seqno 13).
Removed "/dev/sdd1" from volume group "vgdata"
Archiving volume group "vgdata" metadata (seqno 13).
Removing "/dev/sde1" from volume group "vgdata"
Wiping cache of LVM-capable devices
Creating volume group backup "/etc/lvm/backup/vgdata" (seqno 14).
Removed "/dev/sde1" from volume group "vgdata"
Archiving volume group "vgdata" metadata (seqno 14).
Removing "/dev/sdf1" from volume group "vgdata"
Wiping cache of LVM-capable devices
Creating volume group backup "/etc/lvm/backup/vgdata" (seqno 15).
Removed "/dev/sdf1" from volume group "vgdata"
Physical volume "/dev/sdg" still in use
[root@server ~]#

Check our status:

[root@server ~]# vgdisplay -v /dev/vgdata
Using volume group(s) on command line
Finding volume group "vgdata"
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 15
VG Access read/write
VG Status resizable
MAX LV 256
Cur LV 1
Open LV 1
Max PV 256
Cur PV 2
Act PV 2
VG Size 60.00 GB
PE Size 2.00 MB
Total PE 30718
Alloc PE / Size 28155 / 54.99 GB
Free PE / Size 2563 / 5.01 GB
VG UUID 30mFGo-gcFZ-Dmx2-atLC-Wh44-qGL4-MCfwia

--- Logical volume ---
LV Name /dev/vgdata/lvuln
VG Name vgdata
LV UUID xrPs1G-nKkd-0Mxp-JOfB-QYIk-zJKz-MwI2V5
LV Write Access read/write
LV Status available
# open 1
LV Size 54.99 GB
Current LE 28155
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3

--- Physical volumes ---
PV Name /dev/sdb1
PV UUID HkcRpz-mDRN-3SBC-Dtq3-f2tj-x8QA-J7slPT
PV Status allocatable
Total PE / Free PE 25599 / 4

PV Name /dev/sdg
PV UUID v1mkgm-OvIW-RvS1-6Vnf-yvll-BSL1-wm3ZDw
PV Status allocatable
Total PE / Free PE 5119 / 2559

[root@server ~]#

Note the new status of the Volume Group (VG):

  • resizable

  • only 2 PVs, both in use

  • 60 GB capacity, 5 GB free

  • a few extends left on sdb1 and 2500 on sdg. Since extends are 2 MB, that's 5 GB

Comments

Popular posts from this blog

Tuning the nscd name cache daemon

I've been playing a bit with the nscd now and want to share some tips related to tuning the nscd.conf file. To see how the DNS cache is doing, use nscd -g. nscd configuration: 0 server debug level 26m 57s server runtime 5 current number of threads 32 maximum number of threads 0 number of times clients had to wait yes paranoia mode enabled 3600 restart internal passwd cache: no cache is enabled [other zero output removed] group cache: no cache is enabled [other zero output removed] hosts cache: yes cache is enabled yes cache is persistent yes cache is shared 211 suggested size <==== 216064 total data pool size 1144 used data pool size 3600 seconds time to live for positive entries <==== 20 seconds time to live for negative entries

Preventing PuTTY timeouts

Just found a great tip to prevent timeouts of PuTTY sessions. I'm fine with timeouts by the host, but in our case the firewall kills sessions after 30 minutes of inactivity... When using PuTTY to ssh to your Linux/Unix servers, be sure to use the feature to send NULL packets to prevent a timeout. I've set it to once every 900 seconds, i.e. 15 minutes... See screenshot on the right.

Setting up SR-IOV in RHEL6 on PowerEdge servers

Dell Community : "RHEL 6 provides SR-IOV functionality on supported hardware which provides near native performance for virtualized guests. Single-Root I/O Virtualization (SR-IOV) specification, introduced by PCI-SIG details how a single PCIe device can be shared between various virtualization guests. Devices capable of SR-IOV functionality support multiple virtual functions on top of the physical function. Virtual Function is enabled in hardware as a light weight PCIe function. Operating System cannot discover this function as it does not respond to the PCI bus scan and requires support in the host’s driver. As in PCIe pass-through, a Virtual function of a SR-IOV capable card can be directly assigned to the guest operating system. A virtual function driver running in the guest manages this device."