web-dev-qa-db-ja.com

device-mapper:luks-xxxxのioctlの削除に失敗しました:デバイスまたはリソースがビジーです

コンピューターから離れていたときに、暗号化されたUSBドライブが誤ってマウント解除されました(ただし、その時点ではまだ物理的に接続されていました)。回復できませんでした(まだ再起動していません)。デバイスを完全に切断しましたが、/ dev/mapperのダングリングエントリを削除しようとすると、「デバイスまたはリソースがビジー」というメッセージが表示されます。再起動せずにドライブを再接続してマウントできますか?

ここに私が試したものがあります(長い名前は「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

デバイスを再接続した後...

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

[編集]今回は、開いているファイルがなく、問題のデバイスのフォルダーから起動されていたGUIテキストエディターを閉じることで、問題を解決しました。質問はより具体的になります:どのアプリケーションがデバイスを開いたままにしているかを特定するにはどうすればよいですか?

デバイスが切断されると、lsofによって提供される関連名には切断されたデバイスの名前が含まれなくなるため、lsofは簡単な解決策を提示しないように注意してください。

28
nobar

これで2年間戦った後、私はついに完全にクラックしたと思います!

dmsetup lsは必要なデータを提供します:

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

それから

Sudo lsof |grep 252,1

ここではSudoが重要であると思われる-少なくともいくつかのケースでは。


これにより、デバイス上で開いているすべてのファイルを閉じるために必要な情報が表示されます。これには、開いているファイルの名前や、問題のあるアプリケーションのプロセスIDが含まれます。これらのアプリに簡単にアクセスして閉じることができますが、ブルートフォースアプローチは次のようになります。

kill -9 (process ID)

すべてのファイルを閉じたら、既存のマウントを通常の方法で再び開く前に閉じるために、質問に示されているコマンドラインツールのいくつかが必要になる場合があります。

27
nobar

暗号を停止する前にLVMグループを停止してみてください。

lvchange -a n [LVM_Group_name]

それから

cryptsetup -v luksClose [LUKS_name]

サンプル:

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

次回は怠uなマウントを試してください

umount -l /<folder>

これはほとんどの場合、私にとってはうまくいきます。特にハングアップしたNFSドライブで役立ちます。

4
s1mmel

Linux Mint 17.3(〜Ubuntu Trusty)でこの問題を解決する方法を次に示します。

  1. デバイスマッパーからデバイスを削除します

    $ Sudo dmsetup remove luks-xxyyzz
    
  2. それを地図に戻す

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

これで、デバイスにアクセスできます。

2
Édouard Lopez

私は同様の状況にありましたが、luks-xxxxデバイスを削除しても問題を解決できませんでした。代わりに、ubuntu--vg-rootを削除する必要がありました。

私の状況は:

  • ロックする前にデバイスを誤って取り外しました。
  • busyエラーメッセージでファクトが失敗した後にluksデバイスをロックまたは削除しようとしています。
  • 同じ名前のデバイスが既に存在するため、同じデバイスのロック解除に失敗しました。
  • lsofは、デバイスの開いているハンドルを表示しませんでした。

助けとなったのは、次のコマンドで物理デバイスを取り外し、ubuntu--vg-rootデバイスを削除することでした:

Sudo dmsetup remove ubuntu--vg-root

その時点で、通常のセットアップで外部デバイスを再びアクティブにして復号化することができました。

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