Langsung ke konten

Arsip

Filesystem

27 artikel
Teknologi 22 Sep 2026 5 min read

Buffered Write Linux Memisahkan Selesainya Write dari Persistensi Storage

Keberhasilan buffered write() umumnya tidak berarti data file yang baru sudah mencapai storage non-volatile. Pada Linux, jalur buffered I/O yang umum menempatkan data file di page cache, menandai state cache terkait sebagai dirty, lalu membiarkan I/O ke storage berlangsung kemudian. Pemisahan ini merupakan bagian utama dari I/O filesystem normal. Memori menyerap write aplikasi dengan akses yang cepat bagi CPU, sementara kernel dapat menjadwalkan traffic ke backing device secara terpisah. Mekanisme tersebut memberi fleksibilitas dan dapat mengurangi stall storage secara langsung, tetapi juga membentuk batas antara selesainya syscall dan persistensi.

Linux 21 Sep 2026 5 min read

Flag Resolve openat2 Membatasi Traversal Path Saat Lookup

Path yang diberikan ke openat() diresolusikan oleh kernel, tetapi caller hanya memiliki kontrol terbatas atas traversal komponen perantara. Linux openat2() menambahkan field resolve untuk menerapkan batas pada keseluruhan operasi lookup. Batas tersebut diperiksa ketika komponen path sedang ditelusuri, bukan melalui validasi path di userspace yang dilanjutkan dengan open terpisah. Perbedaan ini relevan saat komponen path dapat berubah secara concurrent. Urutan yang memeriksa path lalu membukanya menghasilkan dua observasi terpisah terhadap state filesystem yang mutable. openat2() menempatkan policy lookup pada system call yang sama dengan operasi yang menghasilkan file descriptor.

Keamanan Siber 19 Sep 2026 6 min read

Permission Event fanotify Menempatkan Akses File di Balik Keputusan User Space

Sebuah proses dapat lolos dari pemeriksaan permission filesystem biasa tetapi tetap menunggu sebelum operasi filenya selesai. Permission event fanotify Linux memungkinkan monitoring group mencegat operasi terpilih dan mewajibkan listener user space mengembalikan respons izinkan atau tolak. Mekanisme ini menyisipkan titik keputusan sinkron ke jalur akses, bukan sekadar melaporkan aktivitas setelah operasi terjadi. Perbedaan tersebut membuat fanotify relevan bagi produk keamanan yang memerlukan inspeksi konten atau evaluasi policy di dekat waktu akses file. Mekanisme ini juga menciptakan dependensi yang tidak dimiliki sistem notifikasi biasa: kernel dapat menahan proses lain pada permission event sementara user space menentukan hasilnya.

Linux 19 Sep 2026 6 min read

openat2 Membatasi Resolusi Path pada Boundary Kernel

Sebuah pathname yang dimulai di dalam directory tepercaya dapat berakhir pada objek di luar directory tersebut sebelum open() selesai. Parent component, symbolic link, magic link, mount point, dan perubahan namespace secara concurrent semuanya ikut menentukan pathname lookup Linux. Memeriksa string sebelum membukanya karena itu tidak menetapkan lokasi akhir resolusi yang dilakukan kernel. Linux openat2() menempatkan pembatasan di dalam operasi lookup itu sendiri. Pemanggil memberikan directory file descriptor, open flag biasa, dan kebijakan resolve melalui struct open_how. Kernel kemudian menerapkan batas tersebut saat menelusuri setiap path component yang relevan. Security boundary berpindah dari validasi awal atas teks pathname ke operasi yang benar-benar melakukan resolusi.

Linux 19 Sep 2026 4 min read

openat2 Membatasi Resolusi Path Linux pada Operasi Open

Sebuah pathname dapat berubah makna ketika proses sedang me-resolve-nya. Rename direktori, symbolic link, mount point, dan komponen .. dapat mengarahkan lookup keluar dari direktori yang dimaksud program sebagai batas. Linux openat2() menempelkan kebijakan resolusi langsung pada proses lookup. struct open_how memiliki bit mask resolve, sehingga kernel dapat menolak path ketika resolusinya melanggar batas yang dipilih caller, bukan hanya mengandalkan pemeriksaan yang dilakukan sebelum open(). Directory file descriptor menetapkan titik awal Seperti openat(), openat2() dapat me-resolve pathname relatif dari directory file descriptor:

