touch test.txt di server memunculkan pesan galat No space left on device? Reaksi spontan kita biasanya langsung menjalankan perintah df -h untuk mengecek kapasitas penyimpanan. Namun, hasil terminal justru menunjukkan bahwa partisi utama masih tersisa puluhan gigabyte dengan penggunaan baru mencapai 40 atau 50 persen.
Situasi ini kerap memicu kebingungan bagi administrator sistem pemula atau pemilik website yang mengelola VPS mandiri. Di meja bantuan teknis hosting, keluhan semacam ini tergolong cukup rutin masuk ke antrean tiket: kapasitas gigabyte masih lapang, tetapi sistem operasi bersikeras bahwa ruang disk sudah habis. Akar masalahnya hampir selalu terletak pada konsep mendasar penyimpanan Linux yang jarang diperhatikan sampai masalah tersebut benar-benar terjadi, yaitu kehabisan inode.
Memahami Ruang Penyimpanan Lewat Buku Katalog Perpustakaan
Bagaimana Filesystem Linux Menggunakan Inode
- Pemilik file (user ID) dan grup kepemilikan (group ID).
- Hak akses (permission) seperti baca, tulis, dan eksekusi.
- Waktu pembuatan, modifikasi terakhir, dan akses terakhir (timestamps).
- Ukuran file dalam satuan byte.
- Penunjuk (pointer) ke blok-blok data fisik di disk tempat isi file sebenarnya disimpan.
mkfs. Sistem operasi menghitung rasio berdasarkan kapasitas penyimpanan, misalnya mengalokasikan satu inode untuk setiap beberapa kilobyte ruang disk. Setelah partisi dibuat, batas maksimal inode ini terkunci. Sementara pada filesystem modern seperti XFS, alokasi inode dilakukan secara dinamis, namun tetap memiliki batas atas persentase penggunaan metadata agar tidak menghabiskan seluruh disk.
Ketika sebuah program di server membuat file baru berukuran 0 byte, program tersebut tidak memakan ruang blok data sama sekali. Namun, sistem operasi tetap harus mengalokasikan satu nomor inode unik untuk file tersebut. Jika server kamu menampung jutaan file berukuran beberapa byte saja, persediaan nomor inode akan terkuras habis jauh sebelum kapasitas gigabyte pada disk terpakai.
Memeriksa Status Inode dan Mencari Direktori Penimbun
No space left on device, jangan hanya terpaku pada opsi -h pada perintah df. Opsi -h (human-readable) hanya menampilkan pemakaian kapasitas blok data. Untuk melihat kondisi kartu indeks filesystem, gunakan parameter -i (inodes).
BASH
# Cek persentase penggunaan inode di seluruh partisi
df -i
# Contoh perintah aman untuk menghitung jumlah file di tiap subdirektori
for dir in /var/*; do
[ -d "dir" ] && echo "dir: (find "dir" -maxdepth 1 2>/dev/null | wc -l)"
donedf -i menunjukkan kolom IUse% pada partisi root (/) atau partisi data sudah menyentuh angka 100%, maka diagnosisnya sudah pasti: server kehabisan alokasi inode. Kamu tidak bisa membuat file baru, tidak bisa menyalin data, dan banyak daemon sistem akan gagal menulis file PID sementara.
Penyebab umum penumpukan jutaan file kecil di server hosting biasanya berasal dari beberapa area berikut:
- Session PHP yang gagal terhapus otomatis: Direktori default session seperti
/var/lib/php/sessionsatau direktori session kustom di level user hosting sering kali menjadi sarang jutaan file session kosong jika mekanisme garbage collection PHP tidak berjalan atau cron pembersih bawaan sistem terhenti. - Spool dan antrean email lokal: Daemon mail transfer agent (MTA) seperti Postfix atau Exim yang menerima kiriman email spam lokal atau pesan bounce yang gagal dikirimkan berulang kali ke alamat yang tidak valid bisa menimbun ratusan ribu file pesan di dalam direktori
/var/spool. - Cache aplikasi atau framework: Banyak framework web generasi modern membuat file cache dalam struktur folder berulang. Jika aplikasi memiliki bug pada logika pembersihan cache atau ada pengunjung bot yang melakukan scraping dengan query string acak, sistem cache bisa membuat jutaan file halaman statis berukuran kecil.
- File temporer sistem: Direktori
/tmpatau direktori pemrosesan sementara file upload yang tidak dipantau secara berkala.
Kekeliruan Umum Saat Menghadapi Masalah Inode
rm -rf /path/to/folder/*. Saat kamu menjalankan perintah tersebut dengan wildcard bintang (*), shell Linux (seperti Bash) akan mencoba mengekspansi seluruh nama file ke dalam argumen perintah terlebih dahulu sebelum mengeksekusinya. Hasilnya, terminal akan memunculkan galat lain: Argument list too long. Sistem bahkan tidak sempat mulai menghapus file. Cara yang lebih aman dan terukur adalah menggunakan kombinasi find dengan parameter -delete atau memprosesnya secara bertahap.
Paling penting, jangan langsung memperbesar ukuran disk virtual (resize disk) di panel kontrol cloud atau VPS tanpa mengecek apakah filesystem kamu mendukung ekspansi inode secara otomatis. Pada filesystem ext4, memperbesar ukuran partisi memang bisa menambah jumlah inode karena batasannya berbasis rasio per ukuran blok baru, tetapi langkah ini hanya menunda masalah jika akar penumpukan file kecil tidak dibereskan.
Begitu direktori biang kerok ditemukan dan dibersihkan dari file-file sampah, nomor inode akan langsung dikembalikan ke daftar bebas milik sistem operasi. Perintah pembuatan file akan langsung bekerja normal kembali tanpa perlu me-restart server. Memahami perbedaan antara kapasitas blok data dan batasan metadata inode adalah kunci sederhana agar kamu tidak lagi bingung saat server melaporkan disk penuh di tengah sisa gigabyte yang melimpah.