تمام‌شدن فضا رایج‌ترین دلیلی است که سروری بی‌هیچ نیت بدی از کار می‌افتد. سایت ۵۰۰ برمی‌گرداند، پایگاه داده نمی‌نویسد، ایمیل بیرون نمی‌رود — و df -h در همان حال از چند گیگابایت آزاد خبر می‌دهد. بیایید هر سه حالتی را که چنین می‌شود ببینیم، و آنچه درباره SMART دانستنش می‌ارزد.

حالت نخست: inodeها تمام شده‌اند

سامانه فایل دو منبع محدود نگه می‌دارد: جا برای محتوا و ثبت‌هایی درباره فایل‌ها. و دومی مستقل از نخستی تمام می‌شود:

df -h
df -i

اگر IUse% در فرمان دوم ۱۰۰ باشد، مشکل از 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 با پیکربندی پیش‌فرض سی گونه رویداد می‌نویسد و برای خودش هیچ چرخشی تنظیم نمی‌کند — روی سروری واقعی این در دو روز ۱۵ گیگابایت ساخت. همین با 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 — توان نوشتن مصرف‌شده. عددی پیش‌بینی‌پذیر، و همان که تعویض بر پایه‌اش برنامه‌ریزی می‌شود.

اما دما و ساعت‌های کارکرد به‌خودی‌خود چیزی نمی‌گویند: دیسکی با پنج سال کارکرد و شمارنده‌های خطای صفر مطمئن‌تر از دیسکی تازه با ۱ در ویژگی ۱۹۷ است.

معنای پایش

همه آنچه گفته شد واکنشی است به چیزی که از پیش رخ داده. با این حال هم پرشدن دیسک و هم فرسایش SSD فرایندهایی کندند و کاملاً پیش‌بینی‌پذیر: نموداری از پرشدن در دو هفته، تاریخ تمام‌شدن جا را خیلی پیش‌تر نشان می‌دهد. و تفاوت میان «سایت از ساعت سه بامداد افتاده» و «پنجشنبه باید گزارش‌ها را پاک کرد» چیزی نیست جز داشتن آن عدد پیش چشم. شکل گردآمده این را صفحه نمایشی پایین نشان می‌دهد.