Rekayasa Perangkat Lunak 19 Sep 2026 7 min read

Open File Description Lock Mengikat Byte Range ke Instance File

Sebuah byte-range lock dapat melindungi inode yang sama tetapi memiliki semantik lifetime yang sangat berbeda bergantung pada objek pemilik lock. Record lock fcntl() tradisional terkait dengan proses. Open file description lock justru menempel pada open file description kernel yang dirujuk oleh descriptor. Pergeseran ini mengubah operasi close mana yang melepas lock, state yang bertahan setelah fork(), serta kemampuan dua thread dalam satu proses untuk saling berkompetisi pada region file yang sama.

Linux 19 Sep 2026 5 min read

Idmapped Mount Memetakan Ulang Ownership Tanpa Menulis Ulang Inode

Inode yang sama dapat terlihat memiliki ownership berbeda melalui dua mount point tanpa chown() rekursif. Idmapped mount Linux menempelkan ID mapping pada sebuah mount, sehingga penyajian ownership dan pemeriksaan permission di VFS dapat menerjemahkan user ID serta group ID untuk view tersebut sementara ownership yang disimpan filesystem tetap sama. Properti ini memisahkan metadata inode persisten dari view identitas yang diekspos pada mount tertentu. Mekanisme tersebut berguna ketika satu pohon filesystem perlu dipakai container dengan user namespace yang memetakan ID secara berbeda dari host.

Rekayasa Perangkat Lunak 18 Sep 2026 7 min read

MAP_SHARED mmap Menghubungkan Write Memori dengan State Page Berbasis File

Mapping MAP_SHARED yang writable memungkinkan proses mengubah state berbasis file dengan memory store biasa. Byte diakses melalui virtual memory, bukan dikirim lewat write(), tetapi mapping tersebut tetap berpartisipasi dalam state filesystem: perubahan dapat terlihat melalui shared mapping lain dan file I/O, lalu dirty page dapat ditulis kembali ke storage. Antarmuka ini menyatukan beberapa mekanisme ke dalam satu rentang alamat. CPU store, page fault, residensi page cache, writeback filesystem, dan persistensi storage dapat terlibat dalam siklus hidup byte yang sama. Menyamakan store yang berhasil dengan output file yang sudah durable menghapus batas yang tetap dipisahkan oleh sistem operasi.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux renameat2 Membuat Kebijakan Penggantian Path Bersifat Atomik

Rename pathname mengubah entri direktori sementara file descriptor yang sudah terbuka tetap merujuk ke objek dasar yang sama. Linux renameat2() menambahkan kebijakan pada pembaruan namespace tersebut: pemanggil dapat menolak penggantian, menukar dua nama yang sudah ada, atau meminta whiteout untuk operasi union filesystem. Kebijakan ini dijalankan sebagai bagian dari operasi rename, bukan sebagai pemeriksaan terpisah di userspace. Interface ini khusus Linux. Argumen flags bernilai nol memberikan perilaku renameat(), sedangkan flag nonnol menambahkan semantik Linux yang juga bergantung pada dukungan filesystem yang di-mount.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux openat2 Membatasi Resolusi Path di Dalam Batas Direktori

Pathname yang diberikan ke openat2() dapat diresolusikan relatif terhadap file descriptor direktori sambil meminta kernel menegakkan batas pada proses resolusi itu sendiri. Perbedaan ini penting saat proses menerima komponen path dari sumber dengan tingkat kepercayaan lebih rendah. Pemeriksaan string dapat memeriksa teks pathname, tetapi pemeriksaan itu sendiri tidak dapat membekukan namespace filesystem selama lookup berlangsung. openat2() menempatkan kebijakan bersama operasi lookup. struct open_how memisahkan flag open biasa dari flag resolve yang membatasi traversal. Batas yang dihasilkan berkaitan dengan semantik resolusi, bukan sekadar bentuk teks sebuah path.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux inotify Melaporkan Event Entri Direktori, Bukan Identitas Path yang Persisten

