tl;dr: use dmsetup remove
before trying lvremove
Note: Volume group and logical volume names have been substituted here. I’m not entirely sure it’s necessary, but better safe than sorry. If following this, please use the names of your volume group[s] and logical volume[s]
I am in the process of combining fileserver information, and so I have been touching parts of the system not usually looked at in the normal case of day-to-day operations. For some reason, on one of my logical volumes I had created a partition table and added a partition. Of course, that worked normally so there was no reason to be aware of this — clearly I had blanked the fact that I did it at all not long after doing so — until recently.
The Problem
Logical volume vg/lv-old is used by another device.
After copying the data over to a new logical volume, I wanted to remove the now-unnecessary original logical volume that contained the partition. Easy, right?
# lvremove -v /dev/vg/lv-old
DEGRADED MODE. Incomplete RAID LVs will be processed.
Using logical volume(s) on command line
Logical volume vg/lv-old is used by another device.
Okay, what’s using it? cat /proc/mounts
reports that it isn’t mounted. lsof
and fuser
return nothing. Maybe retrying the command will work*… nope.
There are a bunch of posts around this, mostly saying “make sure it is umounted first”, or “try using -f
with lvremove
“. And the old favourite: “a reboot fixed it”.
Find Out device-mapper’s Mapping
Well, the culprit in this case seemed to be device-mapper
creating a mapping which counted as ‘in-use’. Check for the mapping via:
# dmsetup info -c | grep old
vg-lv--old 253 9 L--w 1 2 1 LVM-6O3jLvI6ZR3fg6ZpMgTlkqAudvgkfphCyPcP8AwpU2H57VjVBNmFBpL
Tis8ia0NE
Find Out Mapped Device
Then use that to find out what is holding it:
$ ls -la /sys/dev/block/253\:9/holders
drwxr-xr-x 2 root root 0 Dec 12 01:07 .
drwxr-xr-x 8 root root 0 Dec 12 01:07 ..
lrwxrwxrwx 1 root root 0 Dec 12 01:07 dm-18 -> ../../dm-18
Remove Device (via `dmsetup remove`)
Then do a dmsetup remove
on that device-mapper
device:
# dmsetup remove /dev/dm-18
Retry `lvremove`
And you’re good to go with lvremove
:
# lvremove -v /dev/vgraid6/lv-old
DEGRADED MODE. Incomplete RAID LVs will be processed.
Using logical volume(s) on command line
Do you really want to remove active logical volume lv-old? [y/n]: y
Archiving volume group "vg" metadata (seqno 35).
Removing vg-lv--old (253:9)
Releasing logical volume "lv-old"
Creating volume group backup "/etc/lvm/backup/vg" (seqno 36).
Logical volume "lv-old" successfully removed
Bish bash bosh!
Addendum
*: I’m not sure of the thought process behind “just try it again”.
I’m reminded of a short bit of Darrell Hammond’s stand up (paraphrased):
“You know that message you get when you dial the wrong number that tells you to ‘check you have the right number and dial again’? Well, women will check the number and try again. Men will try the same number, but this time we’ll push the buttons a ******** harder…”
The design quality behind this stuff is absymal. Maybe the *code* is ok, but the *design* certainly is not.
I ended up at your post because I got the same error.
Had been using LVM cache on a SAS SSD and (luckily) have no other wish than to wipe the server prior to decomissioning. It is telling that you can’t even trust LVM enough to be able to wipe it.
zz:~# ls -la /sys/dev/block/252\:11/holders
total 0
drwx—— 2 root root 0 Jul 23 01:52 .
drwx—— 8 root root 0 Jul 23 01:42 ..
lrwxrwxrwx 1 root root 0 Jul 23 01:52 dm-55 -> ../../dm-55
lrwxrwxrwx 1 root root 0 Jul 23 01:52 dm-56 -> ../../dm-56
waxh0012:~# dmsetup remove dm-55
device-mapper: remove ioctl on dm-55 failed: No such device or address
Command failed
waxh0012:~# dmsetup remove dm-56
device-mapper: remove ioctl on dm-56 failed: No such device or address
Command failed
Great post. Thank you sir !
Thanks .. this worked.
Couldn’t figure out why I couldn’t get lvremove to work, thanks !
I found this helpful. Thank you!
Hi Daniel, glad you found it useful and thanks for letting us know ^_^
Thanks for the blog assist! Had an issue with a hanging luks device mapping that prevented the LV from being removed.
Hi Jamie, thanks for letting us know it works in the context of LUKS too!