نمایش اشتباه حجم دیسک در پلسک و سی پنل؛ تشخیص و رفع پر شدن فضا

نمایش اشتباه حجم دیسک در پلسک و سی پنل؛ تشخیص و رفع پر شدن فضا

وارد کنترل پنل که می‌شوید، عدد مصرف دیسک با چیزی که انتظار دارید جور در نمی‌آید. در پلسک هنگام ورود پیام Error: Not enough disk space می‌گیرید در حالی که مطمئنید هنوز فضا دارید، یا برعکس، فایل‌های حجیمی را پاک کرده‌اید و عدد پنل تکان نخورده است. در سی پنل هم شکل رایج ماجرا این است که بخش دیتابیس‌ها همیشه صفر نشان داده می‌شود و هیچ‌وقت نمی‌فهمید دیتابیس‌ها چقدر فضا گرفته‌اند.

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

قدم اول: دیسک واقعاً پر است یا پنل اشتباه می‌گوید؟

هیچ عددی در کنترل پنل مرجع نیست. مرجع، خود سیستم‌عامل است. با SSH به سرور وصل شوید و اول وضعیت پارتیشن‌ها را ببینید:

df -h

ستون Use% را نگاه کنید و حواستان باشد که پارتیشن درست را می‌بینید؛ روی خیلی از سرورها /var یا /home پارتیشن جداگانه دارد و ممکن است فقط همان یکی پر شده باشد. فهرست همین خروجی را نگه دارید، چون در گام بعد باید هر پارتیشن را جدا بررسی کنید.

اگر df -h می‌گوید فضا هست ولی سرور باز هم خطای «فضای کافی نیست» می‌دهد، احتمال زیادی وجود دارد که اینودها (inode) تمام شده باشند نه فضا. این حالت روی هاست‌هایی که میلیون‌ها فایل کوچک (کش، سشن، ایمیل) دارند خیلی رایج است:

df -i

حالا ببینید فضا کجا رفته است. با این دستور از ریشه شروع کنید و لایه‌به‌لایه پایین بروید:

du -xh --max-depth=1 / | sort -h

سوئیچ -x باعث می‌شود du از فایل‌سیستم فعلی بیرون نرود و سراغ /proc و مانت‌های دیگر نرود. دقت کنید که همین سوئیچ یک عارضه هم دارد: اگر /var یا /home پارتیشن جدا باشد، در خروجی بالا تقریباً صفر نشان داده می‌شود. پس هر پارتیشنی که در df -h پر بود را جداگانه اسکن کنید:

du -xh --max-depth=1 /var | sort -h

یک حالت خاص هم هست که تازه‌کارها را گیج می‌کند: df می‌گوید دیسک پر است ولی مجموع du خیلی کمتر از آن است. معنی‌اش معمولاً این است که فایلی حذف شده اما پروسه‌ای هنوز آن را باز نگه داشته و فضایش آزاد نشده است. با این دستور پیدایشان کنید:

lsof +L1

در خروجی، ستون PID پروسه‌ای که فایل را باز نگه داشته و ستون FD شماره فایل‌دیسکریپتور را نشان می‌دهد. اگر آن فایل یک لاگ باشد، بدون ری‌استارت هم می‌توانید فضایش را پس بگیرید؛ کافی است همان فایل‌دیسکریپتور را خالی کنید (به‌جای PID و FD اعداد خروجی خودتان را بگذارید):

: > /proc/PID/fd/FD

این کار فقط برای فایل‌های لاگ‌مانند امن است؛ روی فایل دیتابیس یا هر فایل داده‌ای دیگری اجرایش نکنید. راه دوم ری‌استارت کردن خود سرویس است، ولی توجه داشته باشید که ری‌استارت یعنی چند ثانیه قطعی سرویس، پس اگر عجله‌ای نیست آن را برای زمان کم‌ترافیک بگذارید. روی توزیع‌های امروزی مدیریت سرویس با systemd انجام می‌شود و بهتر است به‌جای اسکریپت‌های قدیمی /etc/init.d از آن استفاده کنید. نام سرویس هم به وب‌سرور شما بستگی دارد (nginx، httpd یا apache2):

systemctl restart nginx

نتیجه این مرحله یکی از این دو است: یا واقعاً دیسک پر شده که باید خالی‌اش کنید، یا فضا هست و پنل آمار غلط می‌دهد که باید آمار را بازسازی کنید.

