Linux’da diskda joy tugadi: uni qanday topish va bo‘shatish
Amaliyot3 daqInnovialabs tahririyati
Qisqacha
df -h va df -i ni tekshiring, du yoki ncdu bilan katta papkalarni toping, eski loglar, Docker qoldiqlari va paket keshlarini tozalang, so‘ng muammo qaytmasligi uchun logrotate’ni sozlang.
Qisqa javob: harakatlar tartibi
No space left on device xatosi ikki narsadan birini anglatadi: baytlar tugagan yoki inode (fayllar haqidagi yozuvlar) tugagan. Bosqichma-bosqich harakat qiling:
- Qaysi bo‘lim to‘lganini aniqlang:
df -h. - Inode’larni tekshiring:
df -i. - Joyni nima egallayotganini toping:
duyokincdu. - Xavfsiz tozalang: loglar, Docker, keshlar.
- Vaziyat takrorlanmasligi uchun rotatsiyani sozlang.
/var yoki /usr dagi fayllarni tavakkal o‘chirmang — avval ular nima ekanini aniqlang.
1-qadam. Qaysi bo‘lim to‘lgan
df -h
Use% va Mounted on ustunlariga qarang. Ko‘pincha butun disk emas, alohida bo‘lim to‘lgan bo‘ladi: /, /var yoki /boot.
2-qadam. Aybdorni topish
Ildiz bo‘limdagi eng og‘ir papkalar:
sudo du -xh --max-depth=1 / | sort -rh | head -20
-x bayrog‘i boshqa bo‘limlarga o‘tishga yo‘l qo‘ymaydi. Keyin chuqurroq tushing: /var, /var/log, /home, /opt.
Interaktiv usulda qulayroq — ncdu:
sudo apt install ncdu # yoki dnf install ncdu
sudo ncdu -x /
Papkalar bo‘ylab strelkalar bilan yurish va hajmlarni darhol ko‘rish mumkin.
Alohida katta fayllar:
sudo find / -xdev -type f -size +500M -exec ls -lh {} \;
3-qadam. Odatiy aybdorlar va ularni tozalash
Loglar. systemd tizim jurnali kattalashib ketishi mumkin:
journalctl --disk-usage
sudo journalctl --vacuum-size=500M
/var/log yoki loyiha papkasidagi ilova loglari: agar fayl hozir yozilayotgan bo‘lsa, uni rm bilan o‘chirmang, balki nolga tushiring — sudo truncate -s 0 /var/log/app.log.
Docker. Eski obrazlar, to‘xtatilgan konteynerlar, ishlatilmayotgan tomlar va build keshi:
docker system df
docker system prune
docker image prune -a
--volumes bayrog‘i ishlatilmayotgan tomlarni ham o‘chiradi — ularda baza ma’lumotlari bo‘lishi mumkin. Undan faqat ichida nima borligini aniq bilsangiz foydalaning. Konteyner loglari ham o‘sadi: ularni logging driver sozlamalarida cheklang (max-size, max-file).
Paket keshlari:
sudo apt clean # Debian/Ubuntu
sudo dnf clean all # RHEL/Fedora
Shuningdek, uy papkalaridagi npm, pip va CI build keshlarini, eski bekaplar va baza damplarini tekshiring.
Fayl o‘chirildi, lekin joy bo‘shamadi
Agar jarayon ochiq ushlab turgan faylni o‘chirsangiz, joy faqat fayl yopilgandan keyin bo‘shaydi. Bunday fayllarni topish:
sudo lsof +L1
Ularni ushlab turgan jarayonni qayta ishga tushiring — joy qaytadi.
Inode’lar tugadi
df -h bo‘sh joy borligini ko‘rsatadi, lekin fayllar yaratilmaydi — df -i ni tekshiring. Agar IUse% 100% ga yaqin bo‘lsa, sabab juda ko‘p mayda fayllarda: sessiyalar, kesh, vaqtinchalik fayllar, navbatdagi xatlar.
Eng ko‘p fayl bor papkani topish:
sudo du --inodes -x / 2>/dev/null | sort -rn | head -20
Keraksizini o‘chiring va sababni tuzating: masalan, eski sessiyalarni avtomatik tozalashni sozlang.
4-qadam. Log rotatsiyasini sozlash
logrotate eski loglarni jadval bo‘yicha arxivlaydi va o‘chiradi. Ilova uchun misol — /etc/logrotate.d/myapp fayli:
/var/www/myapp/logs/*.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
Qo‘llamasdan tekshirish: sudo logrotate -d /etc/logrotate.d/myapp. journald uchun /etc/systemd/journald.conf da SystemMaxUse chegarasini belgilang.
Eng muhimi — xizmat yiqilgandan keyin emas, oldindan ogohlantiradigan disk to‘lishi monitoringini sozlang.