Sebuah watch inotify tidak menjadikan pathname sebagai identifier yang persisten. Linux menempelkan watch pada objek filesystem yang dipilih saat inotify_add_watch() berhasil, lalu menghasilkan record yang mendeskripsikan aktivitas terkait objek yang dipantau dan entri direktori. Nama dapat berpindah, objek dapat hilang, dan detail event dapat terlewat ketika queue mengalami overflow. Batas ini relevan bagi file synchronizer, pemuat ulang konfigurasi, indexer, dan service supervisor. Event stream dapat memberi sinyal bahwa state filesystem lokal berubah, tetapi rekonstruksi state yang otoritatif tetap bergantung pada operasi filesystem yang dilakukan setelah event diterima.

Rekayasa Perangkat Lunak 18 Sep 2026 7 min read

Linux copy_file_range Memisahkan Semantik Penyalinan dari Pergerakan Data

copy_file_range() meminta Linux menyalin byte di antara regular file tanpa mengharuskan aplikasi memindahkan byte tersebut melalui buffer user space. Pemanggilan ini mendefinisikan operasi rentang byte, tetapi tidak menentukan mekanisme transfer fisiknya. Filesystem dapat melakukan pergerakan data biasa, memakai mekanisme sharing copy-on-write seperti reflink, atau memakai jalur akselerasi lain yang didukung sambil mempertahankan isi file yang terlihat sesuai operasi tersebut. Pemisahan itu merupakan batas utama API. Aplikasi menentukan rentang sumber dan tujuan lalu mengamati jumlah byte yang dikembalikan. Kernel dan filesystem tetap memiliki keleluasaan untuk memilih mekanisme yang merealisasikan salinan.

Linux 18 Sep 2026 5 min read

Flag Resolve openat2 Membatasi Traversal Path per Operasi Open

Sebuah pathname yang diberikan ke openat2() dapat ditolak walaupun pathname yang sama berhasil diresolusikan melalui openat(). Perbedaannya berasal dari open_how.resolve: Linux dapat menerapkan batas traversal ketika setiap komponen path diresolusikan untuk satu operasi open. Batas penanganan path pun berubah. File descriptor direktori dapat berfungsi lebih dari sekadar titik awal; flag resolve dapat membatasi escape, traversal symbolic link, perpindahan mount, dan lookup yang membutuhkan pekerjaan di luar state cache. Kebijakan resolusi melekat pada satu operasi openat2() memperluas model openat() dengan struct open_how yang dapat diperluas:

Linux 17 Sep 2026 4 min read

Truncating File yang Dipetakan Dapat Memicu SIGBUS

Sebuah process dapat tetap memiliki rentang address mmap() yang valid setelah operasi lain mengecilkan backing file, lalu menerima SIGBUS ketika menyentuh mapped page yang berada di luar akhir file baru. Mapping-nya sendiri tidak hilang. Backing object-nya tidak lagi mencakup setiap page yang semula direferensikan oleh virtual mapping. Boundary ini mudah terlewat karena mapping lifetime dan file size adalah state yang terpisah. Menutup file descriptor awal tidak membatalkan mapping yang sudah terbentuk, dan mengecilkan file tidak bertindak seperti munmap() pada setiap process yang memetakannya.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

renameat2 RENAME_EXCHANGE Menukar Dua Path dalam Satu Operasi Filesystem

renameat2() dengan RENAME_EXCHANGE mengubah dua directory entry yang sudah ada sebagai satu operasi rename atomik. Sebelum pemanggilan, setiap pathname mengarah ke objek asalnya; setelah pemanggilan berhasil, setiap pathname mengarah ke objek yang sebelumnya memakai path satunya. Tidak ada keadaan sukses antara kedua titik itu ketika salah satu nama hanya terhapus atau tertimpa. Sifat ini berbeda dari rename() biasa. Rename konvensional dapat mengganti destination secara atomik, tetapi replacement menghilangkan nama destination dari namespace. Exchange mempertahankan kedua objek bernama dan menukar posisi keduanya.

Linux 17 Sep 2026 4 min read

rename Mengganti Directory Entry Secara Atomik di Linux

