umount - thiết bị đang bận


14

Đôi khi, khi tôi muốn mở rộng thiết bị, vd

sudo umount /dev/loop0

Tôi sẽ nhận được tin nhắn

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

Tôi thường giải quyết vấn đề này bằng cách đóng cửa sổ giao diện điều khiển (trong trường hợp của tôi là xfce4-terminal) và sau đó umount.

Vấn đề này có ý nghĩa gì? Có một số giải pháp thông minh hơn?


2
Điều đó xảy ra ví dụ nếu bạn vẫn ở trong một vỏ trong thư mục đó đến nơi thiết bị được gắn kết.
klapaucius

Tôi không nhớ nếu tôi ở đó nhưng tôi đã thử và bạn đã đúng, điều này đã xảy ra.
xralf

Câu trả lời:


14

Nó có nghĩa là một số quá trình có một thư mục làm việc hoặc một tệp xử lý mở bên dưới điểm gắn kết. Điều tốt nhất để làm là kết thúc quá trình vi phạm, thay đổi thư mục làm việc của nó hoặc đóng xử lý tệp trước khi ngắt kết nối.

Có một sự thay thế trên Linux mặc dù. Sử dụng umount -lcuộc gọi một "lười biếng" unmount. Hệ thống tập tin vẫn sẽ được gắn kết nhưng bạn sẽ không thể nhìn thấy hoặc sử dụng nó, ngoại trừ các quy trình đã sử dụng nó. Khi chương trình vi phạm thoát ra (thông qua bất kỳ phương tiện nào), hệ thống sẽ "kết thúc" ngắt kết nối hệ thống tập tin.


2
Có cách nào để tìm ra quy trình nào có xử lý tệp mở và nên chấm dứt không?
xralf

4
Sử dụng lsofcó lẽ là cách tốt nhất.
bahamat

1
ví dụ lsof | grep loop0?
xralf

Không, grep cho điểm gắn kết. Nó sẽ liệt kê bất kỳ tập tin bên dưới. Tôi không nghĩ rằng nó sẽ hiển thị những thứ chỉ đơn giản là có một thư mục hoạt động dưới điểm gắn kết, vì vậy nó không phải là một phương pháp hoàn hảo.
bahamat

7

Bạn cũng có thể sử dụng fuserđể giết tất cả các quy trình bằng hệ thống tệp được gắn.

fuser -cuk /mnt

Tùy chọn:

-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.

Kiểm tra chính mình tại giải thích .


3

Đưa ra "giải pháp thông thường" của bạn, điều đó có nghĩa là trình bao bạn đang chạy trong cửa sổ giao diện điều khiển của bạn có một thư mục trong một hệ thống tệp trên thiết bị đó làm thư mục làm việc hiện tại.

Linux và Unix nói chung, rất muốn giữ một hệ thống tệp được gắn kết nếu một tiến trình có một thư mục làm việc hiện tại trong hệ thống tệp đó.

Bạn chỉ có thể sử dụng cdtrong cửa sổ giao diện điều khiển để thoát khỏi một thư mục trong hoặc bên dưới /mntthay vì giết chết cửa sổ giao diện điều khiển và vỏ chạy bên trong nó.


0

Tôi phát hiện ra một tình huống có thể can thiệp vào việc ngắt kết nối một thiết bị mà tôi sẽ chia sẻ dưới dạng câu trả lời mặc dù câu hỏi này rất cũ.

Nếu bạn có cổ phần NFS được lưu trữ trên máy và bất kỳ cổ phiếu NFS nào được hỗ trợ bởi thiết bị bạn đang cố gắng ngắt kết nối, bạn sẽ phải ngừng chia sẻ chúng (tốt nhất là dừng dịch vụ NFS, ví dụ như sudo service nfs-kernel-server stoptrên các phiên bản Ubuntu gần đây ). Máy chủ NFS có thể không hiển thị trong lsof hoặc fuser, điều này có thể làm cho vấn đề khó xác định.

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.