umount - อุปกรณ์ไม่ว่าง


14

บางครั้งเมื่อฉันต้องการที่จะเพิ่มอุปกรณ์เช่น

sudo umount /dev/loop0

ฉันจะได้รับข้อความ

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

ฉันมักจะแก้ปัญหานี้โดยการปิดหน้าต่างคอนโซล (ใน xfce4 ขั้วกรณีของฉัน) umountแล้ว

ปัญหานี้หมายความว่าอย่างไร มีวิธีแก้ปัญหาที่ชาญฉลาดกว่านี้ไหม?


2
ที่เกิดขึ้นเช่นถ้าคุณยังคงอยู่ในเปลือกในไดเรกทอรีที่ติดตั้งอุปกรณ์
klapaucius

ฉันจำไม่ได้ว่าฉันอยู่ที่นั่น แต่ฉันลองและคุณพูดถูก
xralf

คำตอบ:


14

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

มีทางเลือกอื่นบน Linux แม้ว่า ใช้umount -lสาย "ขี้เกียจ" unmount ระบบไฟล์จะยังคงติดตั้งอยู่ แต่คุณจะไม่สามารถมองเห็นหรือใช้งานได้ยกเว้นกระบวนการที่กำลังใช้งานอยู่ เมื่อโปรแกรมที่กระทำผิดออก (ผ่านวิธีการใดก็ตาม) ระบบจะ "เสร็จสิ้น" เพื่อยกเลิกการต่อเชื่อมระบบไฟล์


2
มีวิธีการหากระบวนการที่มีการจัดการไฟล์เปิดและควรจะยุติ?
xralf

4
การใช้lsofน่าจะเป็นวิธีที่ดีที่สุด
bahamat

1
เช่นlsof | grep loop0?
xralf

ไม่ grep สำหรับจุดเชื่อมต่อ มันควรจะแสดงรายการไฟล์ใด ๆ ภายใต้ ฉันไม่คิดว่ามันจะแสดงสิ่งที่มีเพียงไดเรกทอรีทำงานภายใต้จุดเมานท์ดังนั้นจึงไม่ใช่วิธีที่สมบูรณ์แบบ
บาฮามาต

7

คุณยังสามารถใช้fuserเพื่อฆ่ากระบวนการทั้งหมดโดยใช้ระบบไฟล์ที่เมาท์

fuser -cuk /mnt

ตัวเลือก:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

ตรวจสอบตัวเองที่explainshell


3

เมื่อพิจารณาจาก "การแก้ปัญหาตามปกติ" หมายความว่าเชลล์ที่คุณใช้ในหน้าต่างคอนโซลมีไดเรกทอรีในระบบไฟล์บนอุปกรณ์นั้นเป็นไดเรกทอรีการทำงานปัจจุบัน

โดยทั่วไป Linux และ Unixes ต้องการอย่างมากที่จะติดตั้งระบบไฟล์หากกระบวนการมีไดเรกทอรีการทำงานปัจจุบันในระบบไฟล์นั้น

คุณสามารถใช้cdในหน้าต่างคอนโซลเพื่อออกจากไดเรกทอรีในหรือภายใต้/mntแทนที่จะฆ่าหน้าต่างคอนโซลและเชลล์ที่ทำงานอยู่ภายใน


0

ฉันค้นพบสถานการณ์ที่อาจรบกวนการเลิกเมานท์อุปกรณ์ที่ฉันจะแชร์เป็นคำตอบแม้ว่าคำถามนี้จะเก่ามาก

หากคุณมีการแชร์ NFS ที่โฮสต์บนเครื่องและการแบ่งปัน NFS ใด ๆ เหล่านั้นได้รับการสนับสนุนโดยอุปกรณ์ที่คุณพยายามยกเลิกการต่อเชื่อมคุณจะต้องหยุดการแชร์พวกเขา (ทำได้ดีที่สุดโดยการหยุดบริการ NFS เช่นsudo service nfs-kernel-server stopบน Ubuntu รุ่นล่าสุด ) เซิร์ฟเวอร์ NFS อาจไม่แสดงใน lsof หรือ fuser ซึ่งสามารถทำให้ปัญหายากที่จะระบุ

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