thiết bị ánh xạ thiết bị: xóa ioctl trên luks-xxxx không thành công: Thiết bị hoặc tài nguyên bận


28

Trong khi tôi rời khỏi máy tính của mình, ổ USB được mã hóa của tôi đã vô tình bị ngắt kết nối bằng cách nào đó (mặc dù lúc đó nó vẫn được kết nối vật lý). Tôi chưa thể phục hồi (chưa thử khởi động lại). Bây giờ tôi đã ngắt kết nối hoàn toàn thiết bị, nhưng tôi vẫn nhận được "Thiết bị hoặc tài nguyên bận" khi tôi cố gắng xóa mục nhập lơ lửng trong / dev / mapper. Tôi có thể kết nối lại và gắn ổ đĩa mà không cần khởi động lại không?

Đây là những gì tôi đã thử (tên dài đổi thành "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

Sau khi kết nối lại thiết bị ...

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

[EDIT] Lần này, tôi đã giải quyết vấn đề bằng cách đóng trình soạn thảo văn bản GUI không có tệp đang mở nhưng đã được khởi chạy từ một thư mục trên thiết bị được đề cập. Vì vậy, câu hỏi trở nên cụ thể hơn: Làm thế nào bạn có thể xác định ứng dụng nào đang giữ thiết bị mở?

Hãy nhớ rằng lsofdường như không đưa ra một giải pháp dễ dàng bởi vì, một khi thiết bị bị ngắt kết nối, các tên liên quan được cung cấp lsofkhông còn bao gồm tên của thiết bị bị ngắt kết nối.


Chạy vào cùng một vấn đề nhưng trên CentOS. Tìm thấy liên kết này: krenel.org/, nhưng tôi không hiển thị thiết bị được gắn
Lars Nordin

Có vẻ khá giống với báo cáo lỗi đóng cố định này: bug.debian.org/cgi-bin/ormsreport.cgi?bug=574126
tộc

Lời cảnh báo: Gắn kết với sudo, như được hiển thị ở đây, có thể ngăn bạn đẩy ra bình thường bằng trình quản lý tệp không gian người dùng.
tộc

Câu trả lời:


27

Sau hai năm chiến đấu với điều này, tôi nghĩ rằng cuối cùng tôi đã phá vỡ nó hoàn toàn!

dmsetup ls cung cấp cho bạn dữ liệu bạn cần:

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

sau đó

sudo lsof |grep 252,1

Có vẻ như sudocó thể rất quan trọng ở đây - ít nhất là trong một số trường hợp.


Điều này sẽ cung cấp cho bạn thông tin cần thiết để đóng tất cả các tệp đang mở trên thiết bị - bao gồm tên của các tệp đang mở và ID xử lý cho các ứng dụng vi phạm. Bạn có thể chỉ cần truy cập vào các ứng dụng đó và đóng chúng, nhưng cách tiếp cận vũ phu có thể là một cái gì đó như:

kill -9 (process ID)

Khi bạn đã đóng tất cả các tệp, một số công cụ dòng lệnh được hiển thị trong câu hỏi có thể cần thiết để đóng ngàm hiện có trước khi có thể mở lại bình thường.


4
Lưu ý bản dịch nhẹ cần thiết: (252:1)trở thành 252,1.
tộc 17/8/2016

12

Cố gắng dừng nhóm LVM trước khi dừng cypher:

lvchange -a n [LVM_Group_name]

sau đó

cryptsetup -v luksClose [LUKS_name]

Mẫu vật:

lvchange -a n My_vg_crypt
cryptsetup -v luksClose My_Crypt

1
Sử dụng câu trả lời của @ nobar trước (nhưng hãy thử killtrước kill -9). Tuy nhiên, giải pháp của @ nobar không đủ cho tôi - có vẻ như chính hạt nhân đã mở thiết bị vì ánh xạ thiết bị LVM - câu trả lời này đã được giải quyết.
Tom Hale

+1 Trong trường hợp của tôi, câu trả lời được chấp nhận grepkhông tìm thấy bất kỳ kết quả khớp nào, nhưng điều này đã có hiệu quả.
user000001

4

lần sau hãy thử một lần lười biếng

umount -l /<folder>

Điều này đối với tôi hầu hết thời gian, đặc biệt hữu ích với các ổ đĩa NFS bị treo.


Tôi đã thử điều này, nhưng không giúp được gì cho vấn đề trong tay. Tôi cho rằng bạn thực sự không thể sử dụng LUKS trên NFS và đây chỉ là một gợi ý bắn vào bóng tối.
tộc

đây chính xác là vấn đề của tôi, tôi quên rằng tôi cần phải ngắt kết nối bộ nhớ được ánh xạ trước: D
holms

2

Đây là cách tôi quản lý để giải quyết vấn đề này trên Linux Mint 17.3 (~ Ubuntu Trusty):

  1. gỡ thiết bị ra khỏi thiết bị lập bản đồ

    $ sudo dmsetup remove luks-xxyyzz
    
  2. ánh xạ lại

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

Bây giờ các thiết bị có thể truy cập.


2
Bài đăng này có thể hữu ích cho ai đó, nhưng như đã lưu ý trong câu hỏi - đôi khi dmsetup removebáo cáo "Lệnh thất bại".
tộc

0

Tôi đã ở trong một tình huống tương tự nhưng không thể giải quyết vấn đề bằng cách tháo luks-xxxxthiết bị. Thay vào đó tôi phải loại bỏ ubuntu--vg-root.

Tình hình của tôi là:

  • Tôi vô tình tháo thiết bị trước khi nó bị khóa.
  • Cố gắng khóa hoặc xóa thiết bị luks sau khi thực tế không thành công với thông báo lỗi bận .
  • Mở khóa cùng một thiết bị không thành công vì một thiết bị có cùng tên đã tồn tại.
  • lsof không hiển thị bất kỳ tay cầm mở nào cho thiết bị.

Điều đã giúp là rút phích cắm thiết bị vật lý và tháo ubuntu--vg-rootthiết bị bằng lệnh sau:

sudo dmsetup remove ubuntu--vg-root

Tại thời điểm đó, tôi có thể kích hoạt và giải mã bình thường thiết bị bên ngoài một lần nữa với thiết lập thông thường của mình:

udisksctl unlock -b /dev/sda3
sudo lvchange --activate y ubuntu-vg/root
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.