Geräte-Mapper: Entfernen von ioctl auf luks-xxxx fehlgeschlagen: Gerät oder Ressource belegt

28

Während ich nicht an meinem Computer war, wurde mein verschlüsseltes USB-Laufwerk versehentlich ausgehängt (obwohl es zu diesem Zeitpunkt noch physisch verbunden war). Ich konnte mich nicht erholen (habe noch keinen Neustart versucht). Ich habe das Gerät jetzt vollständig getrennt, erhalte jedoch weiterhin die Meldung "Gerät oder Ressource belegt", wenn ich versuche, den baumelnden Eintrag in / dev / mapper zu entfernen. Kann ich das Laufwerk ohne Neustart wieder anschließen und einbinden?

Folgendes habe ich ausprobiert (langer Name in "xxxxx" geändert) ...

$ 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

Nach dem erneuten Anschließen des Geräts ...

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

[BEARBEITEN] Dieses Mal habe ich das Problem gelöst, indem ich einen GUI-Texteditor geschlossen habe, der keine geöffneten Dateien enthielt, aber aus einem Ordner auf dem betreffenden Gerät gestartet wurde. Die Frage wird also spezifischer: Wie können Sie identifizieren, welche Anwendung das Gerät geöffnet hält?

Beachten Sie, dass lsofdies keine einfache Lösung zu sein scheint, da die von bereitgestellten lsofNamen nach dem Trennen des Geräts nicht mehr den Namen des getrennten Geräts enthalten.

kein Balken
quelle
Auf das gleiche Problem stoßen, aber auf CentOS. Fand diesen Link: krenel.org/… aber ich zeige nicht das Gerät montiert
Lars Nordin
Scheint diesem geschlossenen Fehlerbericht bemerkenswert ähnlich zu sein : bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar
Hinweis: Das Einhängen mit sudo, wie hier gezeigt, kann dazu führen, dass Sie den User-Space-Dateimanager nicht mehr normal verwenden können.
Nobar

Antworten:

27

Nach zwei Jahren, in denen ich damit gekämpft habe, denke ich, dass ich es endlich vollständig geknackt habe!

dmsetup ls gibt Ihnen die Daten, die Sie benötigen:

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

dann

sudo lsof |grep 252,1

Dies scheint sudohier - zumindest in einigen Fällen - kritisch zu sein.


Hier sollten Sie die Informationen erhalten, die zum Schließen aller geöffneten Dateien auf dem Gerät erforderlich sind - einschließlich der Namen der geöffneten Dateien und der Prozess-IDs für die betroffenen Anwendungen. Möglicherweise können Sie einfach zu diesen Apps gehen und sie schließen, aber ein Brute-Force-Ansatz könnte ungefähr so ​​aussehen:

kill -9 (process ID)

Nachdem Sie alle Dateien geschlossen haben, sind möglicherweise einige der in der Frage gezeigten Befehlszeilentools erforderlich, um das vorhandene Mount zu schließen, bevor es wieder normal geöffnet werden kann.

kein Balken
quelle
4
Beachten Sie die geringfügige Übersetzung erforderlich: (252:1)wird 252,1.
Nobar
12

Versuchen Sie, die LVM-Gruppe zu stoppen, bevor Sie cypher stoppen:

lvchange -a n [LVM_Group_name]

dann

cryptsetup -v luksClose [LUKS_name]

Probe:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
Anonimo
quelle
1
Verwenden Sie zuerst die Antwort von @ nobar (aber versuchen Sie es killvorher kill -9). Die Lösung von @nobar war jedoch für mich nicht ausreichend - es scheint, dass der Kernel selbst das Gerät aufgrund der LVM-Gerätezuordnungen geöffnet hatte - was durch diese Antwort behoben wurde.
Tom Hale
+1 In meinem Fall haben die akzeptierten Antworten grepkeine Übereinstimmungen gefunden, aber das hat funktioniert.
user000001
4

Versuchen Sie es beim nächsten Mal mit einem faulen umount

umount -l /<folder>

Das funktioniert bei mir meistens, besonders bei aufgehängten NFS-Laufwerken.

s1mmel
quelle
Ich habe es versucht, aber bei dem vorliegenden Problem nicht geholfen. Ich gehe davon aus, dass Sie LUKS nicht über NFS verwenden können, und dass dies nur ein "shot-in-the-dark" -Vorschlag war.
Nobar
das war genau mein Problem, ich habe vergessen , dass ich zum ersten Mal abgebildet Speicher aushängen müssen: D
Halligen
2

So gelingt es mir, dieses Problem unter Linux Mint 17.3 (~ Ubuntu Trusty) zu lösen:

  1. Entfernen Sie das Gerät aus dem Geräte-Mapper

    $ sudo dmsetup remove luks-xxyyzz
    
  2. map it back

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

Jetzt sind die Geräte erreichbar.

Édouard Lopez
quelle
2
Dieser Beitrag könnte für jemanden hilfreich sein, aber wie in der Frage vermerkt - dmsetup removemeldet manchmal "Befehl fehlgeschlagen".
Nobar
0

Ich befand mich in einer ähnlichen Situation, konnte das Problem jedoch nicht lösen, indem ich das luks-xxxxGerät entfernte. Stattdessen musste ich entfernen ubuntu--vg-root.

Meine Situation war:

  • Ich habe das Gerät versehentlich entfernt, bevor es gesperrt wurde.
  • Der Versuch, das luks-Gerät zu sperren oder zu entfernen, schlug mit einer Besetzt- Fehlermeldung fehl .
  • Das Entsperren desselben Geräts ist fehlgeschlagen, da bereits ein Gerät mit demselben Namen vorhanden war.
  • lsof zeigte keine offenen Griffe für das Gerät.

Was geholfen hat, war das physische Gerät zu entfernen und das ubuntu--vg-rootGerät mit dem folgenden Befehl zu entfernen :

sudo dmsetup remove ubuntu--vg-root

Zu diesem Zeitpunkt konnte ich das externe Gerät wie gewohnt aktivieren und entschlüsseln:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
justfortherec
quelle