حالت اول: دیسک واقعاً پر شده است

در پلسک، اولین متهم بکاپ‌هاست

روی سروری که زمان‌بندی بکاپ پلسک فعال است، از دامنه‌ها، مشتریان، ریسلرها و در نهایت کل سرور نسخه پشتیبان گرفته می‌شود. اگر مخزن روی خود دیسک سرور باشد و سیاست نگهداری (تعداد نسخه‌هایی که نگه داشته می‌شود) محدود نشده باشد، این نسخه‌ها روی هم انباشته می‌شوند. چون آمار مصرف دیسک پنل هم لحظه‌ای به‌روز نمی‌شود، معمولاً تا وقتی دیسک واقعاً پر نشده کسی متوجه نمی‌شود.

علامت این حالت در پلسک خیلی گمراه‌کننده است: ریسلرها هنگام ورود پیام پر شدن دیسک می‌گیرند، ولی کاربران عادی پیام «نام کاربری یا رمز عبور اشتباه است» می‌بینند و دنبال مشکل رمز عبور می‌گردند، در حالی که مشکل اصلاً احراز هویت نیست. در عمل فقط ادمین و روت می‌توانند وارد شوند. پس اگر همزمان چند کاربر از «اشتباه بودن رمز» شکایت کردند، قبل از هر کاری یک df -h بگیرید.

مخزن پیش‌فرض بکاپ محلی پلسک اینجاست:

/var/lib/psa/dumps/

این مسیر روی نصب‌های ردهت‌محور (AlmaLinux، Rocky، CentOS) و دبیان و اوبونتو یکسان است؛ آنچه بین این دو خانواده فرق می‌کند ریشه خود پلسک است (/usr/local/psa در برابر /opt/psa)، نه مسیر مخزن بکاپ. اگر مخزن را قبلاً جابه‌جا کرده‌اید، مسیر واقعی در پارامتر DUMP_D از فایل زیر ثبت شده است:

grep DUMP_D /etc/psa/psa.conf

حجم مخزن را با du -sh /var/lib/psa/dumps بگیرید. اگر واقعاً همین پوشه دیسک را پر کرده، بکاپ‌های قدیمی را از داخل خود پلسک و از بخش Backup Manager حذف کنید، نه با rm. دلیلش این است که پلسک فهرستی از بکاپ‌ها نگه می‌دارد؛ اگر فایل‌ها را دستی پاک کنید، رکوردهای بی‌صاحب در آن فهرست می‌ماند و بعداً در ریستور و زمان‌بندی دردسر درست می‌کند. فقط وقتی پنل اصلاً بالا نمی‌آید و راه دیگری ندارید سراغ حذف مستقیم فایل‌ها بروید، آن هم با اطمینان از اینکه هیچ بکاپی در حال نوشته شدن نیست، و بعد از آن حتماً یک بار Backup Manager را باز کنید تا فهرست هماهنگ شود.

پوشه‌های موقت پلسک

اگر بعد از پاک کردن بکاپ‌ها هنوز فضا آزاد نشد، پوشه‌های موقتی که در جریان بکاپ‌گیری، ریستور و مهاجرت پر می‌شوند را بررسی کنید:

/usr/local/psa/PMM/tmp
/usr/local/psa/tmp

روی دبیان و اوبونتو معادل همین‌ها /opt/psa/PMM/tmp و /opt/psa/tmp است. دو نکته پیش از دست زدن به این‌ها: اول مطمئن شوید هیچ عملیات بکاپ، ریستور یا مهاجرتی در حال اجرا نیست، وگرنه همان عملیات را خراب می‌کنید. دوم، فقط محتوای این پوشه‌ها را پاک کنید و خود پوشه را حذف نکنید؛ پلسک انتظار دارد این مسیرها با همان مالکیت و دسترسی قبلی وجود داشته باشند و حذف خود پوشه، بکاپ‌گیری را از کار می‌اندازد.

