# Препълнен диск на Linux сървър: намерете какво заема мястото

Препълненият диск обикновено има една или две очевидни причини. Работете отгоре надолу, първо прочетете, после изтривайте, и никога не премахвайте ръчно файлове в /var/lib, освен ако не знаете коя услуга им е собственик.

## 1. Установете коя файлова система е пълна

Изпълнете df -h. Вижте колоната Use% и колоната Mounted on: пълната файлова система може да е / или отделно монтиране като /var, /home или /data, а почистването на грешната не променя нищо.
Изпълнете и df -i. Една файлова система може да има свободно място, но да няма свободни inode-ове, което се случва, когато се натрупат милиони малки файлове (сесии, пощенски опашки, кеш файлове). Ако IUse% е близо до 100%, търсите много малки файлове, а не няколко големи.

## 2. Намерете най-големите директории

Изпълнете sudo du -xh --max-depth=1 / | sort -h и прочетете последните редове. Опцията -x остава в рамките на една файлова система, така че монтираните дискове и виртуалните файлови системи не изкривяват резултата. Повторете в най-голямата директория, например sudo du -xh --max-depth=1 /var | sort -h.
Ако ncdu е инсталиран (sudo apt install ncdu на Debian и Ubuntu), sudo ncdu -x / ви позволява да разглеждате същите данни интерактивно.

## 3. Проверете за изтрити файлове, които все още са отворени

Ако du показва много по-малко от df, възможно е някой процес да държи изтрит файл отворен, често голям лог. sudo lsof +L1 показва отворените файлове с брой връзки нула. Мястото се освобождава, когато процесът затвори файла, което обикновено означава рестартиране на услугата, която го притежава. Направете го в спокоен момент, а не по време на пик на заявките.

## 4. Прегледайте обичайните заподозрени

Логове: погледнете в /var/log и проверете журнала с journalctl --disk-usage. Ако е голям, вижте нашето ръководство за ограничаване на размера на journald.
Пакети: sudo apt clean премахва изтеглените пакетни файлове; sudo apt autoremove изброява пакетите и старите ядра, които вече не са нужни, и показва какво ще премахне, преди да потвърдите. Запазете работещото ядро и една предишна версия.
Docker: docker system df показва образите, контейнерите, томовете и кеша на изграждането. docker system prune премахва спрените контейнери, неизползваните мрежи и висящите образи; не премахва томове, освен ако не добавите --volumes, затова прочетете подканата, преди да отговорите.
Snap: snap list --all показва стари ревизии на snap пакети, които са деактивирани и могат да се премахват една по една с snap remove NAME --revision=NUMBER.

## 5. След като освободите място

Изпълнете отново df -h и проверете дали услугите, спрели заради пълния диск, работят (systemctl --failed). База данни, достигнала пълен диск, може да се нуждае от рестарт или проверка, преди да ѝ се доверите.
След това задайте ограничение, за да не се повтаря: ротация на логовете, лимит за journald и известие, преди дискът да достигне 90%.

## FAQ

**Безопасно ли е да изтривам файлове в /var/log?**

Ротираните и компресирани логове (например syslog.1 или .gz файлове) обикновено могат да бъдат изтрити, когато вече не са ви нужни. Не изтривайте текущия лог файл на работеща услуга; изрежете го внимателно или оставете logrotate да се погрижи, като първо проверите какво очаква услугата.

**Защо df показва пълен диск, а du не се сумира?**

Обикновено изтрит файл все още се държи отворен от работещ процес (вижте lsof +L1) или числата идват от различни файлови системи. Използвайте du -x и сравнете с df за същата точка на монтиране.

**Безопасно ли е да изпълнявам docker system prune на продукционен сървър?**

Само след docker system df и преглед на неизползваното. Командата може да премахне образи, които все още смятате да стартирате. Томовете се запазват по подразбиране, но се уверете, че имате резервни копия на всичко важно.

Source: https://raincleaner.eu/bg/guides/linux-server-disk-full-find-what-is-using-space