Aplikasi dan layanan yang berjalan di instans Linux akan menghasilkan file seperti log, cache, dan data bisnis. Seiring waktu, file-file ini dapat menghabiskan seluruh disk space yang tersedia. Saat disk penuh, data baru tidak dapat ditulis, yang berpotensi menyebabkan gangguan atau malfungsi pada layanan.
Gejala
Saat mencoba membuat file atau menjalankan aplikasi di instans Linux, Anda menerima pesan error No space left on device. Pesan ini menunjukkan bahwa disk space telah habis.
Penyebab dan solusi
Sebelum memulai, buat snapshot untuk backup data Anda dan mencegah kehilangan data yang tidak disengaja.
Penyebab 1: Disk space habis
Periksa penggunaan disk.
Jalankan
sudo df -huntuk melihat penggunaan disk pada setiap mount point. Jika kolomUse%menunjukkan 100%, artinya disk space tersebut telah penuh.Bersihkan file atau direktori yang tidak diperlukan.
Gunakan perintah
sudo du -sh <directory_name>/*untuk memeriksa ukuran file dan subdirektori di dalam direktori yang ditentukan. Jika perlu, telusuri lebih dalam untuk mengidentifikasi konsumsi space di setiap level.Sebagai contoh, jalankan
sudo du -sh /mnt/*untuk memeriksa ukuran file dan subdirektori di direktori/mnt.Jika disk space masih tidak mencukupi setelah cleanup, Anda dapat mengubah ukuran disk.
Penyebab 2: Resource inode habis
Setiap file menggunakan satu inode. Disk yang berisi banyak file kecil dapat kehabisan inode meskipun disk space masih tersedia, sehingga mencegah pembuatan file baru.
Periksa penggunaan inode.
Jalankan perintah
sudo df -i. Jika kolomIUse%menunjukkan 100%, artinya semua sumber daya inode telah habis.Bersihkan file atau direktori yang tidak diperlukan.
Jalankan perintah
sudo du -sh --inodes <folder_name>/*untuk memeriksa jumlah inode yang digunakan oleh file dan subdirektori di dalam direktori tertentu. Jika perlu, telusuri lebih dalam dengan perintah tersebut untuk memeriksa penggunaan inode di setiap level.Sebagai contoh, jalankan
sudo du -sh --inodes /mnt/*untuk memeriksa jumlah inode yang digunakan oleh file dan subdirektori di direktori/mnt.Jika jumlah inode masih tidak mencukupi setelah membersihkan file, Anda dapat mengubah ukuran disk.
Penyebab 3: Disk space tidak segera dirilis meskipun file telah dihapus
Meskipun sebuah file dihapus, sistem tidak akan merilis disk space yang digunakannya selama masih ada proses yang mengakses file tersebut (proses tersebut masih memegang file descriptor-nya). Disk space hanya akan dirilis setelah proses berakhir atau file tersebut ditutup.
Instal tool
lsof.Perintah
dfdandutidak dapat mendeteksi file yang telah dihapus tetapi masih menggunakan disk space. Untuk melihat file tersebut, gunakan toollsof.Alibaba Cloud Linux dan CentOS
sudo yum install -y lsofDebian dan Ubuntu
sudo apt install -y lsofLihat storage space yang digunakan oleh file yang telah dihapus.
sudo lsof | grep delete | sort -k7 -rn | moreKolom ketujuh pada output menunjukkan ukuran file dalam byte. Jumlahkan nilai-nilai ini untuk menghitung total space yang belum dirilis.

Catat nama proses dan PID.
Jalankan
sudo lsof | grep deletedan catat nama proses serta PID di kolomCOMMANDdanPID.Mulai ulang atau hentikan layanan terkait.
Jalankan
sudo ps -ef | grep <PID>untuk memastikan tujuan proses tersebut, lalu restart atau hentikan layanan setelah mengevaluasi dampaknya.PentingRestart atau menghentikan layanan dapat memengaruhi operasional bisnis Anda. Evaluasi risikonya dengan cermat dan lakukan operasi ini selama maintenance window yang sesuai.
Penyebab 4: Mount point ditimpa oleh mount lain
Saat perangkat di-mount ke direktori yang tidak kosong, konten sebelumnya yang ada di direktori tersebut akan tersembunyi. Namun, proses yang telah membuka direktori tersebut masih dapat menulis data ke dalamnya. Penggunaan "hidden" space ini tidak dapat dideteksi oleh perinta df dan dapat menyebabkan kehabisan disk space yang tidak terduga.
Periksa mount points duplikat.
Jalankan
sudo lsblkdan periksa kolomMOUNTPOINT. Catat semua nama direktori yang digunakan sebagaiMOUNTPOINTuntuk beberapa perangkat.sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 39.8G 0 part / vdb 253:16 0 40G 0 disk └─vdb1 253:17 0 40G 0 part /mnt vdc 253:32 0 40G 0 disk └─vdc1 253:33 0 40G 0 part /mntDalam contoh ini, kedua partisi
vdb1danvdc1di-mount ke/mnt, sehingga berisiko menyebabkan mount point ditimpa.Unmount sistem file.
PentingMelakukan unmount pada sistem file dapat mengganggu layanan yang bergantung pada path tersebut. Evaluasi risikonya dan lakukan operasi ini selama maintenance window yang sesuai.
Anda bisa mendapatkan
<duplicate_mount_point>dari langkah sebelumnya.sudo umount <duplicate_mount_point>Dalam contoh ini,
/mntadalah mount point duplikat. Menjalankansudo umount /mntakan meng-unmount perangkat yang terakhir di-mount, yaituvdc1.Identifikasi perangkat underlying mount point.
Jalankan
sudo df -huntuk menemukan nama perangkat dari mount point yang visible saat ini.sudo df -hFilesystem Size Used Avail Use% Mounted on devtmpfs 3.7G 0 3.7G 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 3.7G 524K 3.7G 1% /run tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup /dev/vda3 40G 4.5G 33G 12% / /dev/vda2 200M 5.8M 194M 3% /boot/efi /dev/vdb1 40G 40G 0 100% /mnt tmpfs 747M 0 747M 0% /run/user/0Dalam contoh ini, perangkat yang sekarang ter-mount pada
/mntadalah/dev/vdb1.Atasi masalah disk space penuh.
Bersihkan file atau direktori yang tidak diperlukan dari mount point yang sebelumnya ditimpa.
Dalam contoh ini, Anda perlu membersihkan direktori
/mntyang dimount darivdb1.Jika space masih tidak mencukupi setelah pembersihan, ubah ukuran disk lalu mount ke direktori lain yang kosong.
Dalam contoh ini, target perangkat yang diubah ukurannya adalah
vdb1.
Jangan me-mount beberapa perangkat ke direktori yang sama.
Me-mount beberapa perangkat ke direktori yang sama akan menyembunyikan konten dari mount sebelumnya dan dapat menyebabkan data tertulis ke perangkat yang salah. Untuk menghindari masalah ini, selalu mount setiap perangkat ke direktori yang unik dan kosong.
Penyebab 5: File Docker menghabiskan disk space yang banyak
Operasi Docker dapat menghasilkan banyak image perantara, container yang dihentikan, dan build cache. Seiring waktu, objek-objek ini dapat menumpuk dan menghabiskan disk space.
Periksa penggunaan disk space oleh file Docker.
Jalankan perintah
sudo df -h. JikaUse%untukFilesystemdarioverlaymencapai 100%, kemungkinan Docker adalah penyebabnya.Identifikasi sumber daya Docker yang menggunakan space.
Jalankan perintah
sudo docker system df. Periksa kolomSizedanRECLAIMABLEuntuk mengidentifikasi penggunaan space.sudo docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 21 9 13.94GB 10.66GB (76%) Containers 9 5 30.09MB 0B (0%) Local volumes 6 6 259.9MB 0B (0%) Build Cache 0 0 0B 0BDalam contoh ini,
Dockerimages menggunakan 13.94 GB, di mana 10.66 GB di antaranya dapat diklaim kembali. Prioritaskan pembersihan image yang tidak digunakan.Bersihkan file yang tidak diperlukan.
Jika Anda tidak dapat membersihkan file Docker, coba atasi masalah dengan mengikuti langkah-langkah di Penyebab 1: Disk space Habis.
Untuk menghapus semua container yang dihentikan, jalankan
sudo docker container prune.Untuk menghapus semua dangling image (image tanpa tag), jalankan
sudo docker image prune.Untuk menghapus build cache yang tidak terpakai, jalankan
sudo docker builder prune.
Penyebab 6: Batas inotify watches tercapai
Saat menjalankan perintah seperti sudo tail -f, Anda mungkin melihat kesalahan tail: cannot watch '...': No space left on device. Kesalahan ini tidak menunjukkan kurangnya disk space. Sebaliknya, ini menandakan bahwa batas inotify watches, yang digunakan untuk melacak perubahan pada file dan direktori, telah tercapai dan perlu ditingkatkan.
Periksa batas
inotify watchessaat ini.Jalankan
sudo cat /proc/sys/fs/inotify/max_user_watchesuntuk melihat batasinotify watchessaat ini.Tingkatkan batas
inotify watches.Meningkatkan batas ini akan menyebabkan inotify menggunakan lebih banyak memori sistem. Evaluasi dampaknya dengan cermat sebelum membuat perubahan. Disarankan untuk mengatur
<new_limit_value>menjadi 524288 atau lebih rendah.sudo sh -c "echo fs.inotify.max_user_watches=<new_limit_value> >> /etc/sysctl.conf"Muat konfigurasi baru.
Jalankan
sudo sysctl --systemuntuk memuat konfigurasi baru dan menerapkan perubahan.Verifikasi konfigurasi baru.
Jalankan
sudo cat /proc/sys/fs/inotify/max_user_watcheslagi untuk memastikan bahwa batasinotify watchestelah diperbarui ke nilai yang diharapkan.
Referensi
Untuk menyimpan file statis berukuran besar seperti gambar, video, dan arsip, gunakan Object Storage Service (OSS).
Untuk berbagi file dengan kinerja dan konkurensi tinggi, gunakan File Storage NAS.
Untuk pengumpulan dan analisis log berskala besar, simpan log di Simple Log Service (SLS). Layanan ini menyederhanakan kueri log dan mengurangi penggunaan penyimpanan lokal.