بقیه جاهایی که معمولاً دیسک را می‌بلعند

  • لاگ‌ها: /var/log و لاگ دامنه‌ها. اگر logrotate درست تنظیم نشده باشد، یک فایل لاگ به‌تنهایی می‌تواند خیلی بزرگ شود.
  • ژورنال systemd: با journalctl --disk-usage حجمش را ببینید و در صورت نیاز با journalctl --vacuum-time=7d یا journalctl --vacuum-size=500M کوچکش کنید. توجه کنید که این دستورها لاگ‌های قدیمی را برای همیشه پاک می‌کنند؛ اگر وسط بررسی یک حادثه یا نفوذ هستید، اول لاگ‌ها را جای دیگری بردارید.
  • کش بسته‌ها: روی AlmaLinux و Rocky Linux دستور dnf clean all. روی سرورهای قدیمی CentOS همان yum clean all کار می‌کند، اما توجه داشته باشید CentOS 6 و CentOS 7 هر دو به پایان پشتیبانی رسیده‌اند و ماندن رویشان یک ریسک امنیتی است، نه فقط یک موضوع مربوط به فضا. روی دبیان و اوبونتو معادلش apt-get clean است.
  • صندوق‌ها و صف ایمیل: با همان du -xh --max-depth=1 روی مسیر ایمیل‌ها جلو بروید؛ یک اکانت اسپم‌زده به‌راحتی می‌تواند چند ده گیگابایت را ببلعد.

حالت دوم: فضا هست، پنل اشتباه نشان می‌دهد

پلسک: چرخه ۲۴ ساعته آمار

پلسک مصرف دیسک را لحظه‌ای محاسبه نمی‌کند. محاسبه آمار بخشی از تسک نگهداری روزانه است و به‌طور معمول روزی یک بار اجرا می‌شود. این یک باگ نیست، تصمیم طراحی است — پیمایش کامل فایل‌های همه دامنه‌ها عملیات سنگینی است — ولی نتیجه‌اش این است که اگر همین الان ۵۰ گیگابایت فایل پاک کنید، عدد پنل تا اجرای بعدی همان عدد قبلی می‌ماند.

برای اینکه منتظر نمانید، آمار یک دامنه مشخص را دستی بازسازی کنید:

plesk sbin statistics --calculate-one --domain-name=example.com

به‌جای example.com نام دامنه‌ای که در پلسک تعریف شده را بگذارید. دستور plesk sbin رابط رسمی اجرای ابزارهای خط فرمان پلسک در نسخه‌های امروزی است و خودش مسیر درست ابزار را پیدا می‌کند. اگر روی نسخه‌ای قدیمی هستید که این دستور را ندارد، همان ابزار را می‌توانید با مسیر کامل صدا بزنید (روی دبیان و اوبونتو /opt/psa/admin/sbin/statistics):

/usr/local/psa/admin/sbin/statistics --calculate-one --domain-name=example.com

و اگر می‌خواهید آمار همه دامنه‌ها، ریسلرها، مشتریان و در نهایت کل سرور یک‌جا بازسازی شود، لازم نیست دستور بالا را دامنه‌به‌دامنه تکرار کنید:

plesk sbin statistics --calculate-all

این حالت روی سرورهای شلوغ سنگین است و ممکن است طول بکشد، پس ترجیحاً در ساعات کم‌ترافیک اجرایش کنید. بعد از اتمام، داشبورد ادمین، ریسلر یا کاربر را باز کنید؛ حالا عدد نمایش‌داده‌شده همان چیزی است که du هم می‌گوید.

یک نکته جانبی: برند «پلسک پارالل» مربوط به سال‌هایی است که محصول زیر نام Parallels عرضه می‌شد. مدت‌هاست که این محصول مستقل شده و نسخه‌های امروزی با نام Plesk Obsidian شناخته می‌شوند. سایر بخش‌های پنل، از جمله بکاپ‌گیری، ریستور و زمان‌بندی در Plesk، مستقل از این موضوع کار می‌کنند.

سی پنل: سایز دیتابیس صفر نشان داده می‌شود

در سی پنل شکل رایج مشکل فرق می‌کند: عدد کلی مصرف درست است ولی سهم دیتابیس‌ها همیشه صفر است. علتش هم ساده است؛ محاسبه حجم دیتابیس‌ها در مصرف دیسک یک گزینه جداگانه در WHM است و به‌صورت پیش‌فرض روشن نیست.

روش اول، از داخل WHM:

  • وارد WHM شوید.
  • به Server Configuration و سپس Tweak Settings بروید.
  • گزینه Include databases in disk usage calculations را در کادر جستجوی همان صفحه پیدا و فعال کنید.
  • تغییرات را Save کنید.

روش دوم، از SSH: همین تنظیم در فایل زیر نگهداری می‌شود:

