Tại sao lười biếng MNT_DETACH hoặc `umount -l` không an toàn / nguy hiểm?


10

Tôi đã đọc ở một vài nơi umount -lkhông an toàn:

Trong câu trả lời của @cas :

không sử dụng umount's --lazytùy chọn nếu bạn quan tâm khi ổ đĩa ngoài có thể được an toàn unplugged

Một bình luận của @frostschutz :

umount --lazykhông an toàn và không thể được thực hiện an toàn. [...]

util-linux Nhận xét này của Ruediger Meier :

Bạn nên tránh sử dụng umount -ltất cả. Chỉ cần giết tất cả các quy trình đang sử dụng /tmp/mountpointvà sau đó không có tùy chọn -l.

Tại sao umount -lkhông an toàn / nguy hiểm?

Có cách nào để làm cho nó an toàn?

Câu trả lời:


12

Một unmount lười biếng tạo ra một gắn kết mèo Schrödinger

  • Bạn không thể biết thiết bị có thực sự chưa được kết nối hay không
  • Hệ thống tập tin "chưa từng có" vẫn có thể truy cập được trong một số trường hợp
  • Không thể truy cập hệ thống tập tin "không đếm được" trong một số trường hợp

Có một cảm giác an toàn sai lầm : có vẻ như hệ thống tập tin đã bị bỏ qua, nhưng trong thực tế, nó chỉ bị ẩn khỏi không gian tên tập tin / gia truyền.

  • Các quy trình vẫn có thể viết thông qua các mô tả tệp mở
  • Các tệp mới hoặc hiện có có thể được mở để ghi bằng các quy trình có thư mục hoạt động bên trong điểm gắn kết thông qua tên đường dẫn tương đối

Điều này có nghĩa là nếu bạn umount -l /media/hddkhông còn có thể truy cập /media/hdd/dir/file(tên đường dẫn tuyệt đối) nhưng nếu bạn có một quy trình với thư mục làm việc, /media/hddnó vẫn có thể tạo các quy trình mới có thể đọc / ghi ./dir/file(tên đường dẫn tương đối).

Nếu bạn cố gắng ngắt kết nối thiết bị, bạn sẽ thấy một thông báo khó hiểu:

# umount --force --all-targets /dev/sdb2
umount: /dev/sdb2: not mounted

Điều này làm cho nó trông giống như thiết bị đã được đếm, nhưng vẫn có thể có các quá trình ghi vào đĩa.

Vì có nhiều tình huống không rõ ràng khác nhau có thể gây ra tình trạng chặn , hệ thống tập tin vẫn có thể không được khắc phục mặc dù lsof +f -- /dev/devicekhông hiển thị gì.

Bạn sẽ không bao giờ biết nếu hệ thống tập tin thực sự ngắt kết nối. Không có cách nào để tìm hiểu.

Thiết bị di động

Nếu bạn làm umount -lmột đĩa di động, bạn đang ở trong vùng đất lấp lửng: bạn không thể chắc chắn rằng tất cả dữ liệu đang chờ xử lý đã được ghi vào đĩa.

Điều tốt nhất bạn có thể làm sau một umount -lđảm bảo tất cả các văn bản hoàn thành và ngăn chặn việc viết trong tương lai , nhưng bạn vẫn không thể đảm bảo rằng nó đã được bỏ qua.

Với các thiết bị di động, nếu thiết bị không được kết nối đúng cách, hành vi lạ có thể dẫn đến lần cắm tiếp theo:

  • Thiết bị sẽ nhận được một tên thiết bị tăng, tức là /dev/sdbtrở thành /dev/sdc. Các thông điệp nhật ký kernel vẫn có thể tham chiếu /dev/sdbngay cả khi thiết bị đó không còn tồn tại dưới dạng tệp /dev. (Cách duy nhất tôi biết để giải quyết vấn đề này là khởi động lại.)

  • tham nhũng btrfs có thể dẫn đến. btrfs hy vọng rằng chỉ có một hệ thống tập tin với một UUID nhất định có mặt tại một thời điểm. Nhân vẫn thấy UUID tương tự có sẵn trên thiết bị ảo và thiết bị mới. (Tôi đã phải xây dựng lại ổ cứng sao lưu btrfs của mình).

systemd vấn đề


"Các tệp mới hoặc hiện có có thể được mở để ghi bằng các quy trình có thư mục hoạt động bên trong điểm gắn kết thông qua tên đường dẫn tương đối" Đây là thông tin tôi đang tìm kiếm. Bạn có bất kỳ liên kết hoặc tài liệu tham khảo bổ sung?
Jonathon Reinhart

@Jonathon kiểm tra người đàn ông umount. Tôi cần phải google khác. Xin vui lòng gửi phát hiện của bạn nếu bạn làm điều này.
Tom Hale

Tôi đã đọc umount(2)nhiều lần gần đây. Nó chỉ nói "Thực hiện một chế độ ngắt kết nối lười biếng: làm cho điểm gắn kết không có sẵn cho các truy cập mới, ngay lập tức ngắt kết nối hệ thống tệp và tất cả các hệ thống tệp được gắn bên dưới nó với nhau và từ bảng gắn kết và thực sự thực hiện ngắt kết nối khi điểm gắn kết không còn bận . " Nhưng thật không may, đây là ít chi tiết hơn so với những gì bạn đã cung cấp.
Jonathon Reinhart

umount(8)nói rằng một hệ thống tệp đang bận "ví dụ: khi có tệp đang mở trên đó hoặc khi một quá trình nào đó có thư mục hoạt động ở đó hoặc khi tệp hoán đổi trên đó đang được sử dụng." Điều đó không giống như một danh sách dứt khoát, nhưng có lẽ là tốt như tôi có thể tìm thấy.
Jonathon Reinhart

Tôi đã xây dựng một chút về những gì bạn nói, và thêm một số ví dụ khác trong câu trả lời này . Cảm ơn vì thông tin!
Jonathon Reinhart
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.