دليل شامل لاستخدام أمر df في لينكس: شرح عملي وتفصيلي

في عالم أنظمة التشغيل، وخاصة لينكس، تُعد إدارة مساحة التخزين من المهام الأساسية التي يحتاج كل مستخدم، سواء كان مبتدئًا أو محترفًا، إلى إتقانها. يأتي أمر df كأحد الأدوات الأساسية والمهمة في هذه المهمة، حيث يوفر نظرة سريعة وشاملة على استخدام مساحة التخزين في نظام الملفات.

لكن ما الذي يجعل df بهذه الأهمية؟ تخيل أنك تعمل على خادم لينكس حساس، وفجأة تبدأ في تلقي رسائل تحذيرية تشير إلى امتلاء مساحة التخزين. بدون فهم كيفية استخدام df بشكل صحيح، ستكون مثل ربان السفينة الذي يحاول عبور المحيط بدون بوصلة أو خرائط. هذا الأمر البسيط يمكن أن يكون الفارق بين نظام يعمل بسلاسة ونظام معطّل تمامًا.

سواء كنت تريد مراقبة المساحة على حاسوبك الشخصي أو على خادم عمل، فإن إتقان أمر df سيمنحك السيطرة على موارد التخزين الخاصة بك ويساعدك في الحفاظ على نظامك يعمل بشكل سلس وفعال.

ما هو أمر df في لينكس؟

أمر df (اختصار لـ “disk free”) هو أداة سطر أوامر قياسية في أنظمة يونكس ولينكس تقدم معلومات عن مساحة التخزين المتوفرة على أنظمة الملفات المثبتة. عند تشغيله بدون أي خيارات، يعرض `df` قائمة بجميع أنظمة الملفات المثبتة حاليًا، مع معلومات عن سعة التخزين الكلية، المساحة المستخدمة، المساحة المتاحة، ونقطة التركيب لكل نظام ملفات.

يعود تاريخ أمر df إلى الإصدارات الأولى من نظام يونكس في السبعينيات، مما يجعله أحد أقدم الأوامر التي لا تزال مستخدمة على نطاق واسع اليوم. وما يجعله أداة أساسية هو بساطته من ناحية، وقوته من ناحية أخرى. فهو لا يحتاج إلى أي تثبيتات إضافية في معظم توزيعات لينكس، حيث يأتي مع حزمة GNU coreutils الأساسية.

لفهم كيفية عمل df، انظر إلى المثال التالي الأساسي:


df

عند تنفيذ هذا الأمر، ستحصل على مخرجات مشابهة لما يلي (قد تختلف التفاصيل حسب نظامك):


Filesystem 1K-blocks Used Available Use% Mounted on
udev 4037352 0 4037352 0% /dev
tmpfs 814320 1740 812580 1% /run
/dev/sda1 245268912 78638508 154131584 34% /
tmpfs 4071588 52184 4019404 2% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4071588 0 4071588 0% /sys/fs/cgroup
/dev/sdb1 960380416 35432512 924947904 4% /mnt/data
tmpfs 814320 80 814240 1% /run/user/1000

في هذا المثال، نرى عدة أعمدة مهمة:
– Filesystem: يحدد جهاز أو نظام الملفات
– 1K-blocks: الحجم الكلي لمساحة التخزين بوحدة 1 كيلوبايت
– Used: المساحة المستخدمة
– Available: المساحة المتاحة للمستخدمين العاديين
– Use%: النسبة المئوية للمساحة المستخدمة
– Mounted on: نقطة التركيب حيث يتم الوصول لنظام الملفات

أمر df يعتمد على قراءة معلومات من ملف `/etc/mtab` (أو `/proc/mounts` في بعض الأنظمة) الذي يحتفظ بقائمة بأنظمة الملفات المثبتة حاليًا، ثم يستعلم عن مساحة التخزين لكل منها من خلال استدعاءات نظام مثل `statvfs()`.

من المهم ملاحظة أن df يقدم معلومات في الوقت الفعلي، مما يجعله أداة موثوقة لفحص حالة التخزين الحالية. ومع ذلك، يمكن أن تختلف نتائجه قليلاً عند مقارنتها بأدوات أخرى مثل du لأنها تعتمد على طرق حساب مختلفة.

