All Products
Search
Document Center

Elastic Compute Service:Atasi masalah ruang disk penuh pada instans Linux

Last Updated:Jun 21, 2026

Saat aplikasi dan layanan berjalan terus-menerus pada instans Linux, log, cache, dan data bisnis menumpuk seiring waktu serta secara bertahap menghabiskan ruang disk yang tersedia. Ketika disk penuh, data baru tidak dapat ditulis, yang secara langsung menyebabkan gangguan layanan atau perilaku tidak normal.

Gejala

Saat membuat file atau menjalankan aplikasi pada instans Linux, Anda melihat pesan error No space left on device, yang menunjukkan bahwa sumber daya penyimpanan telah habis.

Diagnosis dan solusi

Penting

Sebelum melakukan perubahan, buat snapshot manual untuk mencadangkan data Anda dan mencegah kehilangan data akibat kesalahan yang dapat memengaruhi bisnis Anda.

Skenario 1: Ruang disk habis

  1. Periksa penggunaan disk.

    Jalankan sudo df -h untuk melihat penggunaan disk di setiap mount point. Jika nilai Use% mencapai 100%, ruang yang bersangkutan telah penuh.

  2. Bersihkan file atau folder yang tidak diperlukan.

    Gunakan sudo du -sh <folder name>/* untuk memeriksa ukuran file dan subfolder dalam direktori tertentu. Jika diperlukan, masuk ke direktori tersebut dan ulangi perintah ini secara bertingkat untuk mengidentifikasi item berukuran besar.

    Misalnya, gunakan sudo du -sh /mnt/* untuk memeriksa ruang disk yang digunakan oleh file dan subfolder di bawah direktori /mnt.
  3. Jika ruang tetap tidak mencukupi setelah pembersihan, perluas disk Anda.

Skenario 2: Sumber daya inode habis

Setiap file mengonsumsi satu inode. Jika disk Anda berisi banyak file kecil, inode dapat habis meskipun ruang disk masih tersedia, sehingga mencegah pembuatan file baru.

  1. Periksa penggunaan inode.

    Jalankan sudo df -i. Jika nilai IUse% mencapai 100%, sumber daya inode telah habis.

  2. Bersihkan file atau folder yang tidak diperlukan.

    Gunakan sudo du -sh --inodes <folder name>/* untuk melihat jumlah inode yang digunakan oleh file dan subfolder dalam direktori tertentu. Jika diperlukan, masuk ke direktori tersebut dan gunakan perintah ini secara rekursif untuk menemukan penggunaan inode yang tinggi.

    Misalnya, gunakan sudo du -sh --inodes /mnt/* untuk memeriksa jumlah inode yang digunakan oleh file dan subdirektori di direktori /mnt.
  3. Jika jumlah inode tetap tidak mencukupi setelah pembersihan, perluas disk Anda.

Skenario 3: File yang telah dihapus masih menempati ruang

Meskipun file telah dihapus, sistem tidak melepaskan ruang disk-nya jika masih ada proses yang menggunakannya (yaitu, memegang handle file yang terbuka). Ruang tersebut hanya akan dilepaskan ketika proses dihentikan atau secara eksplisit menutup file tersebut.

  1. Instal tool lsof.

    File yang telah dihapus tetapi masih menempati ruang tidak dapat dilihat dengan df atau du. Gunakan tool lsof untuk mencantumkannya.

    Alibaba Cloud Linux, CentOS

    sudo yum install -y lsof

    Debian, Ubuntu

    sudo apt install -y lsof
  2. Lihat ruang penyimpanan yang masih ditempati oleh file yang telah dihapus.

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

    Kolom ketujuh dalam output menunjukkan ukuran file dalam byte. Jumlahkan nilai-nilai tersebut untuk menghitung total ruang yang belum dilepaskan.

    tail      619544                        root    3r   REG    253,1   50000000    136507 /home/test_file (deleted)
    aliyun-se 347980                        root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347997 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347996 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347995 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347994 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347983 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347982 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
    aliyun-se 347980 347981 aliyun-se       root    7uW  REG    253,1          0    262160 /tmp/AliyunAssistClientSingleLock.lock (deleted)
  3. Catat nama proses dan PID-nya.

    Jalankan sudo lsof | grep delete dan catat bidang COMMAND dan PID untuk mengidentifikasi nama proses dan ID proses.

  4. Restart atau hentikan layanan terkait.

    Jalankan sudo ps -ef | grep <PID> untuk memastikan tujuan proses tersebut. Setelah mengevaluasi dampaknya, restart atau hentikan layanan tersebut.

    Penting

    Restart atau penghentian layanan dapat memengaruhi bisnis Anda. Evaluasi dengan cermat dan lakukan tindakan ini selama jendela pemeliharaan yang sesuai.

Skenario 4: Mount point ditimpa

Ketika direktori yang tidak kosong digunakan sebagai mount point untuk perangkat lain, konten yang sudah ada menjadi tersembunyi. Namun, proses yang sudah membuka direktori tersebut tetap dapat menulis ke ruang dasarnya. Konsumsi ruang “tersembunyi” ini tidak dapat diamati dengan perintah df dan dapat secara tak terduga menghabiskan ruang disk.

  1. Lihat informasi tentang folder duplikat.

    Jalankan sudo lsblk dan periksa kolom MOUNTPOINT untuk nama direktori yang berulang.

    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

    Pada contoh ini, kedua partisi vdb1 dan vdc1 dipasang ke /mnt, yang mengindikasikan risiko overlay mount point.

  2. Unmount sistem file.

    Penting

    Unmount sistem file dapat mengganggu layanan yang bergantung pada path tersebut. Evaluasi risiko dan pilih waktu yang tepat untuk melakukan operasi ini.

    Anda dapat memperoleh <duplicate mount directory> dari langkah sebelumnya.

    sudo umount <duplicate mount directory>
    Pada contoh ini, /mnt adalah direktori mount duplikat. Menjalankan sudo umount /mnt akan unmount perangkat yang paling baru dipasang, yaitu vdc1.
  3. Identifikasi nama perangkat dari mount point yang ditimpa.

    Jalankan sudo df -h untuk menemukan nama perangkat yang terkait dengan mount point aktif 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

    Pada contoh ini, partisi yang saat ini dipasang ke /mnt adalah vdb1. Oleh karena itu, nama perangkat dari mount point yang ditimpa adalah vdb1.

  4. Atasi masalah ruang disk penuh.

    1. Bersihkan file atau folder yang tidak diperlukan di ruang yang ditimpa.

      Pada contoh ini, bersihkan direktori /mnt yang dipasang oleh vdb1.
    2. Jika ruang tetap tidak mencukupi setelah pembersihan, perluas disk Anda dan pasang ke direktori kosong yang berbeda.

      Pada contoh ini, perangkat target yang akan diperluas adalah vdb1.
Penting

Jangan memasang beberapa perangkat ke direktori yang sama.

Memasang beberapa perangkat ke direktori yang sama akan menyembunyikan ruang perangkat yang dipasang pertama kali dan dapat menyebabkan data ditulis ke perangkat yang salah. Selalu pasang perangkat berbeda ke direktori kosong yang terpisah.

Skenario 5: File terkait Docker mengonsumsi ruang signifikan

Docker menghasilkan banyak image antara, kontainer yang dihentikan, dan cache build selama operasi. Seiring waktu, komponen-komponen ini menumpuk dan mengonsumsi ruang disk.

  1. Periksa penggunaan ruang disk Docker.

    Jalankan sudo df -h. Jika Use% untuk Filesystem bertipe overlay mencapai 100%, penyimpanan Docker telah penuh.

  2. Evaluasi penggunaan sumber daya Docker.

    Jalankan sudo docker system df dan periksa bidang Size dan RECLAIMABLE untuk memahami konsumsi ruang.

    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

    Pada contoh ini, image Docker menempati 13,94 GB, di mana 10,66 GB dapat dikembalikan, dan kami merekomendasikan Anda memprioritaskan pembersihan image yang tidak digunakan.

  3. Bersihkan file yang tidak diperlukan.

    Jika file Docker tidak dapat dibersihkan, ikuti langkah-langkah dalam Skenario 1: Ruang disk habis.
    • Hapus semua kontainer yang dihentikan: jalankan sudo docker container prune.

    • Hapus semua image dangling (image tanpa tag): jalankan sudo docker image prune.

    • Hapus cache build yang tidak digunakan: jalankan sudo docker builder prune.

Skenario 6: Batas inotify watches tercapai

Saat menjalankan perintah seperti sudo tail -f, Anda mungkin melihat error tail: cannot watch '...': No space left on device. Ini bukan berarti ruang disk penuh. Sebaliknya, sistem telah mencapai batas maksimum jumlah inotify watches yang digunakan untuk memantau perubahan file dan direktori. Anda harus menaikkan batas ini.

  1. Periksa batas inotify watches saat ini.

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

  2. Tingkatkan batas inotify watches.

    Menambah batas ini akan meningkatkan penggunaan memori. Evaluasi dengan cermat sebelum mengubah. Nilai <new limit> umumnya tidak boleh melebihi 524288.

    sudo sh -c "echo fs.inotify.max_user_watches=<new limit> >> /etc/sysctl.conf"
  3. Muat konfigurasi baru.

    Jalankan sudo sysctl --system untuk menerapkan konfigurasi yang diperbarui.

  4. Verifikasi hasilnya.

    Jalankan sudo cat /proc/sys/fs/inotify/max_user_watches lagi untuk memastikan batas inotify watches telah diperbarui sesuai harapan.

Referensi

  • Untuk menyimpan sejumlah besar file statis seperti gambar, video, atau arsip, gunakan Object Storage Service (OSS).

  • Untuk berbagi file berkinerja tinggi dan konkurensi tinggi, simpan file menggunakan File Storage NAS.

  • Untuk pengumpulan dan analisis log skala besar, simpan log di Simple Log Service (SLS) untuk menyederhanakan kueri dan mengurangi penggunaan penyimpanan lokal.