Ya, sistem file di Linux dapat diimplementasikan sebagai modul kernel. Tetapi ada juga antarmuka FUSE (Filesystem in USErspace), yang dapat memungkinkan proses ruang pengguna biasa untuk bertindak sebagai driver sistem file. Jika Anda membuat prototipe sistem file baru, mengimplementasikannya terlebih dahulu menggunakan antarmuka FUSE dapat membuat pengujian dan pengembangan lebih mudah. Setelah internal internal filesystem Anda bekerja dalam bentuk FUSE, Anda kemudian dapat mulai mengimplementasikan versi modul kernel yang dioptimalkan kinerja.
Berikut ini beberapa informasi dasar tentang penerapan sistem file di dalam ruang kernel. Agak tua (dari tahun 1996!), Tapi itu setidaknya memberi Anda ide dasar untuk hal-hal yang perlu Anda lakukan.
Jika Anda memilih untuk pergi ke rute FUSE, inilah libfuse, implementasi referensi sisi userspace dari antarmuka FUSE.
Driver sistem file sebagai modul kernel
Pada dasarnya, fungsi inisialisasi modul driver sistem file Anda hanya perlu memanggil register_filesystem()
fungsi, dan memberikannya sebagai parameter struktur yang menyertakan pointer fungsi yang mengidentifikasi fungsi dalam driver sistem file Anda yang akan digunakan sebagai langkah pertama dalam mengidentifikasi sistem file Anda ketik dan pasang itu. Tidak ada lagi yang terjadi pada tahap itu.
Ketika sebuah filesystem sedang di-mount, dan salah satu tipe filesystem ditentukan untuk mencocokkan driver Anda, atau deteksi otomatis tipe filesystem sedang dilakukan, layer Virtual FileSystem kernel (VFS) akan memanggil fungsi itu. Itu pada dasarnya mengatakan "Ini adalah pointer ke representasi tingkat kernel dari perangkat blok Linux standar. Lihatlah, lihat apakah itu sesuatu yang dapat Anda tangani, dan kemudian beri tahu saya apa yang dapat Anda lakukan dengannya."
Pada titik itu, driver Anda seharusnya membaca apa pun yang diperlukan untuk memverifikasi itu adalah driver yang tepat untuk sistem file, dan kemudian mengembalikan struktur yang menyertakan pointer ke fungsi lebih lanjut yang dapat dilakukan driver Anda dengan sistem file tertentu. Atau jika driver filesystem tidak mengenali data pada disk, itu seharusnya mengembalikan hasil kesalahan yang sesuai, dan kemudian VFS akan melaporkan kegagalan ke userspace atau - jika deteksi otomatis tipe filesystem sedang dilakukan - akan meminta filesystem lain driver untuk mencoba.
Driver lain di kernel akan menyediakan antarmuka perangkat blok standar, sehingga driver sistem file tidak harus mengimplementasikan dukungan perangkat keras. Pada dasarnya, driver sistem file dapat membaca dan menulis blok disk menggunakan fungsi level kernel standar dengan penunjuk perangkat yang diberikan padanya.
Lapisan VFS mengharapkan driver sistem file untuk membuat sejumlah fungsi standar tersedia untuk lapisan VFS; beberapa di antaranya wajib untuk lapisan VFS untuk melakukan sesuatu yang berarti dengan sistem file, yang lain adalah opsional dan Anda bisa mengembalikan NULL sebagai pengganti pointer ke fungsi opsional.
Ya, driver kernel dapat mengelola sistem file.
Solusi terbaik untuk meniru, membuat prototipe sistem file adalah dengan menggunakan FUSE. Dan setelah Anda dapat berpikir tentang mengubahnya menjadi driver kernel.
Wikipedia => https://en.wikipedia.org/wiki/Filesystem_in_Userspace
Sumber => https://github.com/libfuse/libfuse
tutorial => https://developer.ibm.com/articles/l-fuse/
sumber
Ya ini biasanya dilakukan dengan menggunakan driver kernel yang dapat dimuat sebagai modul kernel atau dikompilasi ke dalam kernel.
Anda dapat memeriksa driver sistem file yang serupa dan bagaimana cara kerjanya sini .
Driver ini kemungkinan menggunakan fungsi kernel internal untuk mengakses perangkat penyimpanan sebagai blok byte, tetapi Anda juga bisa menggunakan perangkat blok seperti yang diekspos oleh driver di folder perangkat blok dan perangkat karakter .
sumber
Anda dapat menggunakan sekering, untuk membuat sistem file pengguna-tanah, atau menulis modul kernel. Lebih mudah dilakukan dengan sekering, karena Anda memiliki pilihan bahasa, dan tidak akan crash kernel (dan karena itu seluruh sistem).
Modul kernel bisa lebih cepat, tetapi aturan optimasi pertama adalah: Jangan lakukan itu sampai Anda menguji kode kerja. Yang kedua seperti itu: Jangan lakukan itu sampai Anda memiliki bukti bahwa itu terlalu lambat. Dan yang ketiga: Jangan simpan kecuali Anda memiliki bukti bahwa itu membuatnya lebih cepat / lebih kecil.
Dan ya kernel sudah memiliki driver untuk perangkat keras, Anda tidak mengimplementasikannya kembali.
sumber
pivot_root
, karena masih ada inode yang sibuk di initramfs./init
dimulai dari initramfs akan (saya pikir)/init
mengeksekusi setelah pivot_root, untuk mentransfer kontrol ke FS root sebenarnya/init
. Tetapi biner FUSE tidak dapat menggantikan dirinya dengan mengeksekusi jika akses ke root FS tergantung pada proses FUSE menanggapi kernel. Mungkin dengan mengutamakan pagecache terlebih dahulu, tapi itu kedengarannya tidak bisa diandalkan.