Pemanggilan rename() yang berhasil dapat mengganti pathname tujuan yang sudah ada tanpa memperlihatkan keadaan perantara ketika nama tujuan tersebut hilang. Proses yang melakukan resolusi terhadap tujuan akan melihat directory entry lama atau penggantinya, dengan tetap tunduk pada batasan filesystem dan mount. Transisi namespace atomik tersebut lebih sempit daripada sejumlah sifat yang sering diasosiasikan dengan penggantian file. Operasi ini tidak membuat write sebelumnya menjadi durable, tidak memaksa metadata direktori ke penyimpanan stabil, dan tidak membatalkan file descriptor yang sudah merujuk ke file yang diganti.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

openat2 Membatasi Resolusi Path pada Batas Lookup

Sebuah pathname dapat dimulai di bawah direktori tepercaya tetapi tetap keluar dari subtree tersebut selama resolusi. Komponen .., symbolic link, magic link, atau perpindahan mount dapat mengubah objek yang akhirnya dicapai meskipun directory file descriptor awal berasal dari lokasi tepercaya. Linux openat2() menempatkan constraint langsung di dalam resolusi pathname, sehingga kernel dapat menolak lookup yang melanggar batas yang dipilih. Perilaku ini berbeda dari memeriksa string pathname sebelum memanggil open(). Resolusi path bekerja terhadap objek filesystem dan state namespace, bukan hanya teks. openat2() memperluas model openat() dengan struct open_how yang memiliki field resolve untuk mengendalikan traversal komponen pathname.

Rekayasa Perangkat Lunak 17 Sep 2026 8 min read

Linux openat2 Membuat Batas Resolusi Path Menjadi Atomik

Sebuah pathname dapat menunjuk ke objek yang berbeda ketika lookup kedua dilakukan. Di Linux, openat2() menangani batas ini dengan menempelkan aturan resolusi pada operasi kernel yang sama dengan operasi yang menelusuri pathname dan membuka objek hasilnya. Kebijakan dievaluasi selama lookup berlangsung, bukan disimpulkan dari pathname yang diperiksa sebelum atau sesudah file dibuka. Perbedaan ini penting ketika proses menerima komponen path dari sumber yang kurang tepercaya tetapi ingin memastikan resolusi tetap berada di dalam direktori tertentu, menolak symbolic link, mencegah perpindahan mount, atau mewajibkan lookup yang hanya memakai cache. Objek yang penting bukan hanya string input, melainkan hasil resolusi string tersebut terhadap namespace aktif yang isi direktori, link, dan mount-nya dapat berubah secara bersamaan.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Linux O_TMPFILE Menjaga File Staging di Luar Namespace

Linux O_TMPFILE membuat regular file tanpa lebih dulu menempatkan nama file tersebut di sebuah direktori. Pemanggil menerima file descriptor dan dapat menulis data, menetapkan metadata, atau membatalkan objek saat belum ada pathname yang mengekspos file yang baru disiapkan sebagian. Jika publikasi diperlukan, operasi link berikutnya dapat memasang directory entry pada inode yang sama. Mekanisme ini memisahkan konstruksi objek dari publikasi namespace. Mekanisme tersebut tidak membuat seluruh operasi filesystem di sekitarnya menjadi transaksional, dan tidak menyediakan semantik penggantian untuk tujuan yang sudah ada. Batas manfaatnya lebih sempit: state file perantara dapat tetap terjangkau hanya melalui referensi terbuka sampai proses secara eksplisit membuat nama.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Linux mmap Memisahkan Masa Hidup Mapping dari File Descriptor

mmap() berbasis file yang berhasil membuat mapping virtual memory yang tidak bergantung pada file descriptor sumber agar tetap terbuka. Linux secara eksplisit mengizinkan descriptor ditutup segera setelah mmap() selesai tanpa membatalkan mapping. Mapping dan descriptor dengan demikian merupakan referensi terpisah dengan masa hidup yang terpisah. Pemisahan ini mudah terlewat karena keduanya berasal dari file terbuka yang sama. Dampaknya menjadi penting ketika kode menutup descriptor secara agresif, mengganti pathname, melakukan truncate pada file, atau membawa mapping melewati fork(). Alamat mapped bukan read() tertunda melalui descriptor awal; alamat tersebut beroperasi dalam virtual-memory system dengan kontrak mapping tersendiri.

