device-mapper: menghapus ioctl pada luks-xxxx gagal: Device atau resource resource

28

Ketika saya jauh dari komputer saya, USB drive terenkripsi saya entah bagaimana dilepas secara tidak sengaja (meskipun masih terhubung secara fisik pada saat itu). Saya belum dapat memulihkan (belum mencoba reboot). Saya sekarang telah memutus sepenuhnya perangkat, tetapi saya masih mendapatkan "Perangkat atau sumber daya sibuk" ketika saya mencoba untuk menghapus entri menggantung di / dev / mapper. Bisakah saya menyambung kembali dan memasang drive tanpa reboot?

Inilah yang saya coba (nama lama diubah menjadi "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

Setelah menghubungkan kembali perangkat ...

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

[EDIT] Saya memecahkan masalah, kali ini, dengan menutup editor teks GUI yang tidak memiliki file terbuka, tetapi telah diluncurkan dari folder pada perangkat yang dimaksud. Jadi pertanyaannya menjadi lebih spesifik: Bagaimana Anda bisa mengidentifikasi aplikasi mana yang membuat perangkat terbuka?

Ingatlah bahwa lsoftampaknya tidak menghadirkan solusi yang mudah karena, setelah perangkat terputus, nama-nama terkait yang disediakan oleh lsoftidak lagi menyertakan nama perangkat yang terputus.

bangsawan
sumber
Berlari ke masalah yang sama tetapi pada CentOS. Menemukan tautan ini: krenel.org/... tapi saya tidak menunjukkan perangkat terpasang
Lars Nordin
Tampak sangat mirip dengan laporan bug yang ditutup sebagai diperbaiki ini : bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar
Kata peringatan: Pemasangan dengan sudo, seperti yang ditunjukkan di sini, dapat mencegah Anda dari mengeluarkan normal-menggunakan file-manager-ruang pengguna.
nobar

Jawaban:

27

Setelah dua tahun berjuang dengan ini, saya pikir saya akhirnya sudah benar-benar memecahkannya!

dmsetup ls memberi Anda data yang Anda butuhkan:

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

kemudian

sudo lsof |grep 252,1

Tampaknya ini sudomungkin penting di sini - setidaknya dalam beberapa kasus.


Ini akan memberi Anda informasi yang diperlukan untuk menutup semua file yang terbuka pada perangkat - termasuk nama file yang terbuka dan ID proses untuk aplikasi yang melanggar. Anda mungkin dapat dengan mudah pergi ke aplikasi tersebut dan menutupnya, tetapi pendekatan brute force mungkin seperti:

kill -9 (process ID)

Setelah Anda menutup semua file, beberapa alat baris perintah yang ditunjukkan dalam pertanyaan mungkin diperlukan untuk menutup mount yang ada sebelum dapat dibuka kembali secara normal.

bangsawan
sumber
4
Perhatikan sedikit terjemahan yang diperlukan: (252:1)menjadi 252,1.
nobar
12

Cobalah untuk menghentikan grup LVM sebelum menghentikan kode sandi:

lvchange -a n [LVM_Group_name]

kemudian

cryptsetup -v luksClose [LUKS_name]

Mencicipi:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
Anonimo
sumber
1
Gunakan jawaban @ nobar dulu (tapi coba killsebelumnya kill -9). Namun solusi @ nobar tidak mencukupi bagi saya - tampaknya kernel itu sendiri membuka perangkat karena pemetaan perangkat LVM - yang diselesaikan oleh jawaban ini.
Tom Hale
+1 Dalam kasus saya, jawaban yang diterima greptidak menemukan kecocokan, tetapi ini berhasil.
user000001
4

lain kali coba umount yang malas

umount -l /<folder>

Ini berfungsi untuk saya sebagian besar kali, terutama berguna dengan NFS-drive yang terputus.

s1mmel
sumber
Saya mencoba ini, tetapi tidak membantu untuk masalah yang ada. Saya berasumsi bahwa Anda tidak dapat benar-benar menggunakan LUKS di atas NFS, dan bahwa ini hanyalah saran yang tepat.
Nobar
ini persis masalah saya, saya lupa bahwa saya harus meng-unmount penyimpanan yang dipetakan terlebih dahulu: D
holms
2

Inilah cara saya mengatasi masalah ini di Linux Mint 17.3 (~ Ubuntu Trusty):

  1. hapus perangkat dari device-mapper

    $ sudo dmsetup remove luks-xxyyzz
    
  2. petakan kembali

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

Sekarang perangkat dapat diakses.

Édouard Lopez
sumber
2
Posting ini mungkin bermanfaat bagi seseorang, tetapi sebagaimana dicatat dalam pertanyaan - terkadang dmsetup removemelaporkan "Perintah gagal".
Nobar
0

Saya berada dalam situasi yang sama tetapi tidak dapat menyelesaikan masalah dengan menghapus luks-xxxxperangkat. Sebaliknya saya harus menghapus ubuntu--vg-root.

Situasi saya adalah:

  • Saya tidak sengaja melepas perangkat sebelum terkunci.
  • Mencoba untuk mengunci atau menghapus perangkat luks setelah fakta gagal dengan pesan kesalahan yang sibuk .
  • Membuka kunci perangkat yang sama gagal karena perangkat dengan nama yang sama sudah ada.
  • lsof tidak menunjukkan pegangan terbuka untuk perangkat.

Apa yang membantu adalah mencabut perangkat fisik dan menghapus ubuntu--vg-rootperangkat dengan perintah berikut:

sudo dmsetup remove ubuntu--vg-root

Pada titik itu saya dapat mengaktifkan dan mendekripsi perangkat eksternal secara normal dengan pengaturan yang biasa:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
justfortherec
sumber