Mengatasi Disk Penuh pada VPS Linux
Server tiba-tiba tidak bisa menulis log. Database mengembalikan error "No space left on device". SSH session berjalan lambat. Gejala-gejala ini menandakan satu masalah: ruang disk VPS Anda habis.
Jika tidak segera ditangani, disk penuh dapat mengganggu operasi database, menghentikan aplikasi web, dan bahkan mencegah Anda login untuk memperbaikinya. Panduan ini membahas cara mendiagnosis, membersihkan, dan mencegah disk penuh pada VPS Linux.
Gejala Umum Disk Penuhโ
Beberapa tanda bahwa disk server sudah mencapai batas kapasitas:
- Database gagal menulis โ MySQL atau PostgreSQL mengembalikan error "No space left on device" atau "Disk full".
- Log tidak tertulis โ Aplikasi tidak lagi mencatat log, karena file system tidak memiliki ruang.
- Perintah dasar gagal โ
apt,yum,systemctl, dan utilitas lain gagal dengan pesan disk penuh. - Tidak bisa SSH atau akses Console โ Jika disk 100% penuh, proses SSH daemon bisa gagal berjalan.
- Resize atau upgrade server gagal โ VPS tidak dapat di-resize karena snapshot atau backup membutuhkan ruang.
Diagnosis dengan df dan duโ
Langkah pertama adalah mengidentifikasi partisi mana yang penuh dan direktori mana yang paling banyak memakan ruang.
Gunakan df -h untuk melihat penggunaan disk per partisi:
df -h
Output:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 19G 1.0G 95% /
Kolom Use% menunjukkan persentase penggunaan. Perhatikan partisi dengan nilai di atas 80% โ terutama partisi root (/).
Untuk mengetahui direktori mana yang paling besar, gunakan du:
sudo du -sh /* 2>/dev/null | sort -rh | head -10
Perintah di atas menampilkan 10 direktori terbesar di level root. Jika ada partisi terpisah seperti /var atau /home, jalankan du dari mount point tersebut.
Pembersihan Ruang Diskโ
Setelah menemukan direktori yang bermasalah, lakukan pembersihan sesuai jenis datanya.
Bersihkan Cache APTโ
Paket yang di-download oleh apt disimpan di /var/cache/apt/archives/. Cache ini bisa memakan ratusan megabyte.
sudo apt clean
sudo apt autoclean
apt clean menghapus semua file .deb yang sudah di-download. apt autoclean hanya menghapus versi paket yang sudah tidak tersedia di repository.
Bersihkan Log Lamaโ
Log system di /var/log/ bisa membesar seiring waktu, terutama jika tidak ada log rotation yang aktif.
Cek ukuran log:
sudo du -sh /var/log/* | sort -rh | head -10
Bersihkan log yang sudah tidak diperlukan:
sudo journalctl --vacuum-time=7d
sudo logrotate -f /etc/logrotate.conf
Opsi --vacuum-time=7d pada journalctl hanya menyimpan log systemd dalam 7 hari terakhir. Sesuaikan nilai ini dengan kebutuhan retensi Anda.
Hapus Kernel Lama (Ubuntu/Debian)โ
Setiap kali kernel diperbarui, kernel versi lama tetap tersimpan di /boot/. Kernel lama bisa dihapus setelah versi baru berjalan stabil.
dpkg --list | grep linux-image
sudo apt autoremove --purge
apt autoremove menghapus paket yang tidak lagi dibutuhkan โ termasuk kernel lama yang sudah digantikan.
Bersihkan Temporary Filesโ
Direktori /tmp/ dan /var/tmp/ terkadang menyimpan file sisa dari proses yang sudah selesai.
sudo find /tmp -type f -atime +7 -delete
sudo find /var/tmp -type f -atime +7 -delete
Perintah di atas menghapus file di /tmp/ yang tidak diakses dalam 7 hari terakhir.
Cari File Besar Lainnyaโ
File besar bisa muncul di lokasi yang tidak terduga โ seperti backup database, file log aplikasi, atau dump file.
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20
Setelah file ditemukan, evaluasi apakah file tersebut masih diperlukan. Hapus atau pindahkan ke penyimpanan lain.
Pencegahanโ
Aktifkan Log Rotationโ
Pastikan log rotation berjalan secara berkala. Konfigurasi default ada di /etc/logrotate.conf dan /etc/logrotate.d/. Tambahkan konfigurasi untuk log aplikasi kustom yang tidak tercakup.
Monitor Penggunaan Diskโ
Pasang alat monitoring untuk memantau penggunaan disk secara berkala:
# Cek penggunaan disk via cron โ kirim notifikasi jika > 80%
df -h / | awk '{print $5}' | tail -1 | grep -v 'Use%'
Integrasikan monitoring dengan alat seperti Grafana, Netdata, atau script notifikasi sederhana.
Atur Retensi Databaseโ
Buat jadwal untuk menghapus atau mengarsipkan data lama:
- Log database: set
expire_logs_dayspada MySQL. - Backup lama: simpan hanya N hari terakhir.
- Data staging: hapus secara periodik jika tidak diperlukan.
Verifikasiโ
Setelah pembersihan, jalankan kembali:
df -h
Pastikan persentase penggunaan sudah turun ke angka yang wajar (di bawah 80%). Uji juga bahwa aplikasi, database, dan SSH berjalan normal.
Ringkasan Perintah Cepatโ
| Langkah | Perintah |
|---|---|
| Cek penggunaan disk | df -h |
| Cari direktori besar | sudo du -sh /* 2>/dev/null | sort -rh | head -10 |
| Bersihkan APT cache | sudo apt clean && sudo apt autoclean |
| Vacuum journal | sudo journalctl --vacuum-time=7d |
| Hapus kernel lama | sudo apt autoremove --purge |
| Cari file > 100 MB | sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | head -20 |
Butuh Bantuan?โ
Jika disk VPS tetap penuh setelah pembersihan, atau Anda kesulitan mengakses server, hubungi tim dukungan melalui Tiket Bantuan.
