在运行 Debian Stretch 的 Xen 4.8 虚拟机管理程序上,我正在尝试删除不再使用的 domU 的逻辑卷。
我停止了 domU 并成功删除了交换文件的逻辑卷。
但是,当尝试删除主磁盘的逻辑卷时,出现错误:
Logical volume xen3-vg/vmXX-disk in use.
由于我需要虚拟机管理程序上的其他 domU 的磁盘空间,因此我成功地将逻辑卷大小调整为 4 MB。
为了清楚知道需要删除哪个逻辑卷,我将逻辑卷重命名为“xen3-vg/deleteme”。
尽管如此:
> lvremove -vf /dev/xen3-vg/deleteme
返回:
Logical volume xen3-vg/deleteme in use.
经过搜索,我尝试了以下所有方法,但都无济于事。
> lvdisplay
--- Logical volume ---
LV Path /dev/xen3-vg/deleteme
LV Name deleteme
VG Name xen3-vg
LV UUID iL2tB4-4tjc-0dlj-ibBX-nQup-oZsX-g81XXO
LV Write Access read/write
LV Creation host, time xen3, 2017-01-04 07:16:26 +0100
LV Status available
# open 1
LV Size 4.00 MiB
Current LE 1
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:7
> dmsetup info -c | grep deleteme
xen3--vg-deleteme 254 7 L--w 1 1 3 LVM-aAW4aSeLjqJPPWlF1s1WxAgzeXAjWmXiiL2tB44tjc0dljibBXnQupoZsXg81XXO
> lvchange -an -v /dev/xen3-vg/deleteme
Logical volume xen3-vg/deleteme in use.
> lvremove -vf /dev/xen3-vg/deleteme
Logical volume xen3-vg/deleteme in use.
> umount /dev/xen3-vg/deleteme
umount: /dev/xen3-vg/deleteme: not mounted
> lsof | grep "254,7"
[no output]
> lsof | grep deleteme
[no output]
> fuser /dev/xen3-vg/deleteme
[no output]
如果有人能提供有关如何删除 xen3-vg/deleteme 的建议,我会非常高兴。
重新启动虚拟机管理程序是最后一个选项(在办公时间之外执行),但我宁愿不重新启动。
先感谢您。
谢谢布兰登的建议。
按照以下说明操作http://naveen161089.blogspot.com/2014/03/forcefully-remove-lvm.html我尝试了以下操作:
> dmsetup ls
[..]
xen3--vg-deleteme (254:7)
[..]
> dmsetup info -c xen3--vg-deleteme
Name Maj Min Stat Open Targ Event UUID
xen3--vg-deleteme 254 7 L--w 1 1 3 LVM-aAW4aSeLjqJPPWlF1s1WxAgzeXAjWmXiiL2tB44tjc0dljibBXnQupoZsXg81XXO
> dmsetup remove xen3--vg-deleteme
device-mapper: remove ioctl on xen3--vg-deleteme failed: Device or resource busy
Command failed
> lvremove -f /dev/xen3-vg/deleteme
Logical volume xen3-vg/deleteme in use.
我已经按照以下说明操作:无法删除打开的逻辑卷正如我的原帖所述。
这两种方法都无法解决问题。
有人还有其他建议吗?
答案1
我认为主要的错误是在设备文件“/dev/xen3-vg/deleteme”上执行lsof
/ fuser
,而不是在挂载点(例如:“/mnt/myDataMount”)上执行/。
(这很具误导性,我也遇到过这种情况:但情况是一样的,就好像你想lsof
在“/dev/sda3”上运行一样——这是行不通的。但你可以lsof
在/mount/somedrive 上运行)
简而言之,步骤如下:
- 使用 # 在挂载点中搜索“LV 路径”,
mount |grep deleteme
其中“deleteme”代表 LV 名称。此示例输出类似“/my/mountpoint”的内容 lsof /my/mountpoint
找出哪个进程正在使用它- 终止进程(
kill -9 naggingprocess
)或停止服务(service something stop
) - 再检查(2.)
umount /dev/xen3-vg/deleteme
lvremove /dev/xen3-vg/deleteme
(或者lvremove -f
)
答案2
我忘记我已经将循环设备与 LV 关联了:
lrwxrwxrwx 1 root root 7 Feb 1 14:17 /dev/mapper/vg--main-test -> ../dm-8
#losetup -a
<snip>
/dev/loop7: [0005]:3088 (/dev/dm-8)
通过做:
#losetup -d /dev/loop7
然后我可以删除 LV
root@virtual3:/dev# lvremove vg-main/test
Do you really want to remove and DISCARD active logical volume vg-main/test? [y/n]: y
Logical volume "test" successfully removed
我知道这很愚蠢..但我花了半天时间才意识到。lsof 没有发现这个问题。
答案3
我遇到了同样的问题,并且已使用此命令修复了它。试试看。
kpartx -dv /dev/mapper/VG-XXX_rootimg
Then lvremove -f /dev/mapper/VG-XXX_rootimg
答案4
我遇到了类似的问题,有一个rsync
进程卡在使用快照,该快照已被延迟卸载。因此:
- 由于已被卸载,它没有显示在
mount
命令中。 - 由于 umount 是惰性的,因此打开文件的进程可以继续打开它。但是,它不再连接到挂载点 (/mnt/snapshot),因此我没有用 来结束它
lsof | grep snapshot
。 - 似乎是因为快照用完了所有分配的空间,I/O 被完全阻塞,rsync 一直处于等待状态,从而保持文件描述符打开,进而无法完成延迟卸载。
当然我当时并不知道这一点,但我碰巧尝试使用以下命令获取设备 ID lvdisplay
:
lvdisplay big/db_snapshot_20231004.0505 | grep Block.device
Block device 253:3
然后使用 lsof 搜索罪魁祸首:
lsof |grep 253,3
rsync 30508 root cwd DIR 253,3 4096 45059 /postgresql/14/main
rsync 30508 root 3r REG 253,3 1073741824 46124 /postgresql/14/main/base/16466/735757683.4
(顺便说一句,这些最终都不是有效的路径。)
因此,终止 rsync 进程后,lvremove
就成功了!