رسالة No space left on device، أو قاعدة بيانات توقفت فجأة، أو موقع لا يحفظ الملفات المرفوعة — كلها علامات قرص ممتلئ. في هذا الدليل الشامل نجد أولًا أين ذهبت المساحة، ثم ننظّفها بأمان، وإن لم يكفِ ذلك نوسّع القرص بعد الترقية — وكل الأوامر مجرّبة على سيرفر حقيقي في مرام هوست، ومنها توسيع فعلي لقرصه من 250 إلى 251GB.

⚡ الإجابة المختصرة

اعرف: df -h ثم sudo du -xh --max-depth=1 / | sort -rh | head. نظّف: sudo apt-get clean وsudo journalctl --vacuum-size=200M وsudo docker system prune. وسّع: بعد ترقية الخطة أعد التشغيل (يتوسع تلقائيًا) أو sudo growpart /dev/sda 1 && sudo resize2fs /dev/sda1.

الخطوة 1: أين ذهبت المساحة؟

ابدأ بـdf -h لترى الصورة العامة، ثم du لتنزل مجلدًا مجلدًا نحو السبب. هذه مخرجات سيرفرنا:

أمرا df -h وdu --max-depth=1 لمعرفة استهلاك القرص
مخرجات حقيقية

كرّر du على المجلد الأكبر (مثل sudo du -xh --max-depth=1 /var | sort -rh | head) حتى تصل إلى المجلد الذي تضخّم. ولمعرفة أكبر الملفات مباشرة:

البحث عن أكبر الملفات على القرص بأمر find
مخرجات حقيقية

الخطوة 2: نظّف بأمان

هذه الأماكن الأشهر لتراكم الملفات، والأوامر آمنة لا تمسّ بياناتك. في سيرفرنا حرّر apt-get clean وحده 290MB:

تنظيف كاش apt وسجلات journalctl ومساحة Docker
مخرجات حقيقية: 290MB من apt clean
المكانالأمرملاحظة
كاش التثبيتsudo apt-get cleanآمن تمامًا
حزم ونوى قديمةsudo apt autoremove --purgeراجع القائمة قبل الموافقة
سجلات النظامsudo journalctl --vacuum-size=200Mيُبقي آخر 200MB
سجلات قديمة مضغوطةsudo find /var/log -name "*.gz" -deleteأرشيف السجلات القديم
Dockersudo docker system pruneيحذف الحاويات المتوقفة والصور غير المستعملة. -a أقوى — انتبه.
سجل ضخم لتطبيقsudo truncate -s 0 /path/app.logيفرغ الملف دون حذفه (أسلم من rm لملف مفتوح)

لا تحذف: /swapfile، أو أي شيء داخل /usr و/boot، أو ملفات قاعدة البيانات في /var/lib/mysql مباشرة. وقبل حذف شيء لا تعرفه خذ لقطة Snapshot.

حالة خاصة — inodes: إن كان df -h يعرض مساحة متاحة والرسالة ما زالت تظهر، فافحص df -i: ربما امتلأ عدد الملفات (ملايين الملفات الصغيرة، غالبًا جلسات PHP أو كاش).

الخطوة 3: لم يكفِ التنظيف؟ رقِّ ووسّع القرص

زيادة المساحة تبدأ بترقية الخطة. بعدها يجب أن تكبر ثلاث طبقات: القرص (sda) ثم القسم (sda1) ثم نظام الملفات (ما يعرضه df). افتح صفحة Disks في لوحة سيرفرك وتأكد من الحجم؛ ولاحظ تنبيه اللوحة بأن أي تعديل على القرص يحتاج إعادة تشغيل:

صفحة Disks في لوحة مرام وحجم القرص وزر التعديل
لقطة حقيقية

زر القلم يعدّل الحجم ضمن حدود خطتك فقط — جرّبنا 251 على خطة 250GB فرفضته اللوحة:

رسالة You do not have enough resources عند تجاوز مساحة الخطة
لقطة حقيقية من تجربتنا

بعد توسيع قرص سيرفرنا التجريبي فعلًا، هذا ما ظهر داخله: القرص صار 251G، لكن القسم ونظام الملفات بقيا على الحجم القديم:

lsblk يظهر القرص 251G والقسم 249G وdf لم يتغير
مخرجات حقيقية بعد توسيع القرص

الطريقة الأولى — إعادة تشغيل واحدة: قوالب لينكس في مرام تستعمل cloud-init، ووحدة growpart فيه تعمل مع كل إقلاع فتمدّ القسم ونظام الملفات تلقائيًا. هذا سجلّ حقيقي من السيرفر نفسه عند أول تشغيل، حين وسّع نفسه من حجم القالب (نحو 30GB) إلى حجم الخطة:

سجل cloud-init: growpart يعمل مع كل إقلاع ويوسّع القسم تلقائيًا
سجل حقيقي من السيرفر

الطريقة الثانية — بدون إعادة تشغيل: أمران والسيرفر يعمل. هذه المخرجات الحقيقية:

أمرا growpart وresize2fs لتوسيع القسم ونظام الملفات دون إعادة تشغيل
مخرجات حقيقية
lsblk                          # اسم القرص ورقم القسم (هنا sda و1)
sudo growpart /dev/sda 1       # لاحظ المسافة بين sda و1
df -T /                        # نوع نظام الملفات
sudo resize2fs /dev/sda1       # ext4 (Ubuntu وDebian)
sudo xfs_growfs /              # xfs
df -h /                        # تحقّق
الرسالةالحل
NOCHANGE: partition 1 ... cannot be grownالقسم يملأ القرص أصلًا: التوسيع تمّ، أو القرص نفسه لم يكبر بعد (تحقق من lsblk وصفحة Disks).
growpart: command not foundsudo apt install cloud-guest-utils
القرص لم يكبر في lsblkأعد التشغيل من Reboot ثم افحص من جديد.

لكي لا يمتلئ مجددًا

  • حدّد حجم سجلات النظام دائمًا: أضف SystemMaxUse=200M في /etc/systemd/journald.conf ثم sudo systemctl restart systemd-journald.
  • نظّف Docker دوريًا، وحدّد حجم سجلات الحاويات (max-size في /etc/docker/daemon.json).
  • لا تحتفظ بنسخ احتياطية داخل السيرفر نفسه — استعمل النسخ الاحتياطي في لوحة مرام.
  • اعرف الامتلاء قبل أن يحدث: ألقِ نظرة أسبوعية على df -h، أو على عدّاد «المساحة المستهلكة» في صفحة الخدمة.