device-mapper: rimozione di ioctl su luks-xxxx non riuscita: dispositivo o risorsa occupata


28

Mentre ero lontano dal mio computer, la mia unità USB crittografata è stata accidentalmente smontata in qualche modo (anche se al momento era ancora fisicamente collegata). Non sono stato in grado di ripristinare (non ho ancora provato a riavviare). Ora ho disconnesso completamente il dispositivo, ma ottengo ancora "Dispositivo o risorsa occupata" quando provo a rimuovere la voce sospesa in / dev / mapper. Posso riconnettere e montare l'unità senza riavviare?

Ecco cosa ho provato (il nome lungo è cambiato in "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

Dopo aver ricollegato il dispositivo ...

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

[EDIT] Questa volta ho risolto il problema chiudendo un editor di testo della GUI che non aveva file aperti, ma che era stato avviato da una cartella sul dispositivo in questione. Quindi la domanda diventa più specifica: come si può identificare quale applicazione tiene aperto il dispositivo?

Tieni presente che lsofnon sembra presentare una soluzione semplice perché, una volta disconnesso il dispositivo, i nomi associati forniti da lsofnon includono più il nome del dispositivo disconnesso.


Incontrare lo stesso problema ma su CentOS. Trovato questo link: krenel.org/… ma non mostro il dispositivo montato
Lars Nordin

Sembra straordinariamente simile a questo rapporto sui bug chiuso come risolto : bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar

Avvertenza: il montaggio con sudo, come mostrato qui, può impedire di espellere normalmente utilizzando il file manager dello spazio utente.
nobar,

Risposte:


27

Dopo due anni di combattimenti con questo, penso di averlo finalmente risolto completamente!

dmsetup ls ti dà i dati di cui hai bisogno:

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

poi

sudo lsof |grep 252,1

Sembra che sudoqui possa essere critico, almeno in alcuni casi.


Ciò dovrebbe fornire le informazioni necessarie per chiudere tutti i file aperti sul dispositivo, inclusi i nomi dei file aperti e gli ID di processo per le applicazioni offensive. Potresti semplicemente andare su quelle app e chiuderle, ma un approccio a forza bruta potrebbe essere qualcosa del tipo:

kill -9 (process ID)

Dopo aver chiuso tutti i file, alcuni degli strumenti da riga di comando mostrati nella domanda potrebbero essere necessari per chiudere il mount esistente prima che possa essere riaperto normalmente.


4
Si noti la leggera traduzione richiesta: (252:1)diventa 252,1.
nobar,

12

Prova a fermare il gruppo LVM prima di fermare il cifratore:

lvchange -a n [LVM_Group_name]

poi

cryptsetup -v luksClose [LUKS_name]

Campione:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt

1
Usa prima la risposta di @ nobar (ma prova killprima kill -9). Tuttavia la soluzione di @ nobar non era sufficiente per me - sembra che il kernel stesso avesse il dispositivo aperto a causa delle mappature del dispositivo LVM - che questa risposta ha risolto.
Tom Hale,

+1 Nel mio caso la risposta accettata grepnon ha trovato corrispondenze, ma ha funzionato.
user000001,

4

la prossima volta prova un pigro umount

umount -l /<folder>

Questo funziona per me la maggior parte delle volte, particolarmente utile con le unità NFS riattaccate.


Ho provato questo, ma non ho aiutato a risolvere il problema. Suppongo che in realtà non sia possibile utilizzare LUKS su NFS e che questo fosse solo un suggerimento sparato nel buio.
nobar

questo era esattamente il mio problema, ho dimenticato che per prima cosa ho bisogno di smontare l'archiviazione mappata: D
holms

2

Ecco come riesco a risolvere questo problema su Linux Mint 17.3 (~ Ubuntu Trusty):

  1. rimuovere il dispositivo da Device-Mapper

    $ sudo dmsetup remove luks-xxyyzz
    
  2. mappalo indietro

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

Ora i dispositivi sono accessibili.


2
Questo post potrebbe essere utile a qualcuno, ma come indicato nella domanda - a volte dmsetup removeriporta "Comando non riuscito".
nobar

0

Ero in una situazione simile ma non sono riuscito a risolvere il problema rimuovendo il luks-xxxxdispositivo. Invece ho dovuto rimuovere ubuntu--vg-root.

La mia situazione era:

  • Ho rimosso accidentalmente il dispositivo prima che fosse bloccato.
  • Tentativo di bloccare o rimuovere il dispositivo luks dopo che il fatto non è riuscito con un messaggio di errore occupato .
  • Sblocco dello stesso dispositivo non riuscito perché esisteva già un dispositivo con lo stesso nome.
  • lsof non ha mostrato alcun handle aperto per il dispositivo.

Ciò che ha aiutato è stato scollegare il dispositivo fisico e rimuovere il ubuntu--vg-rootdispositivo con il seguente comando:

sudo dmsetup remove ubuntu--vg-root

A quel punto sono stato in grado di attivare e decrittografare normalmente il dispositivo esterno con la mia solita configurazione:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.