Làm thế nào để thực sự buộc ngắt kết nối một hệ thống tập tin (không cần điều tra thủ công tại sao nó bận)


13

Làm thế nào để ngắt kết nối một hệ thống tập tin trong Linux mà không cần điều tra tại sao nó bận?

Tôi muốn làm điều đó trong một lệnh. Nó sẽ xử lý các ứng dụng bằng cách sử dụng hệ thống tập tin đó, các ứng dụng phụ, container ( lxc-execute -n qqq <command>) và tất cả những thứ khác.

Chỉ cần "unmount. Không phản đối!". Bản vá nhân đặc biệt hoặc cấu hình được cho phép.

Hệ thống tập tin nên thực sự không thể đếm được, vì vậy umount -lchắc chắn không phải là một lựa chọn. Ví dụ: đối với cryptsetup remove(BTW làm thế nào để cưỡng bức cryptsetup remove? Cập nhật : cryptsetup luksSuspend , nhưng bạn sẽ không thể cryptsetup luksResumenếu đó không phải là LUKS).

Làm thế nào để làm cho tất cả các tập tin trên hệ thống tập tin đó không hợp lệ?

Cách đáng tin cậy duy nhất mà tôi biết là gắn hệ thống tập tin thông qua FUSE (thường không có vấn đề gì để ngắt kết nối điều FUSE vì tôi chỉ có thể giết quá trình của nó).

PS đã biết gắn kết fuser, lsof | grep, cat /proc/*/mounts | grepvà lỗi thời không làm việc "badfs vá".

Câu trả lời:


3

Sử dụng tổ hợp phím Magic SysRq : Alt+ SysRq+u

Lưu ý rằng trước tiên bạn có thể thực hiện đồng bộ hóa khẩn cấp: Alt+ SysRq+s

Cũng lưu ý rằng trên một số bàn phím (đặc biệt mới hơn), bạn phải sử dụng PrtScchứ không phảiSysRq


Phím shift là không cần thiết, chỉ cần phím Alt + SysRq +. Một điều đáng nói nữa (đặc biệt đối với người dùng máy tính xách tay) là bạn có thể nhấn Alt, nhấn và phát hành SysRq, sau đó nhấn và phát hành chữ / chữ số và cuối cùng là phát hành Alt. Quan trọng nhất, điều này nhắc lại tất cả các hệ thống tệp là chỉ đọc, do đó, đây là điều cuối cùng trước khi khởi động lại một cách cưỡng bức, không phải là một cách chung để kết nối lại các hệ thống tệp chỉ đọc.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles: cảm ơn vì lời khuyên về phím shift. Tôi đã sửa hướng dẫn của mình.
sml

1. Nó chỉ tái hiện để chỉ đọc. Nó không phải là muốn. Ví dụ, tôi muốn ngắt kết nối nó và kết nối lại bằng FUSE. 2. Điều tồi tệ là tôi cần "-o remount, rw" hệ thống tập tin gốc và các hệ thống khác sau đó để trở lại hoạt động bình thường.
Vi.

3

umount --forcehoặc umount -f(tương đương)

Nếu thất bại, sau đó sử dụng:

umount --lazyhoặc umount --l(tương đương)

Các " lười biếng tùy chọn" sẽ "tách hệ thống tập tin từ hệ thống phân cấp hệ thống tập tin bây giờ, và dọn dẹp tất cả các tham chiếu đến các hệ thống tập tin ngay khi nó không phải là bận rộn nữa. (Yêu cầu kernel 2.4.11 hoặc sau đó.)" Nó có thể gây ra bất ổn, nhưng nó sẽ nhận được những điều chưa từng có. Bất kỳ chương trình sử dụng ổ đĩa có thể sụp đổ.


Tất nhiên là --forcekhông hoạt động. Và --lazykhông phải là không có thực - nó không phát hành LVM, loopback hoặc cryptsetup.
Vi.

1
umount -f

có thể được sử dụng để buộc ngắt kết nối khi hệ thống tập tin bận.


1
Nó chưa bao giờ làm việc cho tôi: umount2: Device or resource busyThành công một phần duy nhất là khi tôi thử nghiệm bản vá badfs.
Vi.

Tôi đã có thông báo "lỗi" tương tự, nhưng dù sao nó cũng hoạt động. Hệ thống tập tin đã được ngắt kết nối sau umount -f
IanH

3
Hãy thử "lười biếng umount", umount -l. Nó luôn luôn vượt qua nhưng có thể tạo ra một hệ thống tập tin không ổn định.
Jimmy Hedman

Tôi nghĩ rằng nhận xét của Jimmy về câu trả lời này thực sự là lựa chọn tốt nhất. Đúng là một "kẻ lười biếng" không thể đếm được có thể gây ra sự mất ổn định, nhưng nó cho rằng bạn đã ở trong trạng thái không ổn định nếu bạn cần buộc hệ thống tập tin. Cuối cùng, tại sao '-l' không phải là một lựa chọn?
deesto

@deesto, Lazy unmount không làm cho thiết bị chặn hoàn tác (âm lượng LVM, thùng chứa LUKS, loopback) không được ước tính.
Vi.

1

Tôi sợ không có cách nào để làm điều này trên một lệnh. umount -fthực sự không hoạt động trơn tru như người ta hy vọng. Nếu có các mục phụ dưới một số thú cưỡi khác, bạn không thể ngắt kết nối các thú cưỡi đó theo thứ tự ngẫu nhiên và hy vọng chúng sẽ đi xuống.

Nhưng không phải lo lắng, có một cách để biến tất cả điều này thành một lệnh: tạo tập lệnh shell / Perl để giết các tiến trình mong muốn, ngắt kết nối các container, gửi và cuối cùng hủy kết nối một số mount khác. Sau đó, bạn có thể chỉ cần gọi kịch bản của bạn theo yêu cầu. Ban đầu đó là công việc nhiều hơn cho bạn nhưng sau khi bạn làm cho kịch bản hoạt động, mọi thứ đều là trò chơi trẻ con. :)


1
Đây là những trường hợp khi tôi không thể ngắt kết nối thậm chí theo cách thủ công: 1. các quá trình ngủ không gián đoạn không thể tiếp tục (trình điều khiển bị hỏng, v.v.) 2. Lưu trữ không thành công (cũng bị treo từng yêu cầu đối với nó). Tôi muốn "unmount bẩn" này để xử lý này.
Vi.
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.