في القسم التالي، سنتعرف على كيفية قراءة وفهم مخرجات أمر df بشكل أكثر تفصيلاً، وسنشرح الوحدات المستخدمة وكيفية تفسير الأرقام المختلفة التي يعرضها.

قراءة وفهم مخرجات أمر df

فهم المخرجات التي يقدمها أمر `df` بشكل دقيق هو خطوة أساسية للاستفادة الكاملة من هذه الأداة. دعونا نتعمق في تحليل كل عنصر من عناصر المخرجات ونشرح كيفية تفسيرها بشكل صحيح.

عند تنفيذ df بدون خيارات، يعرض الأعمدة التالية:

1. Filesystem: يعرض هذا العمود اسم الجهاز أو مصدر نظام الملفات. يمكن أن يكون:
– جهاز كتلي مثل `/dev/sda1`
– نظام ملفات virtual مثل `udev` أو `tmpfs`
– نظام ملفات شبكي مثل `server:/share`

2. 1K-blocks: الحجم الكلي لنظام الملفات بوحدة كتل بحجم 1 كيلوبايت (1024 بايت). من المهم فهم أن هذه القيمة تمثل السعة الكلية القابلة للاستخدام، وليس بالضرورة السعة الفيزيائية للجهاز.

3. Used: عدد كتل 1K المستخدمة حاليًا. يتضمن هذا عادةً كل المساحة المحجوزة من قبل الملفات، بما في ذلك ما قد يكون محجوزًا للنظام ولكنه غير مرئي للمستخدمين العاديين.

4. Available: عدد كتل 1K المتاحة لإنشاء ملفات جديدة بواسطة المستخدم العادي. هذه القيمة غالبًا ما تكون أقل من “الحجم الكلي – المستخدم” لأن نظام الملفات يحتفظ عادةً بجزء من المساحة للعمليات النظامية أو لاستخدام root فقط.

5. Use%: النسبة المئوية للمساحة المستخدمة من المساحة الكلية، محسوبة كـ (المستخدم / الكلي) * 100.

6. Mounted on: نقطة في شجرة الدلائل حيث تم تركيب نظام الملفات، مثل `/` للجذر أو `/home` لدليل المستخدمين.

وحدات القياس المختلفة

بشكل افتراضي، يعرض df المساحة بوحدة كتل 1K، لكن يمكن استخدام خيارات لتغيير ذلك:


df -h # يعرض الأحجام بوحدات يقرأها البشر (KB, MB, GB)
df -m # يعرض الأحجام بالميغابايت
df -k # يعرض الأحجام بالكيلوبايت (الافتراضي)
df -i # يعرض معلومات عن العقد (inodes) بدلاً من المساحة

على سبيل المثال، df -h سيعطي مخرجات أكثر قابلية للقراءة:


Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 796M 1.7M 794M 1% /run
/dev/sda1 234G 75G 147G 34% /

قراءة معلومات العقد (inodes)

باستخدام الخيار -i، يغير df تركيزه من مساحة التخزين إلى عدد العقد (inodes) التي تمثل بنى البيانات التي تتبع الملفات على نظام الملفات:


df -i

المخرجة ستكون مثل:


Filesystem Inodes IUsed IFree IUse% Mounted on
udev 504669 415 504254 1% /dev
tmpfs 508949 776 508173 1% /run
/dev/sda1 15638528 657832 14980696 5% /

هذا مهم خاصة عندما يكون نظام الملفات ممتلئًا من حيث عدد العقد حتى لو كانت هناك مساحة تخزين متاحة. هذا الأمر مفيد لكشف المشاكل في الأنظمة التي تحتوي على عدد كبير جدًا من الملفات الصغيرة.

تفسير النتائج العملية

لنفترض أنك تشاهد المخرجات التالية:


Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 245268912 230000000 10000000 96% /

كيف تفسر هذه النتيجة؟

