Skip to content
VDS · Pemecahan masalah

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/lib dan /usr secara sembarangan: di sanalah data database dan paket sistem berada. Pahami dulu milik apa sebuah direktori, baru kemudian bersihkan.