Jika mount(2)
diperlukan pembuatan direktori baru sebagai titik mount, Anda tidak bisa me-mount apa pun di bawah sistem file read-only. Itu akan bodoh, jadi kita bisa mengesampingkan itu.
Jika mount secara opsional membuat direktori baru untuk menjadi mountpoint, itu akan aneh. Ini tidak seperti me-mount / unmount yang terjadi setiap saat, jadi menempatkan logika ekstra di kernel untuk melakukan dua langkah ini dengan satu pemanggilan sistem tidak akan menjadi sebuah speedup yang penting. Serahkan saja pada ruang pengguna untuk melakukan mkdir(2)
panggilan sistem jika menginginkannya. Jawaban Dmitry menunjukkan bahwa setelah mount(2)
melakukan kedua hal itu akan membuatnya menjadi non-atom. Dan Anda ingin argumen ekstra untuk mount(2)
dengan modus bendera seperti open(2)
mengambil, untuk O_CREAT
, O_EXCL
, dll hanya akan konyol dibandingkan dengan membiarkan user-space melakukannya.
Atau mungkin Anda bertanya tentang memiliki mount(8)
(program tradisional yang membuat mount(2)
panggilan sistem) melakukan ini? Itu mungkin, tetapi sudah ada yang sangat baik mkdir(1)
untuk pekerjaan itu, dan desain Unix adalah tentang alat kecil yang baik yang dapat digabungkan. Jika Anda menginginkan alat yang melakukan keduanya, mudah untuk menulis skrip shell untuk membangun alat itu dari dua alat yang lebih sederhana. (Atau, seperti komentar muru, udisksctl
sudah melakukan ini, jadi Anda tidak perlu menulisnya.) Selain itu, normal Linux mount(8)
dari util-linux mendukung mount -o x-mount.mkdir[=mode]
penggunaan x-
sintaksnya untuk opsi untuk userspace, daripada opsi untuk diteruskan ke sistem file.
Sekarang pertanyaan yang lebih menarik: mengapa harus ada direktori di sistem berkas induk?
Seperti yang ditunjukkan oleh jawaban pjc50 (tidak ada relasi, meskipun ia memiliki inisial saya!), Memiliki mount poin muncul di daftar direktori akan memerlukan pemeriksaan tambahan pada setiap readdir()
.
Memiliki mount point ada sebagai direktori dalam direktori yang berisi mereka (pada induk FS) adalah trik yang bagus. readdir()
tidak perlu memperhatikan bahwa itu adalah titik pemasangan sama sekali. Itu hanya terjadi jika titik mount digunakan sebagai komponen jalur. Resolusi path tentu saja harus memeriksa tabel mount untuk setiap komponen direktori dari sebuah path.
udisksctl
. Mengapa menggunakanmount
?