pvcreate错误 Can’t open exclusively. Mounted filesystem
背景
曾经使用过/dev/vdb设备创建过lvm pv,但是因为一些异常操作,导致pv丢失,pvs无法查看到对应的pv。
使用pvcreate命令重新创建pv报错:
# pvcreate /dev/vdb
Can't open /dev/vdb exclusively. Mounted filesystem?
Can't open /dev/vdb exclusively. Mounted filesystem?
定位
pvs命令,没有/dev/vdb对应的pv。
# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 klas lvm2 a-- <49.00g 0
但pvcreate提示有已mount的文件系统,但我们使用lvs命令,也并没有对应的回显。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root klas -wi-ao---- <46.00g
swap klas -wi-a----- 3.00g
然而,lsblk命令却能找到一些端倪。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 50G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 49G 0 part
├─klas-root 253:0 0 46G 0 lvm /
└─klas-swap 253:1 0 3G 0 lvm
vdb 252:16 0 50G 0 disk
├─lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679-real
│ 253:3 0 1G 0 lvm
│ ├─lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679 253:2 0 1G 0 lvm
│ └─lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f 253:5 0 1G 1 lvm
├─lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f-cow 253:4 0 1G 0 lvm
│ └─lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f 253:5 0 1G 1 lvm
如上所示,在异常之前,曾经通过/dev/vdb的pv创建了名为lvmvg的vg,并在此vg上创建了一些lv卷。
再次使用mount命令查看对应的lv卷,却没有查看到挂载信息。
# mount | grep lvmvg
ps:如果这里有mount的,需要先尝试umount掉。
解决方法
因为/dev/vdb曾经是lvm pv,这次异常之后,曾经的lv信息可能还存在于device mapper表中,那么需要先删除device mapper表中对应的项。
查看是否有对应的项。
如下所示,使用dmsetup table
命令可显示,lvmvg开始的就是残存的数据,和前面lsblk
命令的输出可以对应起来。
# dmsetup table
lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679-real: 0 2097152 linear 252:16 2048
lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679: 0 2097152 snapshot-origin 253:3
klas-swap: 0 6291456 linear 252:2 2048
klas-root: 0 96460800 linear 252:2 6293504
lvmvg-pvc--4c858851--1463--4426--a452--5c85b8a8ccef: 0 6291456 linear 252:16 6293504
lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f: 0 2097152 snapshot 253:3 253:4 P 8
lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f-cow: 0 2097152 linear 252:16 2099200
删除残存项
使用dmsetup remove
命令删除残存项。如下所示,有些残存项可能有先后顺序,如果不能删除,就先删除其他的,最后再来删除之前删除失败的即可。
# dmsetup remove lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679-real
device-mapper: remove ioctl on lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679-real failed: Device or resource busy
Complete cookie 0xd4dc12f success.
Command failed.
# dmsetup remove lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679
# dmsetup remove lvmvg-pvc--4c858851--1463--4426--a452--5c85b8a8ccef
# dmsetup remove lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f
# dmsetup remove lvmvg-0de5f0c6--9010--4ed6--b87f--40bf91d9928f-cow
# dmsetup remove lvmvg-pvc--1d3164d2--0a6d--468c--b037--a3ff03c88679-real
检查结果并验证
删除残存项之后,可使用lsblk
命令来查看,一切都干净了。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 50G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 49G 0 part
├─klas-root 253:0 0 46G 0 lvm /
└─klas-swap 253:1 0 3G 0 lvm
vdb 252:16 0 50G 0 disk
再次使用pvcreate
命令,创建成功。
# pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.