Topik ini menjelaskan isu umum pada ossfs 2.0 dan solusinya.
Informasi umum
Semua pesan error ossfs 2.0 mencakup informasi error dari permintaan HTTP. Untuk memecahkan masalah, periksa log guna menemukan kode status respons HTTP terkait, seperti 4** dan 5**, serta pesan yang dikembalikan oleh OSS.
Isu pemasangan (mounting)
Error mount: Gagal memasang ossfs2
Analisis masalah: Ini adalah error umum. Periksa log untuk detail spesifik. Error ini biasanya disebabkan oleh izin yang salah atau parameter konfigurasi yang tidak valid. Contohnya:
2025/03/21 15:09:59.124152|ERROR|th=00007F1238FF5780|ossfs_v2.cpp:1469|Check bucket failed with err: AccessDenied
AccessKey yang digunakan tidak memiliki izin untuk mengakses bucket tersebut. Pastikan AccessKey Anda memiliki izin yang diperlukan dan nama bucket benar.
2025/03/21 15:14:29.671470|ERROR|th=00007F2304FF5780|ossfs_v2.cpp:1469|Check bucket failed with err: InvalidAccessKeyId
AccessKey yang Anda konfigurasikan tidak valid.
2025/03/21 15:15:13.805814|ERROR|th=00007FD591D38780|ossfs_v2.cpp:1469|Check bucket failed with err: SignatureDoesNotMatch
Solusi: Perbaiki konfigurasi berdasarkan pesan error di log, lalu lakukan mount ulang.
Error mount: Direktori tidak ada
Analisis masalah: Direktori yang ditentukan tidak ada.
Solusi: Buat direktori tersebut, lalu jalankan kembali perintah mount.
Error mount: Direktori tidak kosong
Analisis masalah: ossfs 2.0 memerlukan direktori titik pemasangan yang kosong, tetapi direktori yang ditentukan tidak kosong.
Solusi: Periksa apakah sistem file lain sudah dipasang ke direktori tersebut. Jika ya, lepas pemasangan sistem file tersebut dengan perintah umount. Jika tidak ada sistem file lain yang dipasang, hapus file sisa dari direktori tersebut atau lakukan mount ke direktori kosong yang berbeda.
Error mount: versi FUSE_3.12' tidak ditemukan
Analisis masalah: File instalasi yang diperlukan tidak tersedia, sehingga ossfs 2.0 menggunakan kembali library libfuse yang terinstal di sistem, yang versinya sudah usang.
Solusi: Copot instalasi paket tersebut, lalu instal ulang.
Error mount: Perangkat Fuse tidak ditemukan
Analisis masalah: Perangkat /dev/fuse tidak dapat diakses. Masalah ini biasanya terjadi di lingkungan container yang tidak memiliki izin akses yang diperlukan.
Solusi: Saat melakukan mount di dalam container, jalankan container tersebut dalam mode istimewa (privileged mode).
Isu baca dan tulis
Error tulis: File terlalu besar
Analisis masalah: Secara default, ossfs 2.0 menggunakan ukuran part sebesar 8 MiB, yang mendukung ukuran file maksimum 78,125 GiB. Error ini terjadi saat menulis file yang lebih besar dari batas tersebut.
Solusi: Saat memasang bucket, Anda dapat mengonfigurasi opsi upload_buffer_size untuk meningkatkan ukuran file maksimum yang didukung. Harap dicatat bahwa pengaturan upload_buffer_size memerlukan lebih banyak sumber daya memori. ossfs 2.0 mendukung opsi total_mem_limit untuk mengontrol penggunaan memori. Untuk informasi selengkapnya, lihat Mount options.
Error tulis: Argumen tidak valid
Analisis masalah: ossfs 2.0 tidak mendukung penulisan acak (random writes). Sistem hanya mendukung penulisan sekuensial yang menambahkan data ke akhir file. Jika Anda menulis ke posisi selain akhir file saat ini, ossfs 2.0 akan mengembalikan error "Invalid argument". Log berikut menunjukkan contohnya:
2025/04/14 11:00:39.307250|INFO |th=00007FEB88011870|fs.cpp:877|open file /fio/random-write-file.0.0
nodeid: 5, flags: 32770, read_only: 0, truncate: 0, append: 0
2025/04/14 11:00:39.307551|ERROR|th=00007FEB88011DB0|file.cpp:294|append only file size: 0, offset: 63963136, write_off_: 0
Solusi: Jika aplikasi Anda memerlukan penulisan acak, beralihlah ke ossfs 1.0. Dalam banyak kasus, yang tampak sebagai penulisan acak sebenarnya adalah penulisan konkuren ke handle file yang sama. Jika demikian, beralihlah ke penulisan sekuensial single-threaded. ossfs 2.0 dioptimalkan untuk penulisan sekuensial dan memberikan throughput tinggi dengan satu thread.
Perintah git clone gagal di titik pemasangan
Analisis masalah: Secara default, ossfs 2.0 tidak mendukung operasi baca dan tulis konkuren pada file yang sama. Membaca file saat sedang ditulis dapat mengembalikan data lama (stale) atau menyebabkan error baca. Perintah git clone menggunakan pola akses baca-sambil-menulis (read-while-write), yang dapat menghasilkan entri log seperti berikut:
2025/03/21 14:50:52.412572|ERROR|th=00007FE970FF4940|file.cpp:1385|src file /libfuse/.git/objects/pack/tmp_pack_PFRsQf read failed, read : -1, expectRead : 1048576, size_ : 4556308, offset : 0, errno: 2
Pada log tersebut, errno 2 adalah kode error Linux ENOENT, yang menunjukkan bahwa data file tidak dibaca dengan benar. Jika Anda mengalami error baca pada aplikasi lain, periksa log untuk pesan serupa. Jika operasi baca gagal tanpa mengembalikan error "file not found", hal ini bisa terjadi jika aplikasi belum menutup file, sehingga file tersebut belum diunggah ke OSS.
Solusi: Hindari penggunaan perintah terkait. Anda dapat menjalankan git clone ke disk lokal, lalu gunakan perintah cp untuk menyalin file ke titik pemasangan.
Penulisan konkuren ke file yang sama gagal
Analisis masalah: Saat beberapa handle file terbuka untuk file yang sama di ossfs 2.0, hanya satu handle yang mendukung penulisan sekuensial. Operasi tulis dari handle file lain akan gagal. Log berikut menunjukkan contoh error tersebut:
2025/03/21 14:59:22.765822|ERROR|th=00007FE990006990|file.cpp:231|file 181 has already been written!
Solusi: Hindari penulisan konkuren ke file yang sama. ossfs 2.0 dioptimalkan untuk penulisan sekuensial, dan satu thread saja sudah dapat memberikan throughput tinggi.
Isu lainnya
Error unmount: Target sedang digunakan
Analisis masalah: Proses yang mengakses file di direktori titik pemasangan /mnt/ossfs2 menghalangi operasi unmount.
Solusi:
-
Gunakan perintah
lsof /mnt/ossfs2untuk menemukan proses yang mengakses direktori tersebut. -
Hentikan proses tersebut.
-
Jalankan kembali perintah unmount.
Banyak error 404 di log
Informasi latar belakang: Entri 404 Not Found umum ditemukan di log ossfs 2.0. Dalam kebanyakan kasus, ini bukan error sistem, melainkan perilaku yang diharapkan agar ossfs 2.0 dapat meniru semantik sistem file lokal.
Sebelum melakukan operasi pada suatu file, sistem operasi memeriksa apakah objek target ada. Pemeriksaan ini dapat memicu banyak permintaan probe ke OSS. Jika objek tidak ada, OSS mengembalikan kode status 404.
Langkah-langkah berikut menjelaskan proses lengkap yang digunakan ossfs 2.0 untuk memeriksa keberadaan objek:
-
Kirim permintaan GetObjectMeta untuk menentukan apakah path tertentu, seperti
object, ada sebagai objek aktual.Jika objek ada, sistem mengembalikan metadata-nya. Jika objek tidak ada, sistem mengembalikan error 404 dan melanjutkan ke langkah berikutnya.
CatatanMeskipun objek tidak ada, ossfs 2.0 tetap perlu menentukan apakah path tersebut merupakan direktori.
-
Setelah menerima error 404, kirim permintaan
ListObjectsuntuk menentukan apakah path yang ditentukan merupakan 'direktori', yaitu dengan mengkueri objek yang memiliki awalanobject/.Jika hasilnya kosong, path tersebut tidak ada. Jika hasilnya tidak kosong, direktori tersebut ada, dan sistem akan mencantumkan isinya.
Analisis masalah:
-
Saat Anda menggunakan perintah seperti
statuntuk mengakses file yang tidak ada, sistem mengembalikan error 404, yang dipetakan ke error "No such file or directory" pada sistem file lokal. -
Sebelum membuat file atau direktori secara batch, sistem operasi memeriksa apakah file atau direktori target sudah ada. Sistem hanya mengirim permintaan pembuatan jika file atau direktori tersebut belum ada. Error 404 yang dihasilkan selama pemeriksaan ini merupakan perilaku yang diharapkan dan tidak menunjukkan kegagalan sistem.
Solusi: Meskipun error 404 merupakan hal yang diharapkan, permintaan probe yang sering dalam skenario konkurensi tinggi atau operasi batch dapat memengaruhi kinerja. Anda dapat menggunakan opsi berikut untuk mengoptimalkan kinerja:
Setelah Anda mengonfigurasi opsi ini, ossfs 2.0 tidak dapat mendeteksi perubahan pada file di OSS hingga cache lokal kedaluwarsa.
-
Tingkatkan
--attr_timeoutuntuk memperpanjang durasi cache metadata. Durasi default adalah 60 detik.Menanyakan file atau direktori sebelum metadata-nya kedaluwarsa menghindari permintaan berulang ke OSS.
-
Konfigurasi
--oss_negative_cache_sizedan--oss_negative_cache_timeoutuntuk mengaktifkan cache negatif.Saat file yang tidak ada dikueri untuk pertama kali, hasilnya di-cache di memori. Kueri berikutnya untuk file yang sama dilayani dari cache negatif lokal hingga kedaluwarsa, sehingga menghindari permintaan lebih lanjut ke OSS.
-
--oss_negative_cache_size: Jumlah entri dalam cache negatif untuk file OSS. Nilai default adalah 10.000. -
--oss_negative_cache_timeout: Waktu kedaluwarsa cache negatif file OSS. Nilai default adalah 0.
-