Thiết bị bận rộn trên Umount


41

Tôi thường gặp một vấn đề để vượt qua một thư mục:

umount / mnt / dir
umount: / mnt / dir: thiết bị đang bận

Có nhiều lý do tại sao thiết bị bận rộn. Đôi khi có các tiến trình đang chạy có khóa mở trên đó, đôi khi có các thư mục khác được gắn ở trên /mnt/dir.

Câu hỏi của tôi:

Các bước để kiểm tra tại sao một thư mục không thể được bỏ qua.

Tôi biết có nhiều lý do, nhưng sẽ ổn nếu bạn giải thích một giải pháp cụ thể.

[CHỈNH SỬA]

[X] đang chạy các quy trình trên khối lượng gắn kết.
[X] một âm lượng khác được gắn trên đỉnh của âm lượng mà chúng tôi muốn ngắt kết nối
[_] NFS khóa âm lượng mà chúng tôi muốn ngắt kết nối


Câu trả lời:


75

Cách để kiểm tra là fuser -vm /mnt/dir, phải được chạy dưới quyền root. Nó sẽ cho bạn biết các quá trình đang truy cập vào điểm gắn kết.

Một cách khác là lsof /mnt/dir, nó sẽ hiển thị từng tệp đang mở trên mount. Một lần nữa tốt nhất chạy như root.

Bạn có thể chạy một trong hai thứ này dưới dạng không root, nhưng sau đó đầu ra sẽ bị giới hạn trong các quy trình của bạn. Những người từ những người dùng khác sẽ chỉ im lặng không được hiển thị, mặc dù chúng sẽ ngăn chặn việc ngắt kết nối hệ thống tập tin.

Thí dụ:

Watt:~# fuser -vm /mnt/Zia/src
                     USER        PID ACCESS COMMAND
/mnt/Zia/src:        root     kernel mount /mnt/Zia/src
                     anthony   24909 ..c.. bash
                     anthony   25041 F.c.. gvim

Trường "truy cập" cho bạn biết cách truy cập của nó. Trong trường hợp này, kernel có nó được sử dụng như một mount (duh, nhưng unmount sẽ ổn với chỉ điều này). bashcó nó là thư mục làm việc hiện tại (sẽ phải đến cdmột thư mục khác trước khi ngắt kết nối) và gvim đều có thư mục hiện tại và có một tệp đang mở (sẽ cần phải đóng gvim đó).

Watt:~# lsof /mnt/Zia/src
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    24909 anthony  cwd    DIR   0,26    12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim    25041 anthony  cwd    DIR   0,26    12288 3527682 /mnt/Zia/src/perl (zia.vpn.home:/home/anthony/src)
gvim    25041 anthony    6u   REG   0,26    16384 3526219 /mnt/Zia/src/perl/.utf8.c.swp (zia.vpn.home:/home/anthony/src)

Trong đầu ra này, bạn có thể thấy các thư mục hiện tại cho cả bash và gvim (dưới dạng DIR). Bạn cũng có thể xem tập tin gvim nào đã mở để ghi.

Làm thế nào để buộc vấn đề:

fusercó một -ktùy chọn sẽ gửi tín hiệu (mặc định SIGKILL:) cho mỗi quy trình bằng cách sử dụng giá treo. Đây là một cách khá mạnh mẽ để ngăn chặn thú cưỡi khỏi bận rộn. (Và tất nhiên, hãy cẩn thận với những gì bạn SIGKILL!)

umountcó một -ltùy chọn để thực hiện một unmount lười biếng. Gắn kết sẽ bị xóa khỏi không gian tên hệ thống tập tin (vì vậy bạn sẽ không thấy nó bên dưới /mnt/Zia/srcnữa, trong ví dụ) nhưng nó vẫn được gắn kết, vì vậy các chương trình truy cập nó có thể tiếp tục như vậy. Khi chương trình cuối cùng truy cập nó thoát, việc ngắt kết nối sẽ thực sự xảy ra.

Có một nguyên nhân có thể sửa chữa cuối cùng của sự thất bại không thể đếm được, và đó là một máy chủ NFS bị hỏng. Ở đây bạn có thể sử dụng umount -f, nhưng bạn có nguy cơ mất dữ liệu nếu bạn làm như vậy. (Máy khách có thể đã ghi vào bộ nhớ cache mà máy chủ chưa xác nhận và những lần ghi đó sẽ bị loại bỏ. Tuy nhiên, các ứng dụng đã được thông báo rằng việc ghi là thành công.)


4
Lưu ý rằng fuser -kvô cùng nguy hiểm, vì bạn sẽ được làm việc đó như là người chủ và nếu bạn không rất chắc chắn trong đó quá trình sẽ bị giết hết bạn có thể làm thiệt hại thật sự ngoạn mục với một lệnh bất cẩn ...
Shadur

1
@Shadur tốt, hy vọng bạn đã chạy nó mà không có -ktùy chọn, vì vậy bạn sẽ biết bạn sẽ giết quá trình nào. Nhưng tôi sẽ thêm vào một cảnh báo.
derobert

1
fuser -vmcho thấy "kernel mount". phải làm systemctl stop opt.mountthay vì thủ công umount.
lkraav

2
Vì một số lý do, umount -f không hoạt động với tôi nhưng chạy umount -l hoạt động hoàn hảo.
Firze

Cảm ơn bạn đã lưu ý về umount -fvà NFS. Vấn đề của tôi là liên quan đến NFS khi máy dev của tôi thay đổi IP và tôi không thể xóa chia sẻ.
Eric

19

Bạn nên sử dụng:

