我经常注意到
$ sudo lvcreate vg -L 10G
紧接着
$ sudo lvremove vg/<created volume>
我收到错误消息
无法删除打开的逻辑卷“...”
而
$ sudo lvs
显示该卷
lvol2 vg -wi-a- 10,00g
-
因此,在标志后面应该有一个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"
答案1
因此,除了 NFS、陈旧的 bash 进程和 udev 错误行为之外,还有另一种可能性,即在块设备上打开的分区。
kpartx -d /dev/vg1/lv1
lvdisplay
然后您可以验证# open 在输出中是否降至 0 。
答案2
看起来是lvm和udev的配合有问题。
在 上lvremove
,每个可用块设备都有udev
更改事件。它们的处理似乎扰乱了删除过程,导致删除失败。
解决方案是使用 停用要移除的 LV lvchange -an <given LV>
。在这种情况下,只会创建少量的“移除”事件,这是由于相关dm
设备被移除而导致的。
如果我lvremove
现在停用 LV,仍然会有很多 udev 更改事件,但它们不会影响要删除的 LV(因为它不再存在于 dm 中),因此它可以毫无问题地运行。
答案3
删除该 LV 的所有映射/dev/映射器/通过删除符号链接,然后您就可以删除它。
答案4
我在 OpenStack 安装中遇到了类似的问题。 lsof
没有显示任何内容,但dmsetup ls --tree
显示了依赖项/目标。 lvchange -an <given LV>
对我来说也没有用。删除/dev/dm-*
设备的符号链接也没有用
就我而言,我关闭了 OpenStack 服务,然后就能处理lvremove
这些难以处理的卷了。
这是一个实验性设置,我认为我可能最初为了解决其他问题而强制重启,从而导致了这个问题。