mapowanie urządzeń: usunięcie ioctl na luks-xxxx nie powiodło się: Urządzenie lub zasób zajęte

28

Gdy byłem z dala od komputera, mój zaszyfrowany dysk USB został przypadkowo odmontowany (chociaż w tym czasie był fizycznie podłączony). Nie udało mi się odzyskać (nie próbowałem jeszcze restartu). Teraz całkowicie odłączyłem urządzenie, ale nadal próbuję usunąć „wiszące urządzenie lub zasób”, gdy próbuję usunąć wiszący wpis w / dev / mapper. Czy mogę ponownie podłączyć i zamontować dysk bez restartu?

Oto, co próbowałem (długa nazwa zmieniona na „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

Po ponownym podłączeniu urządzenia ...

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

[EDYCJA] Tym razem rozwiązałem problem, zamykając edytor tekstowy GUI, który nie miał otwartych plików, ale został uruchomiony z folderu na danym urządzeniu. Pytanie staje się więc bardziej szczegółowe: jak rozpoznać, która aplikacja utrzymuje urządzenie otwarte?

Należy pamiętać, że lsofnie wydaje się to łatwym rozwiązaniem, ponieważ po odłączeniu urządzenia powiązane nazwy dostarczone przez lsofnie zawierają już nazwy odłączonego urządzenia.

nobar
źródło
Występuje ten sam problem, ale w CentOS. Znalazłem ten link: krenel.org/…, ale nie pokazuję zamontowanego urządzenia
Lars Nordin
Wydaje się, że jest bardzo podobny do tego raportu o zamkniętych błędach: bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar
Słowo ostrzeżenia: Montowanie za pomocą sudo, jak pokazano tutaj, może uniemożliwić normalne wysuwanie przy użyciu menedżera plików w przestrzeni użytkownika.
nobar

Odpowiedzi:

27

Po dwóch latach walki z tym myślę, że w końcu całkowicie to złamałem!

dmsetup ls zapewnia potrzebne dane:

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

następnie

sudo lsof |grep 252,1

Wydaje się, że sudomoże mieć to kluczowe znaczenie - przynajmniej w niektórych przypadkach.


Powinno to dostarczyć informacji niezbędnych do zamknięcia wszystkich otwartych plików na urządzeniu - w tym nazw otwartych plików i identyfikatorów procesów dla szkodliwych aplikacji. Możesz po prostu przejść do tych aplikacji i zamknąć je, ale podejście brutalnej siły może wyglądać następująco:

kill -9 (process ID)

Po zamknięciu wszystkich plików niektóre narzędzia wiersza polecenia przedstawione w pytaniu mogą być konieczne w celu zamknięcia istniejącego montowania, zanim będzie można go ponownie otworzyć normalnie.

nobar
źródło
4
Zauważ, że wymagane (252:1)jest niewielkie tłumaczenie: staje się 252,1.
nobar
12

Spróbuj zatrzymać grupę LVM przed zatrzymaniem szyfru:

lvchange -a n [LVM_Group_name]

następnie

cryptsetup -v luksClose [LUKS_name]

Próba:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt
Anonimo
źródło
1
Zastosowanie @ odpowiedź nobar za pierwszy (ale spróbuj killzanim kill -9). Jednak rozwiązanie @ nobar nie było dla mnie wystarczające - wydaje się, że samo jądro miało otwarte urządzenie z powodu odwzorowań urządzeń LVM - które to rozwiązanie rozwiązało.
Tom Hale,
+1 W moim przypadku zaakceptowana odpowiedź grepnie znalazła żadnych dopasowań, ale zadziałało.
user000001
4

następnym razem spróbuj leniwego umounta

umount -l /<folder>

Działa to dla mnie przez większość czasu, szczególnie przydatne w przypadku zawieszonych dysków NFS.

s1mmel
źródło
Próbowałem tego, ale nie pomogłem w rozwiązaniu problemu. Zakładam, że tak naprawdę nie można używać LUKS w porównaniu z NFS, i że była to tylko propozycja strzelenia w ciemność.
nobar
to był dokładnie mój problem, zapomniałem, że najpierw muszę odmontować zmapowane miejsce do przechowywania: D
holms
2

Oto jak udało mi się rozwiązać ten problem w Linux Mint 17.3 (~ Ubuntu Trusty):

  1. usuń urządzenie z mapera urządzeń

    $ sudo dmsetup remove luks-xxyyzz
    
  2. zamapuj to z powrotem

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

Teraz urządzenia są dostępne.

Édouard Lopez
źródło
2
Ten post może być komuś pomocny, ale jak zauważono w pytaniu - czasami dmsetup removezgłasza „Polecenie nie powiodło się”.
nobar
0

Byłem w podobnej sytuacji, ale nie mogłem rozwiązać problemu przez usunięcie luks-xxxxurządzenia. Zamiast tego musiałem usunąć ubuntu--vg-root.

Moja sytuacja była następująca:

  • Przypadkowo usunąłem urządzenie, zanim zostało zablokowane.
  • Próba zablokowania lub usunięcia urządzenia Luks po tym, jak komunikat o błędzie jest zajęty .
  • Odblokowanie tego samego urządzenia nie powiodło się, ponieważ urządzenie o tej samej nazwie już istniało.
  • lsof nie pokazał żadnych otwartych uchwytów dla urządzenia.

Pomocne było odłączenie urządzenia fizycznego i usunięcie ubuntu--vg-rooturządzenia za pomocą następującego polecenia:

sudo dmsetup remove ubuntu--vg-root

W tym momencie byłem w stanie normalnie aktywować i odszyfrować urządzenie zewnętrzne za pomocą mojej zwykłej konfiguracji:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
justfortherec
źródło