1. نظام الملفات `/dev/sda1` ممتلئ بنسبة 96%، وهذه حالة حرجة.
2. هناك فقط 10GB متبقية من أصل 245GB.
3. عندما يقترب Use% من 100%، قد يواجه النظام مشاكل في:
– إنشاء ملفات جديدة
– تحديث الملفات الموجودة
– تنفيذ بعض العمليات النظامية

في هذه الحالة، يجب اتخاذ إجراء سريع لتحرير المساحة أو توسيع نظام الملفات.

في القسم التالي، سنستكشف الخيارات الأكثر تقدمًا لأمر `df` وكيف يمكن استخدامها لتحليل أكثر دقة لأنظمة الملفات المختلفة.

الخيارات المتقدمة لأمر df

بينما يوفر `df` معلومات أساسية عند استخدامه بدون خيارات، فإن قوته الحقيقية تكمن في الخيارات المتعددة التي تتيح تخصيص المخرجات حسب الاحتياجات المحددة. دعونا نستكشف أهم هذه الخيارات وكيفية استخدامها في سيناريوهات عملية.

عرض المعلومات بوحدات يمكن قراءتها (Human-readable)

الخيار `-h` هو ربما الأكثر استخدامًا مع `df`، حيث يحول الأرقام إلى وحدات يسهل فهمها (KB، MB، GB، TB) حسب الحجم:


df -h

مخرجات نموذجية:


Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 796M 1.7M 794M 1% /run
/dev/sda1 234G 75G 147G 34% /

هذا الخيار مفيد بشكل خاص للمبتدئين أو عندما تحتاج إلى فهم سريع لحالة التخزين دون الحاجة إلى حساب الأحجام يدويًا.

عرض نوع نظام الملفات

الخيار `-T` يضيف عمودًا إضافيًا يبين نوع نظام الملفات لكل جهاز:


df -T

مثال على المخرجات:


Filesystem Type 1K-blocks Used Available Use% Mounted on
udev devtmpfs 4037352 0 4037352 0% /dev
tmpfs tmpfs 814320 1740 812580 1% /run
/dev/sda1 ext4 245268912 78638508 154131584 34% /

هذه المعلومة مفيدة لتحديد أنظمة الملفات غير المدعومة أو للتحقق من كون نظام الملفات من النوع المتوقع (مثل ext4، xfs، nfs، إلخ).

استبعاد أنواع معينة من أنظمة الملفات

عندما تريد التركيز على أنظمة ملفات معينة وتجاهل أخرى (مثل tmpfs أو devtmpfs)، يمكن استخدام الخيار `-x`:


df -x tmpfs -x devtmpfs

هذا الأمر سيعرض فقط أنظمة الملفات التي ليست من نوع tmpfs أو devtmpfs، مما يعطيك صورة أوضح عن مساحة التخزين الفعلية على الأقراص الفعلية.

عرض معلومات عن نظام ملفات محدد

لرؤية معلومات حول نظام ملفات معين فقط، يمكن تحديد نقطة التركيب أو الجهاز كوسيط للأمر:


df /home # معلومات عن نظام الملفات الذي يحتوي على /home
df /dev/sda1 # معلومات عن هذا الجهاز المحدد

عرض المساحة المتاحة للمستخدمين العاديين

الخيار `–output` (متوفر في الإصدارات الحديثة) يسمح بتخصيص الأعمدة المعروضة:


df --output=source,fstype,size,avail,pcent,target -h

هذا يعطي تحكمًا دقيقًا في المخرجات، ويمكن دمجه مع أدوات أخرى مثل `sort` لتحليل أكثر تقدمًا.

التكامل مع أوامر أخرى

أمر `df` يصير أكثر قوة عند دمجه مع أدوات يونكس الأخرى. على سبيل المثال:


df -h | grep -v loop | sort -k5 -nr # يرتب أنظمة الملفات من الأكثر امتلاءً للأقل

أو:


df --output=size,used,avail,pcent,target | awk 'NR>1 && $4+0 > 80 {print}' # نظرة سريعة على أنظمة الملفات الممتلئة أكثر من 80%

مراقبة المساحة المشبوهة

في بعض الأحيان قد ترى مساحة مستخدمة كبيرة بدون وجود ملفات كبيرة واضحة. في هذه الحالة، يمكنك استخدام `df` مع `du` للتحقق:


