نفدت مساحة القرص
كيف تجد بسرعة ما يستهلك القرص، وتحرر غيغابايتات بأمان، وتفهم المزالق: الملفات المفتوحة المحذوفة وinodes المستنفدة.
آخر تحديث 23 أغسطس 2026
امتلاء القرص يعطّل كل شيء دفعة واحدة: تتوقف قاعدة البيانات عن قبول الكتابة، ويعيد الموقع أخطاء، ويرفض journalctl العمل، وأحيانًا حتى SSH لن يسمح لك بالدخول، لأنه لم يبقَ شيء لكتابة سجل الجلسة فيه. عليك التصرف بسرعة وبالترتيب.
الفحص
df -h
df -i
الأمر الأول يعرض المساحة، والثاني يعرض الـ inodes. امتلاء الـ inodes ينتج نفس خطأ "No space left on device" حتى مع وجود غيغابايتات فارغة: يحدث هذا عندما يتراكم في دليل واحد ملايين الملفات الصغيرة (جلسات PHP، الذاكرة المؤقتة، قوائم الانتظار).
يمكنك أيضًا رؤية المساحة المستخدمة في لوحة التحكم على /hosting/vds/m/<id> — الحلقة في تبويب "Overview". تُملأ من بيانات يرسلها qemu-guest-agent؛ وإذا أُزيل الوكيل، تبقى الحلقة فارغة وتعرض اللوحة أمر التثبيت بدلًا منها.
البحث عن المتسبب
du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
du -xh --max-depth=1 /var 2>/dev/null | sort -h | tail -15
ncdu -x / # apt install ncdu, interactive
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
يبقي الخيار -x البحث داخل نظام ملفات واحد ويمنعه من التجول في /proc والأدلة المثبّتة.
المتسببون المعتادون: السجلات في /var/log، وذاكرة حزم البرامج المؤقتة في /var/cache، وصور وأحجام Docker في /var/lib/docker، ومخارج قواعد البيانات، والأرشيفات المنسية في /root و/tmp، وملفات إصدارات التطبيقات القديمة.
تحرير المساحة
journalctl --vacuum-size=200M
apt clean # Debian, Ubuntu
dnf clean all # AlmaLinux, CentOS Stream
docker system prune -af --volumes # careful: will remove unused volumes
find /tmp -type f -mtime +7 -delete
لتحديد سقف دائم للسجل، عدّل /etc/systemd/journald.conf (SystemMaxUse=300M)؛ راجع مقالة سجلات systemd للتفاصيل. أما ملفات التطبيقات، فأعدّ logrotate: بدون التدوير، يمكن لملف app.log واحد أن ينمو بسهولة إلى عشرات الغيغابايتات.
فخ: ملف محذوف لكنه ما زال مفتوحًا
حذفت سجلًا ضخمًا، لكن df يعرض نفس الأرقام. ما دامت إحدى العمليات تبقي الملف مفتوحًا، لا تُعاد المساحة.
lsof +L1 | head -20
الحل الصحيح هو إعادة تشغيل الخدمة التي تحتفظ بالملف (systemctl restart nginx)، أو اقتطاع الملف دون حذفه:
: > /var/log/nginx/access.log
فخ: نفاد الـ inodes
df -i
find /var/www -xdev -type d -printf '%h\n' | sort | uniq -c | sort -rn | head
ابحث عن دليل يضم مئات الآلاف من الملفات ونظّفه على دفعات حتى لا تُسقط الجهاز:
find /var/lib/php/sessions -type f -mtime +2 -delete
إذا لم تبقَ مساحة على الإطلاق
عندما يمتلئ القرص بنسبة 100% ويكون النظام بالكاد يتحرك، سجّل الدخول عبر تبويب "Console" في لوحة التحكم، وحرّر مئة ميغابايت على الأقل (journalctl --vacuum-size=50M ينجح دائمًا تقريبًا)، ثم تابع استكشاف الأخطاء بشكل طبيعي. في الحالة السيئة حقًا، سيساعدك قرص الإنقاذ: يُقلع الجهاز إلى SystemRescue، ويظهر قرصك باسم /dev/sda، فتُثبّته وتنظّف من الخارج.
لتجنب تكرار ذلك
- تنبيه عند عتبة 85% — راجع تنبيهات توقف الموقع.
- دوّر جميع سجلات التطبيقات، وليس سجلات النظام فقط.
- أرسل مخارج قواعد البيانات والأرشيفات خارج الخادم فورًا، بدلًا من إبقائها في
/root. - إذا لم يبقَ شيء لتنظيفه وبياناتك تنمو باستمرار، فانتقل إلى مستوى بقرص أكبر: 40 و80 و120 و160 و200 و250 غيغابايت. الترقية فقط: لا يمكن تصغير الأقراص، والتخفيض غير متاح.
لا تحذف ملفات من
/var/libو/usrعشوائيًا: فهناك تعيش بيانات قواعد البيانات وحزم النظام. اعرف أولًا ما الذي ينتمي إليه الدليل، وبعدها فقط نظّفه.