设备映射器:在luks-xxxx上删除ioctl失败:设备或资源繁忙


28

当我不在电脑旁时,我的加密USB驱动器意外地被卸载了(尽管当时它仍然处于物理连接状态)。我还无法恢复(尚未尝试重新启动)。现在,我已经完全断开了设备的连接,但是当我尝试删除/ dev / mapper中的悬空条目时,仍然显示“设备或资源繁忙”。是否可以不重新启动就重新连接并安装驱动器?

这是我尝试过的方法(长名称更改为“ xxxxx”)...

$ sudo dmsetup ls
luks-xxxxx (252:1)
luks-yyyyy (252:0)

$ sudo umount /dev/mapper/luks-xxxxx
umount: /dev/mapper/luks-xxxxx: not mounted

$ sudo fuser --kill /dev/mapper/luks-xxxxx
$ echo $?
1

$ sudo dmsetup info -c luks-xxxxx
Name       Maj Min Stat Open Targ Event  UUID
luks-xxxxx 252   1 L--w    1    1      0 CRYPT-LUKS1-xxxxx-luks-xxxxx

$ sudo dmsetup remove luks-xxxxx
device-mapper: remove ioctl on luks-xxxx failed: Device or resource busy
Command failed

重新连接设备后...

$ sudo cryptsetup luksOpen "/dev/sde1" "luks-xxxxx"
Device luks-xxxxx already exists.

[编辑]这次,我关闭了一个GUI文本编辑器,该文件没有打开的文件,但已从有问题的设备上的文件夹中启动,从而解决了该问题。因此问题变得更加具体:如何确定哪个应用程序使设备处于打开状态?

请记住,这lsof似乎并不是一个简单的解决方案,因为一旦断开设备的连接,所提供的关联名称将lsof不再包括断开连接的设备的名称。


在CentOS上遇到相同的问题。找到了此链接:krenel.org/… 但是我没有显示已安装的设备
Lars Nordin

似乎与此已修复的固定错误报告非常相似:bugs.debian.org/cgi-bin/bugreport.cgi?
nobar

警告词:如此处所示,使用sudo进行安装可能会阻止您使用用户空间文件管理器正常弹出。
nobar

Answers:


27

经过两年的努力,我认为我终于彻底破解了!

dmsetup ls 为您提供所需的数据:

$ sudo dmsetup ls
luks-xxxxx (252:1)

然后

sudo lsof |grep 252,1

似乎sudo在这里很关键-至少在某些情况下。


这应该为您提供关闭设备上所有打开的文件所需的信息-包括打开文件的名称和有问题的应用程序的进程ID。您也许可以简单地转到这些应用程序并关闭它们,但是强行方法可能类似于:

kill -9 (process ID)

关闭所有文件后,可能需要使用问题中所示的某些命令行工具,才能关闭现有的安装座,然后才能正常重新打开它。


4
请注意所需的轻微翻译:(252:1)变成252,1
nobar

12

尝试在停止密码之前停止LVM组:

lvchange -a n [LVM_Group_name]

然后

cryptsetup -v luksClose [LUKS_name]

样品:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt

1
使用@ nobar的回答第一(但尝试kill之前kill -9)。但是@nobar的解决方案对我来说还不够-似乎由于LVM设备映射,内核本身已打开设备-该问题解决了。
汤姆·黑尔

+1在我的情况下,被接受的答案grep没有找到任何匹配项,但这确实可行。
user000001

4

下次尝试一次懒惰的卸载

umount -l /<folder>

在大多数情况下,这对我有用,对挂起的NFS驱动器尤其有用。


我尝试过此方法,但没有解决当前的问题。我假设您实际上不能在NFS上使用LUKS,并且这只是一个黑暗的建议。
nobar

这正是我的问题,我忘记了我需要先卸载映射存储:D
holms

2

这是我如何在Linux Mint 17.3(〜Ubuntu Trusty)上解决此问题的方法:

  1. 从设备映射器中删除设备

    $ sudo dmsetup remove luks-xxyyzz
    
  2. 映射回去

    $ sudo cryptsetup open /dev/sdc1 luks-xxyyzz
    Enter passphrase for /dev/sdc1:
    

现在可以访问设备了。


2
这篇文章可能对某人有所帮助,但正如问题所指出的那样-有时dmsetup remove报告“命令失败”。
nobar

0

我处于类似情况,但无法通过卸下luks-xxxx设备来解决问题。相反,我不得不删除ubuntu--vg-root

我的情况是:

  • 在设备锁定之前,我不小心卸下了该设备。
  • 事实失败并显示繁忙的错误消息后,尝试锁定或移除luks设备。
  • 解锁同一设备失败,因为已经存在具有相同名称的设备。
  • lsof 没有显示设备的任何打开手柄。

这样做的帮助是ubuntu--vg-root使用以下命令来拔出物理设备并删除该设备:

sudo dmsetup remove ubuntu--vg-root

那时,我可以使用通常的设置再次正常激活并解密外部设备:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.