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
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
-
Periksa penggunaan disk.
Jalankan
sudo df -huntuk melihat penggunaan disk di setiap mount point. Jika nilaiUse%mencapai 100%, ruang yang bersangkutan telah penuh. -
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. -
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.
-
Periksa penggunaan inode.
Jalankan
sudo df -i. Jika nilaiIUse%mencapai 100%, sumber daya inode telah habis. -
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. -
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.
-
Instal tool
lsof.File yang telah dihapus tetapi masih menempati ruang tidak dapat dilihat dengan
dfataudu. Gunakan toollsofuntuk mencantumkannya.Alibaba Cloud Linux, CentOS
sudo yum install -y lsofDebian, Ubuntu
sudo apt install -y lsof -
Lihat ruang penyimpanan yang masih ditempati oleh file yang telah dihapus.
sudo lsof | grep delete | sort -k7 -rn | moreKolom 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) -
Catat nama proses dan PID-nya.
Jalankan
sudo lsof | grep deletedan catat bidangCOMMANDdanPIDuntuk mengidentifikasi nama proses dan ID proses. -
Restart atau hentikan layanan terkait.
Jalankan
sudo ps -ef | grep <PID>untuk memastikan tujuan proses tersebut. Setelah mengevaluasi dampaknya, restart atau hentikan layanan tersebut.PentingRestart 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.
-
Lihat informasi tentang folder duplikat.
Jalankan
sudo lsblkdan periksa kolom MOUNTPOINT untuk nama direktori yang berulang.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 /mntPada contoh ini, kedua partisi
vdb1danvdc1dipasang ke/mnt, yang mengindikasikan risiko overlay mount point. -
Unmount sistem file.
PentingUnmount 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,
/mntadalah direktori mount duplikat. Menjalankansudo umount /mntakan unmount perangkat yang paling baru dipasang, yaituvdc1. -
Identifikasi nama perangkat dari mount point yang ditimpa.
Jalankan
sudo df -huntuk menemukan nama perangkat yang terkait dengan mount point aktif 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/0Pada contoh ini, partisi yang saat ini dipasang ke
/mntadalahvdb1. Oleh karena itu, nama perangkat dari mount point yang ditimpa adalahvdb1. -
Atasi masalah ruang disk penuh.
-
Bersihkan file atau folder yang tidak diperlukan di ruang yang ditimpa.
Pada contoh ini, bersihkan direktori
/mntyang dipasang olehvdb1. -
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.
-
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.
-
Periksa penggunaan ruang disk Docker.
Jalankan
sudo df -h. JikaUse%untukFilesystembertipeoverlaymencapai 100%, penyimpanan Docker telah penuh. -
Evaluasi penggunaan sumber daya Docker.
Jalankan
sudo docker system dfdan periksa bidangSizedanRECLAIMABLEuntuk memahami konsumsi ruang.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 0BPada contoh ini, image
Dockermenempati 13,94 GB, di mana 10,66 GB dapat dikembalikan, dan kami merekomendasikan Anda memprioritaskan pembersihan image yang tidak digunakan. -
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.
-
Periksa batas inotify watches saat ini.
Jalankan
sudo cat /proc/sys/fs/inotify/max_user_watchesuntuk melihat batas saat ini untukinotify watches. -
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" -
Muat konfigurasi baru.
Jalankan
sudo sysctl --systemuntuk menerapkan konfigurasi yang diperbarui. -
Verifikasi hasilnya.
Jalankan
sudo cat /proc/sys/fs/inotify/max_user_watcheslagi untuk memastikan batasinotify watchestelah 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.