web-dev-qa-db-fra.com

device-mapper: suppression d'ioctl sur luks-xxxx échoué: périphérique ou ressource occupé

Alors que j'étais loin de mon ordinateur, ma clé USB cryptée s'est démontée accidentellement (même si elle était encore physiquement connectée à l'époque). Je n'ai pas réussi à récupérer (je n'ai pas encore essayé de redémarrer). J'ai maintenant complètement déconnecté le périphérique, mais le message "Périphérique ou ressource occupé" persiste quand j'essaie de supprimer l'entrée suspendue dans/dev/mapper. Puis-je reconnecter et monter le lecteur sans redémarrer?

Voici ce que j'ai essayé (nom long changé en "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

Après avoir reconnecté l'appareil ...

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

[EDIT] J'ai résolu le problème, cette fois-ci, en fermant un éditeur de texte graphique qui n'avait aucun fichier ouvert, mais qui avait été lancé à partir d'un dossier situé sur le périphérique en question. La question devient alors plus spécifique: Comment pouvez-vous identifier quelle application maintient l'appareil ouvert?

N'oubliez pas que lsofne semble pas constituer une solution facile, car une fois le périphérique déconnecté, les noms associés fournis par lsofn'incluent plus le nom du périphérique déconnecté.

28
nobar

Après deux ans de lutte avec cela, je pense que je l'ai finalement complètement craqué!

dmsetup ls vous donne les données dont vous avez besoin:

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

puis

Sudo lsof |grep 252,1

Il semble que Sudo puisse être critique ici - du moins dans certains cas.


Cela devrait vous donner les informations nécessaires pour fermer tous les fichiers ouverts sur le périphérique, y compris les noms des fichiers ouverts et les ID de processus pour les applications incriminées. Vous pourrez peut-être simplement accéder à ces applications et les fermer, mais une approche basée sur la force brute pourrait ressembler à quelque chose comme:

kill -9 (process ID)

Une fois que vous avez fermé tous les fichiers, certains des outils de ligne de commande présentés dans la question peuvent être nécessaires pour fermer le montage existant avant qu'il ne puisse être rouvert normalement.

27
nobar

Essayez d’arrêter le groupe LVM avant d’arrêter le chiffrement:

lvchange -a n [LVM_Group_name]

puis

cryptsetup -v luksClose [LUKS_name]

Échantillon:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
11
Anonimo

la prochaine fois, essayez un umount paresseux

umount -l /<folder>

Cela fonctionne pour moi la plupart du temps, particulièrement utile avec les lecteurs NFS bloqués.

4
s1mmel

Voici comment je parviens à résoudre ce problème sous Linux Mint 17.3 (~ Ubuntu Trusty):

  1. retirer le périphérique de device-mapper

    $ Sudo dmsetup remove luks-xxyyzz
    
  2. cartographier

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

Maintenant, les appareils sont accessibles.

2
Édouard Lopez

J'étais dans une situation similaire mais je ne pouvais pas résoudre le problème en supprimant le périphérique luks-xxxx. Au lieu de cela, j'ai dû supprimer ubuntu--vg-root.

Ma situation était:

  • J'ai accidentellement retiré l'appareil avant qu'il ne soit verrouillé.
  • Essayer de verrouiller ou de retirer le périphérique luks après coup a échoué avec un message d'erreur occupé.
  • Le déverrouillage du même périphérique a échoué car un périphérique portant le même nom existait déjà.
  • lsof n'a montré aucun descripteur ouvert pour le périphérique.

Ce qui vous a aidé était de débrancher le périphérique physique et de supprimer le périphérique ubuntu--vg-root à l'aide de la commande suivante:

Sudo dmsetup remove ubuntu--vg-root

À ce stade, je pouvais normalement activer et déchiffrer le périphérique externe avec ma configuration habituelle:

udisksctl unlock -b /dev/sda3
Sudo lvchange --activate y ubuntu-vg/root
0
justfortherec