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.
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.
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.
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.