пристрій-картограф: видалити ioctl на luks-xxxx не вдалося: пристрій чи ресурс зайнятий


28

Поки я був далеко від комп'ютера, зашифрований 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.

[EDIT] Цього разу я вирішив проблему, закривши текстовий редактор GUI, який не мав відкритих файлів, але був запущений із папки на відповідному пристрої. Тож питання стає більш конкретним: як можна визначити, яка програма тримає пристрій відкритим?

Майте на увазі, що lsofце, здається, не є простим рішенням, оскільки після відключення пристрою пов'язані імена, надані lsofне більше, не містять імені відключеного пристрою.


Натрапив на ту ж проблему, але на CentOS. Знайдено це посилання: krenel.org/… але я не показую, що пристрій встановлено
Ларс Нордін

Здається надзвичайно схожим на цей закритий звіт про помилку: bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar

Слово попередження: Монтаж із судо, як показано тут, може перешкодити нормальному вилученню за допомогою файлового менеджера простору користувачів.
nobar

Відповіді:


27

Після двох років боротьби з цим, я думаю, я остаточно зламав це повністю!

dmsetup ls надає потрібні вам дані:

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

потім

sudo lsof |grep 252,1

Здається, що тут sudoможе бути критично - принаймні в деяких випадках.


Це має надати вам інформацію, необхідну для закриття всіх відкритих файлів на пристрої, включаючи назви відкритих файлів та ідентифікаторів процесів для програм, які порушують правопорушення. Можливо, ви зможете просто перейти до цих програм і закрити їх, але грубий підхід може бути чимось на кшталт:

kill -9 (process ID)

Коли ви закриєте всі файли, деякі інструменти командного рядка, показані у питанні, можуть знадобитися для закриття існуючого кріплення, перш ніж воно може бути нормально відкрито.


4
Зауважте, необхідний легкий переклад: (252:1)стає 252,1.
nobar

12

Спробуйте зупинити групу LVM перед тим, як зупинити кіфа:

lvchange -a n [LVM_Group_name]

потім

cryptsetup -v luksClose [LUKS_name]

Зразок:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt

1
Використовуйте @ відповідь nobar в перше (але спробувати , killперш ніж kill -9). Однак рішення @ nobar для мене було недостатньо - схоже, що саме ядро ​​відкрило пристрій через відображення LVM-пристроїв - і ця відповідь вирішила.
Том Хейл

+1 У моєму випадку у прийнятій відповіді grepне знайдено відповідностей, але це спрацювало.
user000001

4

наступного разу спробуйте лінивий розум

umount -l /<folder>

Це працює для мене більшість випадків, особливо корисно з відключеними NFS-накопичувачами.


Я спробував це, але не вирішив проблему. Я припускаю, що ви не можете реально використовувати LUKS через NFS, і що це була лише пропозиція, що знімається в темряві.
nobar

це була саме моя проблема, я забув, що мені потрібно спочатку зняти зібране сховище: D
holms

2

Ось як мені вдається вирішити цю проблему на 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
Ця публікація може бути корисною для когось, але як зазначається у запитанні - іноді dmsetup removeповідомляється "Команда не вдалася".
nobar

0

Я опинився в подібній ситуації, але не зміг вирішити проблему, видаливши luks-xxxxпристрій. Натомість мені довелося зняти ubuntu--vg-root.

Моя ситуація була такою:

  • Я випадково вилучив пристрій до його блокування.
  • Спроба заблокувати або вийняти пристрій luks після того, як факт не вдався, зайнявши повідомлення про помилку.
  • Не вдалося розблокувати той самий пристрій, оскільки пристрій з такою ж назвою вже існував.
  • lsof не показали жодних відкритих ручок для пристрою.

Що допомогло - відключити фізичний пристрій та видалити ubuntu--vg-rootпристрій за допомогою наступної команди:

sudo dmsetup remove ubuntu--vg-root

У цей момент я зміг нормально активувати та розшифрувати зовнішній пристрій за допомогою звичайного налаштування:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.