dispositivo-mapeador: eliminar ioctl en luks-xxxx falló: dispositivo o recurso ocupado

28

Mientras estaba lejos de mi computadora, mi unidad USB encriptada se desmontó accidentalmente de alguna manera (aunque todavía estaba físicamente conectada en ese momento). No he podido recuperarme (aún no he intentado reiniciar). Ahora he desconectado completamente 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 reiniciar?

Esto es lo que he intentado (nombre largo cambiado 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.

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

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

sin bar
fuente
Se encuentra con el mismo problema pero en CentOS. Encontré este enlace: krenel.org/… pero no muestro el dispositivo montado
Lars Nordin
Parece notablemente similar a este informe de error cerrado como corregido : bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar
Palabra de advertencia: montar con sudo, como se muestra aquí, puede evitar que lo expulse normalmente utilizando el administrador de archivos de espacio de usuario.
nobar

Respuestas:

27

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

dmsetup ls le brinda los datos que necesita:

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

luego

sudo lsof |grep 252,1

Parece que sudoaquí puede ser crítico, 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 las ID de proceso para las aplicaciones infractoras. Es posible que pueda simplemente ir a esas aplicaciones y cerrarlas, pero un enfoque de fuerza bruta podría ser algo 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 se pueda volver a abrir normalmente.

sin bar
fuente
44
Observe la ligera traducción requerida: se (252:1)convierte 252,1.
nobar
12

Intente detener el grupo LVM antes de detener cypher:

lvchange -a n [LVM_Group_name]

luego

cryptsetup -v luksClose [LUKS_name]

Muestra:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
Anónimo
fuente
1
Use la respuesta de @ nobar primero (pero intente killantes kill -9). Sin embargo, la solución de @ nobar no fue suficiente para mí, parece que el núcleo en sí tenía el dispositivo abierto debido a las asignaciones de dispositivos LVM, lo que resolvió esta respuesta.
Tom Hale
En mi caso, la respuesta aceptada grepno encontró coincidencias, pero funcionó.
user000001
4

la próxima vez intente un paseo perezoso

umount -l /<folder>

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

s1mmel
fuente
Intenté esto, pero no ayudó con el problema en cuestión. Supongo que en realidad no se puede usar LUKS sobre NFS, y que esto fue solo una sugerencia de tiro en la oscuridad.
nobar
este fue exactamente mi problema, olvidé que primero necesito desmontar el almacenamiento asignado: D
holms
2

Así es como me las arreglo para resolver este problema en Linux Mint 17.3 (~ Ubuntu Trusty):

  1. eliminar el dispositivo del mapeador de dispositivos

    $ sudo dmsetup remove luks-xxyyzz
    
  2. mapearlo de vuelta

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

Ahora los dispositivos son accesibles.

Édouard Lopez
fuente
2
Esta publicación puede ser útil para alguien, pero como se señaló en la pregunta, a veces dmsetup removeinforma "Error de comando".
nobar
0

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

Mi situacion fue:

  • Accidentalmente quité el dispositivo antes de que fuera bloqueado.
  • Intentando bloquear o eliminar el dispositivo luks después de que el hecho fallara con un mensaje de error ocupado .
  • El desbloqueo del mismo dispositivo falló porque ya existía un dispositivo con el mismo nombre.
  • lsof no mostró ningún controlador abierto para el dispositivo.

Lo que sí ayudó fue desconectar el dispositivo físico y eliminar el ubuntu--vg-rootdispositivo 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
justfortherec
fuente