Nếu được mount(2)
yêu cầu tạo thư mục mới làm điểm gắn kết, bạn không thể gắn kết bất cứ thứ gì trong hệ thống tệp chỉ đọc. Điều đó thật ngu ngốc, vì vậy chúng ta có thể loại trừ điều đó.
Nếu mount tùy ý tạo một thư mục mới làm mountpoint, điều đó thật lạ. Nó không giống như mount / unmount xảy ra mọi lúc, vì vậy việc đưa logic bổ sung vào kernel để thực hiện hai bước này với một cuộc gọi hệ thống duy nhất sẽ không phải là một sự tăng tốc quan trọng. Chỉ cần để nó vào không gian người dùng để thực hiện mkdir(2)
cuộc gọi hệ thống nếu nó muốn. Câu trả lời của Dmitry chỉ ra rằng việc mount(2)
làm cả hai điều sẽ khiến nó trở thành phi nguyên tử. Và bạn muốn một cuộc tranh cãi thêm để mount(2)
với cờ chế độ như open(2)
mất, cho O_CREAT
, O_EXCL
vv Nó sẽ chỉ được ngớ ngẩn so với việc cho phép sử dụng không gian làm điều đó.
Hoặc có thể bạn đang hỏi về việc có mount(8)
(chương trình truyền thống thực hiện mount(2)
các cuộc gọi hệ thống) làm điều này? Điều đó là có thể, nhưng đã hoàn toàn tốt mkdir(1)
cho công việc và thiết kế của Unix là tất cả các công cụ nhỏ tốt có thể kết hợp. Nếu bạn muốn có một công cụ làm cả hai, thật dễ dàng để viết một tập lệnh shell để xây dựng công cụ đó bằng hai công cụ đơn giản hơn. (Hoặc, như muru đã nhận xét, udisksctl
đã thực hiện điều này, vì vậy bạn không phải viết nó.) Ngoài ra, Linux thông thường mount(8)
từ linux-linux hỗ trợ mount -o x-mount.mkdir[=mode]
sử dụng x-
cú pháp của nó cho các tùy chọn cho không gian người dùng, thay vì các tùy chọn được chuyển đến hệ thống tệp.
Bây giờ câu hỏi thú vị hơn: tại sao phải có một thư mục trên hệ thống tập tin mẹ?
Giống như câu trả lời của pjc50 chỉ ra (không liên quan, mặc dù anh ấy có tên viết tắt của tôi!), Việc có các điểm gắn kết hiển thị trong danh sách thư mục sau đó sẽ yêu cầu kiểm tra thêm trên mỗi readdir()
.
Có các điểm gắn kết tồn tại dưới dạng các thư mục trong thư mục chứa chúng (trên FS cha) là một mẹo hay. readdir()
không cần phải lưu ý rằng đó là một điểm gắn kết nào cả. Điều đó chỉ xảy ra nếu điểm gắn kết được sử dụng như một thành phần đường dẫn. Tất nhiên, độ phân giải đường dẫn phải kiểm tra bảng mount cho mọi thành phần thư mục của đường dẫn.
udisksctl
. Tại sao nên sử dụngmount
?