df -h / # يظهر المساحة المستخدمة في الجذر
du -sh /* | sort -h # يتحقق من حجم كل دليل في الجذر

هذا النهج يساعد في تحديد أي مجلدات تستهلك مساحة كبيرة بشكل غير متوقع.

مراقبة المساحة القابلة للتخصيص

بعض أنظمة الملفات (خاصة ext4) تحجز نسبة من المساحة لاستخدام root فقط (عادة 5%). يمكن تغيير هذه النسبة باستخدام `tune2fs`، ولكن `df` يظهر فقط المساحة المتاحة للمستخدم العادي.

لفهم الفرق، يمكنك استخدام:


df -h /
df -h / --total # في بعض الإصدارات
sudo df -h / # قد يظهر مساحة إضافية محجوزة

في القسم التالي، سنناقش بعض السيناريوهات العملية وكيفية استخدام `df` فيها لحل مشاكل العالم الحقيقي.

استخدام df في سيناريوهات عملية

الآن بعد أن تعرفنا على الخيارات الأساسية والمتقدمة لأمر `df`، دعونا نستكشف كيفية تطبيقه في مواقف عملية شائعة يواجهها مستخدمو لينكس ومسؤولو الأنظمة. هذه الأمثلة ستمنحك فكرة عن كيفية الاستفادة من `df` في عملك اليومي.

مراقبة امتلاء مساحة النظام

أحد الاستخدامات الأساسية لـ `df` هو مراقبة أنظمة الملفات لاكتشاف أي منها يقترب من الامتلاء. هنا خطوات عملية للقيام بذلك:


df -h # نظرة عامة سريعة
df -h | awk '$5+0 > 80 {print}' # اكتشاف أنظمة الملفات الممتلئة أكثر من 80%

عند ملاحظة نظام ملفات ممتلئ:
– حدد المجلدات الكبيرة داخل نظام الملفات:


du -sh /path/to/mount/* | sort -h

– ابحث عن الملفات الكبيرة:


find /path/to/mount -type f -size +100M -exec ls -lh {} +

مراقبة النمو السريع للمساحة المستخدمة

للمقارنة بين حالتين مختلفتين في الوقت، يمكنك:


df -h > df_before.txt
# بعد بعض الوقت
df -h > df_after.txt
diff df_before.txt df_after.txt

أو بشكل أكثر تطورًا باستخدام `watch`:


watch -n 60 'df -h' # تحديث كل دقيقة

التحقق من امتلاء العقد (inodes)

في بعض الحالات، قد يظهر `df -h` مساحة متاحة لكن النظام يبلغ عن امتلاء المساحة، وهذا قد يكون بسبب استنفاد العقد:


df -i # التحقق من استخدام العقد

إذا كانت نسبة IUse% قريبة من 100%:
– ابحث عن الدلائل ذات العدد الكبير من الملفات:


for i in /*; do echo -n "$i "; find $i | wc -l; done | sort -k2 -nr | head

مراقبة أنظمة الملفات الشبكية (NFS)

عند التعامل مع أنظمة ملفات شبكية، يمكن استخدام:


df -hT | grep nfs # عرض أنظمة الملفات الشبكية فقط

لاحظ أن بعض خيارات `df` قد لا تعمل مع أنظمة الملفات الشبكية بسبب قيود الأذونات أو الاتصال.

إنشاء تقرير دوري عن حالة التخزين

يمكن أتمتة عملية مراقبة المساحة باستخدام `df` في نص برمجي:


#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M)
df -h > /var/log/df_report_$DATE.log
find /var/log/ -name "df_report_*.log" -mtime +30 -delete # حذف التقارير الأقدم من 30 يوم

ثم يمكنك إضافة هذا السكربت إلى crontab لتشغيله يوميًا.

المقارنة بين المساحة الفعلية والمساحة المبلغ عنها

في بعض الأحيان قد تلاحظ اختلافًا بين ما يظهره `df` وما يظهره `du`. للتحقق:


df -h /path
du -sh /path

إذا كان `du` يظهر مساحة أقل بكثير من `df`، فقد يكون هناك:
– ملفات محذوفة لا تزال مفتوحة من قبل عمليات
– مساحة محجوزة لنظام الملفات نفسه
– أخطاء في نظام الملفات (تحتاج إلى fsck)

التحقق من المساحة قبل تنفيذ عمليات كبيرة

قبل تنفيذ عمليات قد تستهلك مساحة كبيرة (مثل نسخ احتياطي أو تحميل ملفات كبيرة)، من الحكمة التحقق أولاً:


df -h /target/directory

يمكنك دمج هذا في سكربتاتك الأوتوماتيكية لاتخاذ قرارات بناءً على المساحة المتاحة.

مراقبة أنظمة الملفات المؤقتة

للتحقق من أنظمة الملفات المؤقتة والتي قد تسبب مشاكل إذا امتلأت:


df -h /tmp /var/tmp

في بعض الأنظمة، قد يتم تنظيف `/tmp` تلقائيًا عند إعادة التشغيل، بينما يحتفظ `/var/tmp` بالملفات بين إعادة التشغيل.

التخطيط لتوسعة أنظمة الملفات

عند التخطيط لتوسعة نظام ملفات، يمكنك تتبع نمو المساحة المستخدمة مع الوقت:


echo "$(date +%Y-%m-%d), $(df -h / | awk 'NR==2{print $3,$4}')" >> storage_growth.csv

هذه البيانات يمكن أن تساعد في التنبؤ بموعد احتياجك لتوسعة التخزين.

في القسم التالي، سنقدم نصائح وحيلاً متقدمة لاستخدام `df` بكفاءة أكبر، بالإضافة إلى تفسير بعض سلوكياته غير البديهية.

نصائح متقدمة وحلول للمشاكل الشائعة

بعد أن أصبحت ملمًا بالأساسيات والاستخدامات العملية لأمر `df`، حان الوقت لاستكشاف بعض التقنيات المتقدمة، الحيل المفيدة، وحلول المشكلات الشائعة التي قد تواجهها عند استخدام هذه الأداة.

فهم الفرق بين `df` و `du`

أحد أكثر المصادر شيوعًا للالتباس هو الاختلاف بين ما يظهره `df` وما يظهره `du`. الفروق الرئيسية:

df:
– يبلغ عن المساحة على مستوى نظام الملفات
– يأخذ في الاعتبار المساحة المحجوزة للنظام
– يعكس الحالة الفورية (بما في ذلك الملفات المحذوفة المفتوحة)

du:
– يحسب المساحة المستخدمة فعليًا من قبل الملفات
– لا يشمل المساحة المحجوزة
– يتطلب الوصول إلى كل ملف لحساب الحجم

عند وجود اختلاف كبير بينهما، قد يكون السبب:
– ملفات محذوفة لا تزال مفتوحة من قبل عمليات
– تباين في المساحات المحجوزة
– مشاكل في نظام الملفات

لإيجاد الملفات المحذوفة المفتوحة التي تستهلك مساحة:


lsof +L1 # عرض الملفات المحذوفة (حجم link count = 1)

التعامل مع أنظمة الملفات الممتلئة

عندما يظهر `df` أن نظام ملفات ممتلئ (أقترب Use% من 100%)، إليك خطوات التحقيق:

1. تحقق من المساحة المتاحة:


df -h

2. ابحث عن الملفات الكبيرة:


find /mount/point -type f -exec du -h {} + | sort -h | tail -n 20

3. تحقق من سجلات النظام:


journalctl --disk-usage
journalctl --vacuum-size=100M # لتقليل حجم السجلات

4. انظر إلى حزم النظام:


# على أنظمة based-RPM:
package-cleanup --leaves
# على أنظمة based-Debian:
apt-get autoremove

مراقبة مساحة root بشكل ديناميكي

لإنشاء لوحة مراقبة بسيطة لمساحة root:


watch -n 60 'df -h / && echo "" && df -i /'

هذا سيعرض تحديثًا كل دقيقة لكل من المساحة العادية ومساحة العقد.

فهم مساحات “الظل”

في بعض الأحيان، قد يكون جزء من المساحة محجوزًا لنظام الملفات نفسه (مثل metadata في ext4). للتحقق:


tune2fs -l /dev/sdX | grep -i reserve

يمكن تعديل النسبة المحجوزة (للسوبر يوزر فقط) باستخدام:


tune2fs -m 1 /dev/sdX # يضع حجز 1% بدلاً من 5% الافتراضية

تصفية النتائج حسب نوع نظام الملفات

لتركيز `df` على أنظمة ملفات معينة وتجاهل أخرى:


df -h -t ext4 -t xfs # فقط ext4 و xfs
df -h -x tmpfs -x devtmpfs # كل شيء ما عدا tmpfs و devtmpfs

دمج `df` مع `awk` لتحليل متقدم

لإنشاء تقرير عن أنظمة الملفات الممتلئة أكثر من 90%:


df -h | awk '
NR==1 {print; next}
$5+0 > 90 {printf "\033[31m%s\033[0m\n", $0; next}
$5+0 > 80 {printf "\033[33m%s\033[0m\n", $0; next}
{print}'

هذا النص سيظهر الأنظمة الممتلئة أكثر من 90% باللون الأحمر، وأكثر من 80% باللون الأصفر.

فهم مساحة swap

رغم أن `df` لا يظهر مساحة swap، يمكنك استخدام:


free -h
swapon --show

لرؤية حالة مساحة swap في نظامك.

التعامل مع نسخ LVM

عند استخدام إدارة الحجوم المنطقية (LVM)، يمكن لـ `df` أن يظهر أرقامًا مربكة أحيانًا. استخدم أدوات LVM الإضافية:


lvs # عرض الحجوم المنطقية
vgs # عرض مجموعات الحجوم
pvs # display physical volumes

إنشاء سجل تاريخي لتغيرات المساحة

لإنشاء سجل زمني لتغيرات المساحة:


log_file="/var/log/df_history.log"
echo "==== $(date) ====" >> $log_file
df -h >> $log_file

ثم يمكنك إضافة هذا إلى crontab لتشغيله كل ساعة أو يوميًا.

الفهم العميق لنتائج `df -i`

عند امتلاء العقد، قد تواجه أخطاء “No space left on device” حتى مع وجود مساحة تخزين. للتحقق:


df -i

ولتحليل استخدام العقد:


find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

هذا سيساعد في تحديد الدلائل التي تحتوي على أكبر عدد من الملفات.

نصائح لأداء أفضل

– عند تشغيل `df` على أنظمة ملفات شبكية كبيرة، قد يستغرق الأمر وقتًا. استخدم:


df -l # لأنظمة الملفات المحلية فقط

– لتحسين أداء `df` على أنظمة ذات عدد كبير من نقاط التركيب، يمكنك التركيز فقط على أنظمة معينة:


df -h / /home /var

المراجع والموارد

للاستزادة والتحقق من المعلومات الواردة في هذا الدرس، إليك بعض المصادر الموثوقة:

1. الصفحة الرسمية لـ GNU Coreutils

2. صفحة man الرسمية لـ df (يمكن الوصول إليها على نظام لينكس عبر `man df`)

3. Linux Documentation Project

4. كتاب “Linux Command Line and Shell Scripting Bible” – مصدر ممتاز لفهم أدوات لينكس الأساسية

5. مقالات Red Hat عن إدارة التخزين

ماهر المخلوفي
ماهر المخلوفي

تونسي من مواليد 1993، متحصّل على شهادة تقني سامي في إعلامية التصرف. أعمل كمطور ويب منذ 2016، وباحث شغوف في مجال تكنولوجيا المعلومات، أقدم محتوى يعكس خبرتي و كل ما تعلمته بطريقة مبسطة و سلسة لكل من يستحق معلومة في المجال. أمتلك وأدير عدة مواقع إلكترونية، وأجمع بين حبي للفنون وقراءة الكتب العلمية والفكرية و الدينية . أتطوع بحسب إمكانياتي لإثراء و دعم المجتمع التقني العربي بدرجة أولى و العالمي بدرجة ثانية .

المقالات: 43