/var/cpanel/cpanel.config

می‌توانید پارامتر disk_usage_include_sqldbs را در آن پیدا کرده و مقدارش را به 1 تغییر دهید، اما دست‌کاری مستقیم این فایل روش توصیه‌شده نیست. راه پشتیبانی‌شده، استفاده از API خود سی پنل است که هم فایل را درست می‌نویسد و هم سرویس‌های لازم را مطلع می‌کند:

/usr/local/cpanel/bin/whmapi1 set_tweaksetting key=disk_usage_include_sqldbs value=1

در آخر، کش مربوط به حجم دیتابیس‌ها را بازسازی کنید:

/usr/local/cpanel/scripts/update_db_cache

در نصب‌های سی پنل /scripts یک لینک به /usr/local/cpanel/scripts است، بنابراین /scripts/update_db_cache هم همان اسکریپت را اجرا می‌کند؛ ولی نوشتن مسیر کامل امن‌تر است. بعد از این مرحله بخش Databases باید حجم واقعی را نشان بدهد.

یک هشدار مهم: با فعال کردن این گزینه، مصرف دیسک همه اکانت‌ها بالا می‌رود، چون چیزی که قبلاً شمرده نمی‌شد حالا شمرده می‌شود. اگر اکانتی نزدیک سقف فضایش بوده، ممکن است بلافاصله از سقف رد شود و سایت یا ایمیلش با خطای پر شدن فضا مواجه شود. پیش از فعال‌سازی روی یک سرور شلوغ، حاشیه فضای اکانت‌ها را ببینید و در صورت نیاز اول سقف‌ها را اصلاح کنید.

اگر مشکل فراتر از دیتابیس‌هاست و مصرف کل اکانت‌ها بی‌ربط نشان داده می‌شود، معمولاً پای سیستم quota در میان است. در این حالت بازسازی quota نقطه شروع درستی است؛ روی سرورهای پرتعداد این اسکریپت ممکن است طولانی شود، پس در ساعات کم‌ترافیک اجرایش کنید:

/usr/local/cpanel/scripts/fixquotas

وقتی عدد واقعی نزدیک سقف است

گاهی هم آمار درست است و هم دیسک واقعاً پر است؛ یعنی سرویس شما دیگر جوابگو نیست. در این حالت پاک کردن چند فایل لاگ فقط چند روز وقت می‌خرد. کارهای پایدارتر این‌هاست:

  • مخزن بکاپ را از دیسک اصلی سرور بیرون ببرید و روی فضای ریموت (FTP یا فضای ابری) بگذارید تا بکاپ‌ها دیگر با سایت‌ها بر سر فضا رقابت نکنند.
  • سیاست نگهداری بکاپ را محدود کنید؛ نگه داشتن نسخه‌های بی‌شمار قدیمی روی همان سرور نه امن است نه اقتصادی.
  • logrotate و پاکسازی دوره‌ای فایل‌های موقت را درست تنظیم کنید تا مشکل تکرار نشود.
  • اگر بعد از پاکسازی هم فضای آزاد کم است، پاک کردن بیشتر جواب نمی‌دهد و ارتقای فضای میزبانی قدم بعدی است. اگر سرویس فعلی‌تان جا کم آورده، سرویس‌های هاست با فضای بیشتر گزینه ساده‌تری نسبت به مدیریت دائمی کمبود فضاست.

جمع‌بندی و چک‌لیست

  • هیچ‌وقت از روی عدد کنترل پنل تصمیم نگیرید؛ اول df -h و df -i.
  • محل مصرف را با du -xh --max-depth=1 لایه‌به‌لایه و برای هر پارتیشن جداگانه پیدا کنید.
  • اختلاف df و du یعنی فایل حذف‌شده‌ای هنوز باز است: lsof +L1.
  • در پلسک اول سراغ /var/lib/psa/dumps و بعد محتوای پوشه‌های tmp بروید و بکاپ‌ها را ترجیحاً از Backup Manager پاک کنید.
  • برای رفع نمایش اشتباه حجم دیسک در پلسک، plesk sbin statistics --calculate-one برای یک دامنه و --calculate-all برای کل سرور.
  • در سی پنل، گزینه Include databases in disk usage calculations را فعال و update_db_cache را اجرا کنید.
  • اگر عدد درست هم نزدیک سقف است، مسئله پاکسازی نیست، مسئله ظرفیت است.