我经常注意到在一个
$ sudo lvcreate vg -L 10G
Run Code Online (Sandbox Code Playgroud)
紧接着是一个
$ sudo lvremove vg/<created volume>
Run Code Online (Sandbox Code Playgroud)
我收到错误消息
无法删除打开的逻辑卷“...”
而一个
$ sudo lvs
Run Code Online (Sandbox Code Playgroud)
给我看那个音量
lvol2 vg -wi-a- 10,00g
Run Code Online (Sandbox Code Playgroud)
-之后有一个 os a,o如果卷真的打开了,那里应该有一个。一段时间后,删除工作。
为什么会这样?我怎样才能让它立即工作?
编辑:以下没有导致有用的东西:
$ sudo rm /dev/mapper/vg-lvol24
$ sudo lvremove /dev/vg/lvol24
Can't remove open logical volume "lvol24"
$ sudo lvs vg/lvol24
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lvol24 vg -wi-a- 10,00g
$ sudo lvremove /dev/vg/lvol24
Can't remove open logical volume "lvol24"
Run Code Online (Sandbox Code Playgroud)
小智 6
因此,除了 NFS、陈旧的 bash 进程和 udev 不当行为之外,还有另一种可能性,即在块设备上打开了分区。
kpartx -d /dev/vg1/lv1
然后您可以验证 # open 在lvdisplay的输出中下降到 0 。
看来是lvm和udev的配合有问题。
在 a 上lvremove,udev每个可用的块设备都有更改事件。他们的处理似乎干扰了删除过程,并且删除失败。
解决方案是停用要删除的 LV(s)lvchange -an <given LV>。在这种情况下,只会创建少数“删除”事件,这是由于关联的dm设备被删除而导致的。
如果我lvremove现在停用的 LV,仍然有很多 udev 更改事件,但它们不会影响要删除的 LV(因为它不再存在于 dm 中),因此它可以正常工作。