Rekayasa Perangkat Lunak 17 Sep 2026 7 min read

Linux Direct I/O Menjadikan Alignment Bagian dari Antarmuka File

Membuka regular file dengan O_DIRECT dapat membuat alamat user-space buffer, file offset, dan panjang transfer menjadi bagian yang terlihat dari antarmuka file. read() atau write() yang secara lain valid dapat gagal dengan EINVAL ketika salah satu nilai tersebut melanggar constraint direct I/O untuk file itu. Pada kombinasi filesystem dan perilaku kernel tertentu, operasi yang misaligned dapat beralih ke buffered I/O. Batas ini mudah terlewat karena buffered file I/O biasa sebagian besar menyembunyikan geometri transfer fisik. Page cache dan filesystem dapat menerima application buffer pada alamat arbitrer lalu memediasi transfer secara internal. Direct I/O mengurangi mediasi tersebut, sehingga constraint yang biasanya berada di bawah batas system call dapat menjadi requirement untuk memory aplikasi dan bentuk request.

Rekayasa Perangkat Lunak 17 Sep 2026 7 min read

Linux copy_file_range Memisahkan Semantik Penyalinan dari Implementasi Transfer

Linux copy_file_range Memisahkan Semantik Penyalinan dari Implementasi Transfer Pemanggilan copy_file_range() yang berhasil melaporkan jumlah byte, bukan janji mengenai jalur fisik yang ditempuh byte tersebut. Linux dapat memenuhi permintaan melalui akselerasi spesifik filesystem, jalur transfer di dalam kernel, atau implementasi lain yang diizinkan interface filesystem aktif. Aplikasi memperoleh operasi penyalinan range dengan semantik offset dan nilai balik yang terdefinisi; aplikasi tidak memperoleh jaminan bahwa blok storage diduplikasi secara fisik. Batas ini penting pada replikasi file, staging backup, pengisian cache, dan pemindahan object lokal. Kode yang memperlakukan pemanggilan ini hanya sebagai versi lebih cepat dari loop read() dan write() dapat melewatkan properti yang tampak pada batas API: short copy sah, sparse hole dapat berubah menjadi data teralokasi, dukungan lintas filesystem bersifat kondisional, dan implementasi filesystem dapat memanfaatkan sharing copy-on-write.

Rekayasa Perangkat Lunak 17 Sep 2026 7 min read

File-Backed Mapping Dapat Bertahan Lebih Lama daripada Ukuran File yang Diasumsikan

Sebuah proses dapat mempertahankan virtual memory mapping yang valid setelah pihak lain memperpendek file yang dipetakan. Rentang alamatnya masih ada di dalam proses, tetapi backing object mungkin tidak lagi memiliki setiap page yang sebelumnya direpresentasikan oleh rentang tersebut. Pada sistem POSIX, akses ke satu page terpetakan penuh yang berada di luar akhir file baru dapat menghasilkan SIGBUS, bukan berperilaku seperti pembacaan file biasa yang gagal. Batas ini membuat file-backed mmap() berbeda dari menyalin byte ke private heap storage. Pointer ke dalam mapping bukan bukti bahwa extent file yang sesuai masih ada. Alamat virtual, lifetime mapping, identitas file, dan ukuran file saat ini merupakan state yang saling berkaitan, tetapi bukan satu objek yang tidak dapat dipisahkan.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Event Linux inotify Merupakan Aliran Perubahan yang Dapat Kehilangan Data

File descriptor inotify memaparkan aktivitas filesystem sebagai antrean terurut berisi record event, tetapi antrean tersebut bukan riwayat otoritatif atas state namespace. Event identik yang belum dibaca dapat digabungkan, kapasitas antrean terbatas, dan overflow secara eksplisit berarti sejumlah event telah hilang. Proses yang memperlakukan aliran ini sebagai transaction log lengkap dapat mempertahankan state yang tidak lagi sesuai dengan filesystem. Model yang lebih tepat adalah notifikasi perubahan dengan kewajiban pemulihan. Event dapat menjaga cache tetap mutakhir secara inkremental selama alirannya utuh; kondisi tertentu memutus riwayat inkremental tersebut dan menuntut rekonsiliasi terhadap state filesystem.