Изчерпаното място е най-честата причина сървърът да спре да работи без никакъв зъл умисъл. Сайтът връща 500, базата не пише, пощата не излиза — а df -h при това показва няколко свободни гигабайта. Да разгледаме три случая, в които става така, и покрай това какво е добре да се знае за SMART.

Първи случай: свършили са inode

Файловата система държи два ограничени ресурса: място за съдържание и записи за файловете. Вторият свършва независимо от първия:

df -h
df -i

Ако при втората команда IUse% е 100, става дума за inode. Място има, но не може да се създаде нито един файл, дори празен.

Виновниците са винаги едни и същи: милиони мънички файлове. PHP сесии в /var/lib/php/sessions, на които се е счупило почистването. Кеш на приложението без изчистване. Заседнала пощенска опашка. Директория с миниатюри. Намират се така:

sudo find / -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20

Командата извежда директориите с най-много файлове. На голяма система работи няколко минути — това е нормално.

Втори случай: файлът е изтрит, но мястото не се е върнало

По-коварна ситуация. Някой е изтрил с rm подут журнал, но процесът, който е писал в него, все още го държи отворен. Файлът вече го няма в директорията, мястото остава заето, и така ще е до рестарта на процеса.

sudo lsof +L1

Командата показва файлове без препратки във файловата система, които все пак се държат от процес. Лекува се с рестарт или меко презареждане на този процес, а не с търсене „къде отидоха гигабайтите“.

Оттук правилото: подут журнал не се изтрива, а се занулява — тогава отвореният дескриптор остава работещ:

sudo truncate -s 0 /var/log/huge.log

И веднага след това се настройва ротация, иначе след седмица всичко ще се повтори.

Трети случай: изяли са го журналите

Къде точно е отишло мястото, се вижда при слизане ниво по ниво:

sudo du -x -h --max-depth=1 / | sort -h
sudo du -x -h --max-depth=1 /var | sort -h

Ключът -x не позволява слизане в други файлови системи; без него броенето се заравя в /proc и в монтирани мрежови ресурси. По-удобно е всичко това да се прави в ncdu, ако е налично.

Обичайните лакомци:

  • journald. Решава една команда: journalctl --disk-usage. Ограничава се с реда SystemMaxUse=500M в /etc/systemd/journald.conf, еднократно се чисти с journalctl --vacuum-size=200M;
  • журналите на инструментите за сигурност. Suricata със стандартната конфигурация записва тридесет вида събития и не настройва ротация след себе си — на реален сървър това даде 15 ГБ за две денонощия. Същото става с audit.log и с журналите за отстраняване на грешки на nginx;
  • резервни копия, слагани на същия диск и никога изтривани;
  • кешът на aptapt clean понякога връща няколко гигабайта.

Отделно за /boot

Малък дял, който се запълва от старите ядра. Сам по себе си не поваля сайта, но напълно спира обновяванията: новото ядро не се инсталира, а зад него стои цялата опашка от пакети. Лекува се с apt autoremove --purge и се предотвратява с включване на автоматичното изтриване на неизползваните ядра в настройките на автоматичните обновявания.

SMART: кои атрибути имат значение

Веднага уговорка: на виртуален сървър SMART обикновено е недостъпен — дискът е виртуален, физическият под него не се вижда. Това не е повреда, просто няма данни. Всичко по-нататък се отнася за отделни сървъри и собствен хардуер.

sudo smartctl -a /dev/sda

Редът SMART overall-health self-assessment test result: PASSED не е повод за спокойствие: остава зелен практически до самата повреда. Гледат се конкретните броячи:

  • 5, Reallocated_Sector_Ct — преместени сектори. Ненулева стойност означава, че дискът вече се разпада; ако расте с времето — сменяйте без отлагане;
  • 197, Current_Pending_Sector — нечетими сектори, чакащи решение. Най-тревожният от всички: обикновено означава, че част от данните вече не може да се спаси;
  • 198, Offline_Uncorrectable — същото, потвърдено с проверка;
  • SSD: Percentage Used / Media_Wearout_Indicator — изчерпан ресурс за запис. Предвидима величина, по която се планира смяната.

А температурата и часовете работа сами по себе си не казват нищо: диск с пет години стаж и нулеви броячи на грешки е по-надежден от нов с единица в атрибут 197.

Смисълът на наблюдението

Всичко по-горе е реакция на вече случилото се. А запълването на диска и износването на SSD са бавни и напълно предвидими процеси: графиката на заетостта за две седмици показва датата, на която мястото ще свърши, много преди това да стане. Разликата между „сайтът лежи от три през нощта“ и „в четвъртък трябва да се почистят журналите“ е само в наличието на число пред очите. Как изглежда това в цялост, показва демонстрационната страница по-долу.