device-mapper: ลบ 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.

[แก้ไข] ฉันแก้ไขปัญหาในครั้งนี้โดยปิดตัวแก้ไขข้อความ GUI ซึ่งไม่มีไฟล์เปิดอยู่ แต่ได้รับการเปิดตัวจากโฟลเดอร์บนอุปกรณ์ที่เป็นปัญหา ดังนั้นคำถามจึงมีความเฉพาะเจาะจงมากขึ้น: คุณจะระบุได้อย่างไรว่าแอปพลิเคชันใดที่เปิดอุปกรณ์ค้างไว้

โปรดจำไว้ว่าlsofดูเหมือนจะไม่ได้นำเสนอวิธีแก้ปัญหาที่ง่ายเพราะเมื่ออุปกรณ์ถูกตัดการเชื่อมต่อชื่อที่เกี่ยวข้องที่ให้ไว้จะlsofไม่รวมชื่อของอุปกรณ์ที่ถูกตัดการเชื่อมต่ออีกต่อไป


พบปัญหาเดียวกัน แต่บน CentOS พบลิงค์นี้: krenel.org/ แต่ฉันไม่แสดงอุปกรณ์ที่ติดตั้ง
Lars Nordin

ดูเหมือนว่าคล้ายกับรายงานบั๊กที่ปิดแล้วนี้อย่างคงที่ : bugs.debian.org/cgi-bin/bugreport.cgi?bug=574126
nobar

คำเตือน: การติดตั้งด้วย sudo ดังที่แสดงไว้ที่นี่อาจทำให้คุณไม่สามารถเปิดใช้งานได้ตามปกติโดยใช้โปรแกรมจัดการไฟล์พื้นที่ผู้ใช้
สูงศักดิ์

คำตอบ:


27

หลังจากสองปีของการต่อสู้กับสิ่งนี้ฉันคิดว่าในที่สุดฉันก็แตกมันอย่างสมบูรณ์!

dmsetup ls ให้ข้อมูลที่คุณต้องการ:

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

แล้วก็

sudo lsof |grep 252,1

ดูเหมือนว่าsudoอาจมีความสำคัญที่นี่ - อย่างน้อยในบางกรณี


สิ่งนี้จะให้ข้อมูลที่จำเป็นสำหรับคุณในการปิดไฟล์ที่เปิดอยู่ทั้งหมดบนอุปกรณ์รวมถึงชื่อของไฟล์ที่เปิดและ ID กระบวนการสำหรับแอปพลิเคชันที่ละเมิด คุณอาจจะสามารถไปที่แอพเหล่านั้นและปิดแอพเหล่านั้นได้ แต่วิธีการบังคับกำลังดุร้ายอาจเป็นดังนี้:

kill -9 (process ID)

เมื่อคุณปิดไฟล์ทั้งหมดเครื่องมือบรรทัดคำสั่งบางอย่างที่แสดงในคำถามอาจจำเป็นเพื่อปิดการเมานต์ที่มีอยู่ก่อนที่จะสามารถเปิดใหม่ได้ตามปกติ


4
ขอให้สังเกตการแปลเล็กน้อยจำเป็นต้องใช้: กลายเป็น(252:1) 252,1
โนเบิล

12

ลองหยุดกลุ่ม LVM ก่อนหยุด cypher:

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 - ซึ่งคำตอบนี้ได้รับการแก้ไข
Tom Hale

+1 ในกรณีของฉันคำตอบที่ยอมรับgrepไม่พบการแข่งขัน แต่วิธีนี้ใช้ได้ผล
user000001

4

ครั้งต่อไปให้ลองนับคนขี้เกียจ

umount -l /<folder>

สิ่งนี้ใช้ได้กับฉันเกือบทุกครั้งโดยเฉพาะอย่างยิ่งมีประโยชน์กับไดรฟ์ NFS แบบวางสาย


ฉันลองสิ่งนี้ แต่ไม่ได้ช่วยแก้ปัญหา ฉันสมมติว่าคุณไม่สามารถใช้ LUKS กับ NFS ได้จริงและนี่เป็นเพียงข้อเสนอแนะที่ถ่ายในที่มืด
nobar

นี่เป็นปัญหาของฉันฉันลืมว่าฉันต้องยกเลิกการต่อเชื่อมที่เก็บข้อมูลที่แมปก่อน: D
holms

2

นี่คือวิธีที่ฉันจัดการเพื่อแก้ไขปัญหานี้ใน Linux Mint 17.3 (~ Ubuntu Trusty):

  1. ลบอุปกรณ์ออกจากอุปกรณ์ mapper

    $ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.