device-mapper: eliminar ioctl en luks-xxxx failed: dispositivo o recurso ocupado

23

Mientras estaba fuera de mi computadora, mi unidad USB encriptada fue desmontada accidentalmente de alguna manera (aunque todavía estaba físicamente conectada en ese momento). No he podido recuperar (aún no he intentado reiniciar). Ahora he desconectado por completo el dispositivo, pero sigo teniendo "Dispositivo o recurso ocupado" cuando intento eliminar la entrada colgante en / dev / mapper. ¿Puedo volver a conectar y montar la unidad sin un reinicio?

Esto es lo que intenté (el nombre largo cambió a "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

Después de volver a conectar el dispositivo ...

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

[EDIT] Resolví el problema, esta vez, al cerrar un editor de texto GUI que no tenía archivos abiertos, pero que se había lanzado desde una carpeta en el dispositivo en cuestión. Entonces, la pregunta se vuelve más específica: ¿cómo se puede identificar qué aplicación mantiene el dispositivo abierto?

Tenga en cuenta que lsof no parece presentar una solución fácil porque, una vez que se desconecta el dispositivo, los nombres asociados proporcionados por lsof ya no incluyen el nombre del dispositivo desconectado.

    
pregunta nobar 05.03.2014 - 01:55

5 respuestas

19

¡Después de dos años de pelear con esto, creo que finalmente lo he descifrado por completo!

dmsetup ls le proporciona los datos que necesita:

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

luego

sudo lsof |grep 252,1

Parece que sudo puede ser crítico aquí, al menos en algunos casos.

Esto debería proporcionarle la información necesaria para cerrar todos los archivos abiertos en el dispositivo, incluidos los nombres de los archivos abiertos y los ID de proceso para las aplicaciones ofensivas. Puede ir simplemente a esas aplicaciones y cerrarlas, pero un enfoque de fuerza bruta podría ser algo así como:

kill -9 (process ID)

Una vez que haya cerrado todos los archivos, algunas de las herramientas de línea de comandos que se muestran en la pregunta pueden ser necesarias para cerrar el montaje existente antes de que pueda volver a abrirse normalmente.

    
respondido por el nobar 06.10.2015 - 05:48
8

Intenta detener al grupo LVM antes de detener el cifrado:

lvchange -a n [LVM_Group_name]

luego

cryptsetup -v luksClose [LUKS_name]

Muestra:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
    
respondido por el Anonimo 09.05.2016 - 10:32
3

la próxima vez prueba un desmontaje lento

umount -l /<folder>

Esto funciona para mí la mayoría de las veces, especialmente útil con unidades NFS colgadas.

    
respondido por el s1mmel 27.03.2015 - 16:05
2

Así es como logro resolver este problema en Linux Mint 17.3 (~ Ubuntu Trusty):

  1. eliminar el dispositivo del dispositivo-mapeador

    $ sudo dmsetup remove luks-xxyyzz
    
  2. mapearlo

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

Ahora se puede acceder a los dispositivos.

    
respondido por el Édouard Lopez 27.12.2015 - 18:33
0

Estaba en una situación similar pero no pude resolver el problema eliminando el dispositivo luks-xxxx . En cambio, tuve que eliminar ubuntu--vg-root .

Mi situación era:

  • Quité accidentalmente el dispositivo antes de que se bloqueara.
  • Intentando bloquear o eliminar el dispositivo luks después de que el hecho fallara con un mensaje de error ocupado .
  • Se produjo un error al desbloquear el mismo dispositivo porque ya existía un dispositivo con el mismo nombre.
  • lsof no mostró ningún controlador abierto para el dispositivo.

Lo que sí me ayudó fue desconectar el dispositivo físico y eliminar el dispositivo ubuntu--vg-root con el siguiente comando:

sudo dmsetup remove ubuntu--vg-root

En ese momento pude activar y descifrar normalmente el dispositivo externo nuevamente con mi configuración habitual:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
    
respondido por el justfortherec 20.04.2018 - 13:46

Lea otras preguntas en las etiquetas