устройство-сопоставитель: удалить ioctl на luks-xxxx не удалось: устройство или ресурс занят

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.

[РЕДАКТИРОВАТЬ] Я решил эту проблему, на этот раз, закрыв текстовый редактор с графическим интерфейсом, который не имел открытых файлов, но был запущен из папки на соответствующем устройстве. Таким образом, вопрос становится более конкретным: как определить, какое приложение удерживает устройство открытым?

Имейте в виду, что lsofэто, кажется, не представляет собой простое решение, потому что, как только устройство отключено, связанные с ним имена, которые lsofбольше не включают в себя имя отключенного устройства.

nobar
источник
Встречаясь с той же проблемой, но на CentOS. Нашел эту ссылку: krenel.org/… но я не показываю подключенное устройство
Lars Nordin
Кажется , очень похожи на это закрытое , как фиксированное сообщение об ошибке: bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar
Слово предупреждения: монтирование с помощью sudo, как показано здесь, может помешать нормальному извлечению с помощью файлового менеджера в пользовательском пространстве.
nobar

Ответы:

27

После двух лет борьбы с этим, я думаю, что наконец-то полностью взломал!

dmsetup ls дает вам необходимые данные:

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

тогда

sudo lsof |grep 252,1

Кажется, что это sudoможет быть критическим здесь - по крайней мере, в некоторых случаях.


Это должно дать вам информацию, необходимую для закрытия всех открытых файлов на устройстве, включая имена открытых файлов и идентификаторы процессов для приложений-нарушителей. Вы можете просто зайти в эти приложения и закрыть их, но подход грубой силы может выглядеть примерно так:

kill -9 (process ID)

После того, как вы закрыли все файлы, некоторые из инструментов командной строки, показанные в вопросе, могут понадобиться, чтобы закрыть существующее монтирование, прежде чем его можно будет снова открыть обычным образом.

nobar
источник
4
Обратите внимание на небольшой перевод требуется: (252:1)становится 252,1.
Нобар
12

Попробуйте остановить группу LVM до остановки шифра:

lvchange -a n [LVM_Group_name]

тогда

cryptsetup -v luksClose [LUKS_name]

Образец:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
Anonimo
источник
1
Используйте @ ответ nobar в первый (но попробовать , killпрежде чем kill -9). Однако мне не хватило решения @ nobar - кажется, что само ядро ​​открыло устройство из-за сопоставлений устройств LVM, - этот ответ разрешен.
Том Хейл
+1 В моем случае принятый ответ grepне нашел совпадений, но это сработало.
user000001
4

в следующий раз попробуй ленивый

umount -l /<folder>

Это работает для меня большую часть времени, особенно полезно с зависшими NFS-дисками.

s1mmel
источник
Я попробовал это, но не помогло решить проблему. Я предполагаю, что вы на самом деле не можете использовать LUKS поверх NFS, и это было всего лишь предложение «выстрелить в темноте».
Нобар
это была именно моя проблема, я забыл, что сначала мне нужно размонтировать подключенное хранилище: 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сообщается «Команда не выполнена».
Нобар
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
justfortherec
источник