全部产品
Search
文档中心

Elastic Compute Service:Mengatasi masalah "no space left" pada instans Linux

更新时间:Oct 31, 2025

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

Penting

Sebelum memulai, buat snapshot untuk backup data Anda dan mencegah kehilangan data yang tidak disengaja.

Penyebab 1: Disk space habis

  1. Periksa penggunaan disk.

    Jalankan sudo df -h untuk melihat penggunaan disk pada setiap mount point. Jika kolom Use% menunjukkan 100%, artinya disk space tersebut telah penuh.

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

  1. Periksa penggunaan inode.

    Jalankan perintah sudo df -i. Jika kolom IUse% menunjukkan 100%, artinya semua sumber daya inode telah habis.

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

  1. Instal tool lsof.

    Perintah df dan du tidak dapat mendeteksi file yang telah dihapus tetapi masih menggunakan disk space. Untuk melihat file tersebut, gunakan tool lsof.

    Alibaba Cloud Linux dan CentOS

    sudo yum install -y lsof

    Debian dan Ubuntu

    sudo apt install -y lsof
  2. Lihat storage space yang digunakan oleh file yang telah dihapus.

    sudo lsof | grep delete | sort -k7 -rn | more

    Kolom ketujuh pada output menunjukkan ukuran file dalam byte. Jumlahkan nilai-nilai ini untuk menghitung total space yang belum dirilis.image

  3. Catat nama proses dan PID.

    Jalankan sudo lsof | grep delete dan catat nama proses serta PID di kolom COMMAND dan PID.

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

    Penting

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

  1. Periksa mount points duplikat.

    Jalankan sudo lsblk dan periksa kolom MOUNTPOINT. Catat semua nama direktori yang digunakan sebagai MOUNTPOINT untuk beberapa perangkat.

    sudo lsblk
    NAME   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 /mnt

    Dalam contoh ini, kedua partisi vdb1 dan vdc1 di-mount ke /mnt, sehingga berisiko menyebabkan mount point ditimpa.

  2. Unmount sistem file.

    Penting

    Melakukan 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, /mnt adalah mount point duplikat. Menjalankan sudo umount /mnt akan meng-unmount perangkat yang terakhir di-mount, yaitu vdc1.
  3. Identifikasi perangkat underlying mount point.

    Jalankan sudo df -h untuk menemukan nama perangkat dari mount point yang visible saat ini.

    sudo df -h
    Filesystem      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/0

    Dalam contoh ini, perangkat yang sekarang ter-mount pada /mnt adalah /dev/vdb1.

  4. Atasi masalah disk space penuh.

    1. Bersihkan file atau direktori yang tidak diperlukan dari mount point yang sebelumnya ditimpa.

      Dalam contoh ini, Anda perlu membersihkan direktori /mnt yang dimount dari vdb1.
    2. 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.
Penting

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.

  1. Periksa penggunaan disk space oleh file Docker.

    Jalankan perintah sudo df -h. Jika Use% untuk Filesystem dari overlay mencapai 100%, kemungkinan Docker adalah penyebabnya.

  2. Identifikasi sumber daya Docker yang menggunakan space.

    Jalankan perintah sudo docker system df. Periksa kolom Size dan RECLAIMABLE untuk mengidentifikasi penggunaan space.

    sudo docker system df
    TYPE            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         0B

    Dalam contoh ini, Docker images menggunakan 13.94 GB, di mana 10.66 GB di antaranya dapat diklaim kembali. Prioritaskan pembersihan image yang tidak digunakan.

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

  1. Periksa batas inotify watches saat ini.

    Jalankan sudo cat /proc/sys/fs/inotify/max_user_watches untuk melihat batas inotify watches saat ini.

  2. 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"
  3. Muat konfigurasi baru.

    Jalankan sudo sysctl --system untuk memuat konfigurasi baru dan menerapkan perubahan.

  4. Verifikasi konfigurasi baru.

    Jalankan sudo cat /proc/sys/fs/inotify/max_user_watches lagi untuk memastikan bahwa batas inotify watches telah 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.