Ruang disk habis
Cara cepat menemukan apa yang menghabiskan disk, membebaskan gigabyte dengan aman, dan memahami jebakannya: file terbuka yang sudah dihapus dan inode yang habis.
Diperbarui 23 Agustus 2026
Disk penuh merusak semuanya sekaligus: database berhenti menerima penulisan, situs mengembalikan error, journalctl menolak bekerja, dan kadang bahkan SSH tidak mengizinkan Anda masuk, karena tidak ada lagi ruang untuk menulis log sesi. Anda perlu bertindak cepat dan berurutan.
Periksa
df -h
df -i
Perintah pertama menampilkan ruang, perintah kedua menampilkan inode. Inode yang penuh menghasilkan error "No space left on device" yang sama meskipun masih ada gigabyte kosong: ini terjadi ketika sebuah direktori telah menumpuk jutaan file kecil (sesi PHP, cache, antrean).
Anda juga dapat melihat ruang terpakai di panel pada /hosting/vds/m/<id> — cincin pada tab "Overview". Cincin ini terisi dari data yang dilaporkan oleh qemu-guest-agent; jika agent telah dihapus, cincin tetap kosong dan panel menampilkan perintah pemasangan sebagai gantinya.
Temukan penyebabnya
du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
du -xh --max-depth=1 /var 2>/dev/null | sort -h | tail -15
ncdu -x / # apt install ncdu, interactive
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
Flag -x menjaga pencarian tetap dalam satu filesystem dan menghentikannya menjelajah ke /proc dan direktori yang ter-mount.
Pelaku umum: log di /var/log, cache paket di /var/cache, image dan volume Docker di /var/lib/docker, dump database, arsip yang terlupakan di /root dan /tmp, file dari rilis aplikasi lama.
Bebaskan ruang
journalctl --vacuum-size=200M
apt clean # Debian, Ubuntu
dnf clean all # AlmaLinux, CentOS Stream
docker system prune -af --volumes # careful: will remove unused volumes
find /tmp -type f -mtime +7 -delete
Untuk membatasi journal secara permanen, edit /etc/systemd/journald.conf (SystemMaxUse=300M); lihat artikel systemd journals untuk detailnya. Untuk file aplikasi, atur logrotate: tanpa rotasi, satu app.log dapat dengan mudah tumbuh hingga puluhan gigabyte.
Jebakan: file yang dihapus tetapi masih terbuka
Anda menghapus log raksasa, tetapi df menunjukkan angka yang sama. Selama sebuah proses membiarkan file tetap terbuka, ruangnya tidak dikembalikan.
lsof +L1 | head -20
Perbaikan yang tepat adalah me-restart layanan yang memegang file tersebut (systemctl restart nginx), atau memotong file tanpa menghapusnya:
: > /var/log/nginx/access.log
Jebakan: kehabisan inode
df -i
find /var/www -xdev -type d -printf '%h\n' | sort | uniq -c | sort -rn | head
Cari direktori dengan ratusan ribu file dan bersihkan secara bertahap agar Anda tidak membuat mesin mati:
find /var/lib/php/sessions -type f -mtime +2 -delete
Jika tidak ada ruang sama sekali
Ketika disk 100% penuh dan sistem hampir tidak bergerak, masuklah melalui tab "Console" di panel, bebaskan setidaknya seratus megabyte (journalctl --vacuum-size=50M hampir selalu berhasil), dan lanjutkan pemecahan masalah seperti biasa. Dalam kasus yang benar-benar buruk, rescue disk akan membantu: mesin boot ke SystemRescue, disk Anda muncul sebagai /dev/sda, dan Anda me-mount-nya lalu membersihkannya dari luar.
Agar tidak terulang lagi
- Peringatan pada ambang 85% — lihat Site downtime alerts.
- Rotasi semua log aplikasi, bukan hanya log sistem.
- Kirim dump database dan arsip keluar dari server segera, alih-alih menyimpannya di
/root. - Jika tidak ada lagi yang bisa dibersihkan dan data Anda terus bertambah, naiklah ke tier dengan disk yang lebih besar: 40, 80, 120, 160, 200 dan 250 GB. Hanya upgrade: disk tidak dapat diperkecil, dan downgrade tidak tersedia.
Jangan menghapus file dari
/var/libdan/usrsecara sembarangan: di sanalah data database dan paket sistem berada. Pahami dulu milik apa sebuah direktori, baru kemudian bersihkan.