sudo umount -l <path>

7
, Tôi không biết người ngớ ngẩn nào có thể hạ bệ nó. Đây -lchính xác là tùy chọn để sử dụng khi thậm chí -fkhông hoạt động.
Hi-Angel

@ Hi-Angel Bởi vì đây không phải là những gì OP đang yêu cầu?
xhienne

Trao đổi ngăn xếp @xheinne không chỉ là trả lời một câu hỏi như bot ngu ngốc, câu trả lời này rất hữu ích. nhiều người đến từ google cũng tìm kiếm. Cá nhân tôi thấy điều này hữu ích. Các op shoudl chấp nhận câu trả lời mà anh ta thấy có liên quan đó là lý do tại sao nút chấp nhận ở đó.
dùng1735921

6

Một âm lượng khác được gắn trên đầu một âm lượng mà chúng tôi muốn ngắt kết nối:

Các mountlệnh cho phép bạn biết tất cả các gắn kết khối lượng nếu invoqued không có đối số cũng không tùy chọn (trừ -v). Bạn có thể có một danh sách các điểm gắn kết hoạt động bằng cách thêm một chút perl:

mount | perl -pe 's/.*on (\S+) type.*/\1/'

Sau đó, chỉ cần grep qua điểm moint mà bạn muốn ngắt kết nối và bạn sẽ biết nếu có hệ thống tập tin được gắn trên cái này.

mount | perl -pe 's/.*on (\S+) type.*/\1/' | grep '/mnt/dir/'

Sau đó, bạn có hai giải pháp . Hoặc ngắt kết nối các hệ thống tập tin hoặc di chuyển chúng bằng mount --move olddir newdir(kernel> 2.5.1)


1
Vâng cảm ơn. / etc / mtab và / Proc / mount cũng có thể.

À đúng rồi, tôi luôn quên những thứ đó. Giả sử việc gõ "mount" đòi hỏi ít ký tự hơn (nhưng cần nhiều tài nguyên hơn để thực thi?)
mveroone

1
Tôi có một thiết bị lưu trữ USB gắn ngoài "vĩnh viễn" được gắn trên một thư mục nhất định trên máy tính xách tay của tôi, Đôi khi cáp bị ngắt kết nối do nhầm lẫn. Đó là một nỗi đau lớn để giới thiệu thiết bị trên thư mục (vì "thiết bị bận") cho đến khi tôi đọc câu trả lời này. Bây giờ tôi đã biết sử dụng mount --move olddir newdir. Cảm ơn.
Silvio Levy

3

Mở tập tin

Các quy trình với các tệp mở là thủ phạm thông thường. Hiển thị chúng:

lsof +f -- <mountpoint or device>

Có một lợi thế cho việc sử dụng /dev/<device>hơn là /mountpoint: một điểm gắn kết sẽ biến mất sau một umount -lhoặc có thể bị ẩn bởi một giá treo.

fusercũng có thể được sử dụng, nhưng theo tôi thì lsofcó một đầu ra hữu ích hơn. Tuy nhiên fuserrất hữu ích khi nói đến việc tiêu diệt các quá trình gây ra các bộ phim truyền hình của bạn để bạn có thể tiếp tục cuộc sống của mình.

Liệt kê các tập tin trên <mountpoint>(xem cảnh báo ở trên):

fuser -vmM <mountpoint>

Chỉ giết tương tác các quá trình với các tệp được mở để ghi:

fuser -vmMkiw <mountpoint>

Sau khi đếm lại chỉ đọc ( mount -o remount,ro <mountpoint>), an toàn (r) để giết tất cả các quy trình còn lại:

fuser -vmMk <mountpoint>

Đỉnh núi

Thủ phạm có thể là chính hạt nhân. Một hệ thống tập tin khác được gắn trên hệ thống tập tin mà bạn đang cố gắng umountsẽ gây ra đau buồn. Kiểm tra với:

mount | grep <mountpoint>/

Đối với mount loopback, cũng kiểm tra đầu ra của:

losetup -la

Inodes nặc danh (Linux)

Các nút ẩn danh có thể được tạo bởi:

  • Tệp tạm thời ( openO_TMPFILE)
  • đồng hồ inotify
  • [sự kiện]
  • [sự kiện]
  • [hẹn giờ]

Đây là những loại khó nắm bắt nhất của pokemon, và xuất hiện trong lsof's TYPEcột như a_inode(được cung cấp tài liệu trong lsoftrang người đàn ông ).

Chúng sẽ không xuất hiện lsof +f -- /dev/<device>, vì vậy bạn sẽ cần:

lsof | grep a_inode

Để tiêu diệt các quá trình giữ các nút ẩn danh, hãy xem: Liệt kê các đồng hồ inotify hiện tại (tên đường dẫn, PID) .


1

Câu hỏi làm thế nào để kiểm tra nếu NFS truy cập vào một thư mục sẽ không được trả lời vẫn chưa được trả lời.

Những gì tôi có chỉ là thế này:

Kiểm tra xem nfsd có chạy không:

pidof nfsd

Hiển thị các thư mục được gắn bởi khách hàng:

showmount -a

và các showmountđối số w / o chỉ hiển thị các máy khách ngay cả khi chúng không trực tuyến. Tôi cho rằng đây là một hành vi đặc biệt của NFS.


1

Đối với tôi, vấn đề là tôi đã đăng nhập nhiều lần (thông qua ssh) và trên một trong những lần đăng nhập tôi đã ở dấu nhắc lệnh nơi pwd nằm trong một thư mục phụ thuộc vào điểm gắn kết.

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.