Muhammad Ikhsan

Ubuntu: Melacak dan Menghapus Data yang Menuh-Menuhin Server

06. Mar. 2021

Saya memiliki sebuah droplet kecil-kecilan di Digital Ocean yang saya isi dengan Ubuntu. Server minimalis ini saya gunakan untuk server dev proyek-proyek di apla[dot]us maupun kerjaan dari beberapa rekan, juga beberapa proyek pribadi, termasuk blog ini.

Beberapa hari kemarin, saat saya men-setup deployment CI/CD (dev) proyek Laravel, script envoy-nya selalu gagal saat menginstall packages yang diperlukan, composer install. Selidik punya selidik dari error pipeline di Gitlab, ternyata server dengan kapasitas 20GB saya sudah penuh.

cat server full
GIF via Giphy

Saya kemudian memastikan dengan ssh ke servernya. Baru masuk ke server, saya sudah mendapati error yang kurang lebih mengindikasikan bahwa ada sesuatu yang penuh tapi bukan dompet. Saat saya mencoba menjalankan perintah dan memencet tab untuk auto-complete, muncul pesan tab autocomplete command line: sudo rm -rf 2020-bash: cannot create temp file for here-document: No space left on device.

Kemudian sebagai root, saya menjalankan perintah df -h untuk melihat kapasitas filesystem yang ada, berapa yang tersisa dan berapa yang sudah terpakai. Hasilnya meng-konfirm error dari pipeline, filesystem utama saya di /dev/vda ternyata sudah terpakai 100%.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            487M     0  487M   0% /dev
tmpfs           100M   11M   89M  11% /run
/dev/vda         20G   20G  20G  100% /
tmpfs           497M     0  497M   0% /dev/shm
...


Kalau di desktop, akan mudah dan nyaman dalam meng-scan kapasitas file system komputer kita, hasilnya juga ditampikan dengan GUI yang mudah dibaca. Cukup dengan aplikasi Disk Usage Analyzer bawaan Ubuntu kita bisa melacak di folder mana saja yang memakan kapasitas disk yang banyak. Sehingga kita bisa mengecek isinya untuk kemudian memutuskan apakah file/directory tersebut penting atau tidak.

tampilan Disk Usage Analyzer
tampilan Disk Usage Analyzer

Sementara untuk di server yang minim bahkan gak ada GUI, untuk melakukan hal tersebut di atas kita perlu menjalankan beberapa perintah melalaui terminal, tentu sebelumnya sudah terhubung ke server melalui ssh. Kita cek di root directory kita ukuran setiap folder yang ada dengan perintah sudo du -h --max-depth=1 /.

Untuk kasus saya, terlihat folder var memiliki ukuran yang cukup tinggi. Ini tidak mengherankan karena di var terdapat log hampir semua service yang berjalan yang seharusnya dihapus dan hanya menyisakan log dalam rentang waktu tertentu.

Saya coba mengecek ukuran setiap folder yang ada di dalam var dengan sudo du -h --max-depth=1 /var. Ternyata folder dengan ukuran terbesar bukanlah log, melainkan folder tempat saya menyimpan source deployment beberapa aplikasi yang masih dalam proses development dengan frekuensi deploymentnya cukup sering. Kesalahan saya adalah ada dua proyek yang di script deploymennya tidak saya sertakan perintah untuk menghapus folder rilis sebelumnya jika ada rilis terbaru. Akhirnya terdapat puluhan bahkan ada yang ratusan folder rilis dalam satu aplikasi yang menumpuk.

server full
GIF via Giphy

Folder-folder rilis yang sudah tidak terpakai tersebut kemudian saya hapus dengan perintah rm -rf namaFolder. Untuk menghindari kejadian yang sama terulang lagi, proses penghapusan folder rilis yang sudah tidak terpakai ini saya otomasi di script deployment aplikasi tersebut dengan menambahkan task untuk menjalankan perintah rm -rf $(ls -t | tail -n +{{ $keep }}); setelah deployment rilis terbaru berhasil. Variable $keep adalah berapa jumlah rilis terakhir yang ingin kita sisakan untuk arsip dan jaga-jaga untuk rollback manual dengan symbolic link.

Oh iya, kalau mau coba-coba ngehost aplikasi di digital ocean, bisa daftar pakai link referal saya biar depat kredit $100 di akun digital ocean mu.

tags: digital ocean laravel ubuntu