
ما هو ملف fstab؟ وفكرة عمل الـ File System Table في لينكس
ما هو ملف fstab؟ وفكرة عمل الـ File System Table في لينكس
يعد ملف /etc/fstab أحد أهم الملفات النظامية في توزيعات لينكس، حيث يعمل بمثابة "جدول ثابت" يحدد للنواة (Kernel) كيفية التعرف على الأقراص الصلبة وأقسام التخزين وإرسائها (Mounting) تلقائياً عند تشغيل الجهاز. بدون هذا الملف، سيتعين عليك يدوياً ربط كل قرص في كل مرة تبدأ فيها تشغيل حاسوبك.
لعرض محتوى الملف، يمكنك استخدام الأمر التالي في سطر الأوامر:
cat /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
# Root Partition (System)
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 / btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@ 0 0
# Home Directory
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 /home btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@home 0 0
# Var Directory
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 /var btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@var 0 0
# Boot/EFI Partition
UUID=A004-9F0A /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
# External Data Partition (NTFS)
UUID=01DC93E1699B43A0 /mnt/data ntfs-3g defaults,uid=1000,gid=1000,windows_names,locale=en_US.utf8 0 0
عندما تتأمل هذه السطور، ستلاحظ عدة أشياء تجعل التعامل مع لينكس ممتعاً وسهلاً:
أول ما قد يثير دهشتك هو تكرار كود الـ UUID الطويل في السطور الأولى؛ قد تظن للوهلة الأولى أن هناك خطأً ما، لكن الحقيقة هي أنك تتعامل مع تقنية ذكية تسمى Btrfs. هنا، يخبرنا النظام أن القرص الصلب واحد (ولهذا له نفس الـ UUID)، ولكنه مقسم من الداخل إلى "غرف افتراضية" تسمى Subvolumes. فبدلاً من تقسيم القرص فعلياً وتحديد مساحات ثابتة لكل قسم، يتم توزيع الأدوار برمجياً بين النظام (/) وبين ملفاتك الشخصية (/home) بمرونة تامة.
وإذا نظرت إلى السطور التي تبدأ بعلامة (#)، فاعلم أنها مجرد ملاحظات جانبية كتبها المبرمج أو النظام ليشرح لك وظيفة السطر؛ فهي لا تؤثر على عمل الجهاز، بل هي موجّهة لعينك أنت فقط لتسهيل القراءة.
كذلك، ستجد سطراً مخصصاً لما يسمى بـ قسم الـ EFI؛ وهذا ببساطة هو "مفتاح التشغيل" الذي يستخدمه الجهاز ليبدأ في تحميل نظام لينكس عند الضغط على زر الطاقة. وفي حال كان لديك هاردسك خارجي أو قسم من ويندوز بنظام NTFS، ستجده مدرجاً هنا أيضاً، لضمان أن تفتح جهازك فتجد صورك وملفاتك الشخصية جاهزة أمامك فوراً دون الحاجة لتعريفها يدوياً في كل مرة.
كل هذه التفاصيل تعمل معاً في خلفية النظام لتضمن لك تجربة سلسة، حيث يتحول هذا الملف من مجرد "جدول جامد" إلى خارطة طريق ذكية تعرف مكان كل ملف وكيفية التعامل معه بأفضل أداء ممكن.
تأمين النظام: فحص أخطاء fstab وتجنب مشكلة Boot Error
يتألف كل سطر في ملف
/etc/fstab
من
ستة حقول أو أعمدة محددة بدقة، يفصل بينها
مسافات بيضاء أو علامات جدولة.
يمثل
كل عمود بارامتراً حاسماً، وأي إزاحة أو
خطأ في ترتيب هذه الأعمدة قد يؤدي إلى شلل
في عملية الربط أو فشل النظام في الإقلاع.| طريقة التعريف | الوصف التقني | مستوى الاستقرار | سيناريو الاستخدام المفضل |
| مسار الجهاز | مثل | منخفض؛ قد يتغير الترتيب عند الإقلاع | البيئات البسيطة جداً أو الحالات المؤقتة |
| المعرف الفريد (UUID) | سلسلة 128-بت فريدة تُولد عند تهيئة القسم | مرتفع جداً؛ لا يتغير بتغير المنافذ | الخوادم والأنظمة الاحترافية لضمان الثبات |
| ملصق القسم (LABEL) | اسم نصي يضعه المستخدم للنظام (مثل | متوسط؛ سهل القراءة لكنه معرض للتكرار | الاستخدام البشري السهل وإدارة الأقراص الخارجية |
| معرف PARTUUID | معرف خاص بجدول تقسيم GPT | مرتفع؛ مرتبط بالقسم بغض النظر عن نظام الملفات | الأنظمة التي تعتمد على تقسيم GPT الصارم |
استخدام الـ UUID مقابل Device Names: أيهما أفضل لنظامك؟
نظام الملفات (File System): يحدد هذا العمود ما الذي سيتم تركيبه. يمكنك استخدام اسم القسم (مثل /dev/sda1)، ولكن الأفضل والأكثر شيوعًا هو استخدام المعرف الفريد UUID (مثل UUID=fdd2...) لأنه لا يتغير، حتى إذا قمت بتغيير مكان توصيل القرص الصلب.
نقطة التركيب (Mount Point / Dir): تحدد أين سيظهر محتوى القرص في بنية ملفات النظام. على سبيل المثال: / تعني جذر النظام، /home تعني ملفات المستخدمين، و /mnt/data لقرص تخزين خارجي.
النوع (Type): يحدد نوع نظام الملفات المستخدم في القسم. بعض الأمثلة الشائعة: ext4 (الأكثر استخدامًا في لينكس)
btrfs (حديث ومرن)
vfat (لقسم الـ Boot/EFI)
ntfs-3g (لأقراص الويندوز)
swap (للذاكرة الوهمية)
الخيارات (Options): هذا العمود هو الأكثر تفصيلاً، ويحتوي على مجموعة من الخصائص مفصولة بفواصل:
- defaults: الخيارات الافتراضية (قراءة وكتابة، تشغيل البرامج، إلخ).
- rw / ro: للقراءة والكتابة (Read-Write) أو للقراءة فقط (Read-Only).
- noatime: عدم تحديث وقت آخر وصول للملفات (لتحسين الأداء).
- subvol: (خاص بنظام Btrfs) لتحديد أي مجلد فرعي سيتم استخدامه.
- uid/gid: (مهم لأقراص NTFS) لتحديد هوية المستخدم (uid) والمجموعة (gid) المالكة للملفات، حتى تتمكن من تعديلها بدون مشاكل في الصلاحيات.
النسخ الاحتياطي (Dump): رقم بسيط (0 أو 1). 0 تعني تجاهل هذا القرص عند عمل نسخ احتياطي باستخدام أداة dump القديمة. 1 تعني تضمينه في النسخ الاحتياطي.
الفحص (Pass): يحدد ترتيب فحص القرص بحثًا عن الأخطاء (باستخدام fsck) أثناء الإقلاع:
- 0: لا تقم بفحص القرص (تستخدم لأقراص NTFS، Btrfs أحيانًا، والـ Swap).
- 1: افحص القرص أولاً (تستخدم فقط لقسم الجذر /).
- 2: يتم فحصه بعد الجذر (للأقسام الأخرى مثل /home أو /boot).
مثال عملي: شرح تفصيلي لتركيب الـ volumes
لنلقِ نظرة على كيفية كتابة تركيب volumes في ملف fstab.
السطر الأول:
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 / btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@ 0 0
هذا السطر يوضح كيفية تطبيق الأعمدة التي شرحناها سابقًا، مع خيارات مخصصة للأقراص الحديثة (SSD) ونظام Btrfs:
استخدام الـ UUID مقابل Device Names: أيهما أفضل لنظامك ؟
عشان نفهم السطر ده شغال إزاي، لازم نبص له كأنه "بطاقة تعارف" بين النظام والهارد، بتتكون من أركان أساسية بتحدد الهوية والأداء:
البداية دايماً مع الهوية الرقمية (UUID)؛ ودي "البصمة" اللي مستحيل تتكرر، وبنستخدمها عشان نضمن إن النظام ميتلخبطش بين الأقراص حتى لو غيرت مكان السلك أو ركبت هارد جديد. بعدها بنحدد المسار المستهدف (Mount Point)؛ يعني ببساطة بنقول للنظام "يا سيدي افتح لي ملفات الهارد ده جوه الفولدر الفلاني"، وزي ما هو واضح في مثالنا، علامة (/) معناها إن ده "قلب النظام". وبعدين بنختار اللغة التقنية (Type)، وهنا استخدمنا Btrfs كـ "لغة حوار" متطورة بين النواة والهاردسك عشان نستفيد من ميزاته الحديثة.
منطقة التحكم: إزاي تطلع "أوحش" أداء من الهارد بتاعك؟
الركن ده هو "مطبخ" الإعدادات، أو اللي بنسميه معايير الإرساء (Options). هنا إنت مش بس بتشغل الهارد، إنت "بتفصله" على مقاسك:
- صلاحيات كاملة: بنفعل القراءة والكتابة (
rw) مع إدارة ذكية للوقت (relatime) عشان الجهاز ميفضلش "يهري" في الهارد بكتابة بيانات ملهاش لزمة، وده طبعاً بيحافظ على عمره. - تكنولوجيا الضغط (Zstd): هنا بقى الذكاء؛ بنقول للنظام "اضغط الملفات وأنت بتخزنها" (
compress=zstd:3)؛ وده بيوفر لك مساحة كبيرة وبيخلي سرعة القراءة "طيارة". - دلع الـ SSD: لو عندك هارد SSD، الخيارات دي (
ssdوdiscard=async) بتشتغل كأنها "فريق صيانة" في الخلفية، بتنظف الهارد أول بأول وبتحسن طريقة توزيع البيانات عشان يفضل سريع زي أول يوم. - سرعة الوصول: وبإضافة (
space_cache=v2) بنخلي النظام "لماح"، بيعرف الأماكن الفاضية في الهارد فوراً من غير ما يضيع وقت في التدوير. - التقسيم الذكي: وأخيراً، المعيار (
subvol=/@) ده هو اللي بيعرف النظام إنه يدخل "أوضة" معينة جوه الهارد هي اللي تكون واجهة النظام الأساسية.
وفي آخر السطر، بنلاقي إعدادات التأمين (Dump & Pass)، وغالباً بنسيبهم "أصفار" (0 0)؛ والرسالة هنا واضحة: "يا نظام إنت بقيت ذكي كفاية إنك تحمي نفسك وتصلح أخطاءك، مش محتاجين الطرق القديمة والبطيئة في الفحص".
السطر الثاني:
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 /home btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@home 0 0
/home والمجلد الفرعي لـ subvol=/@home لفصل ملفات المستخدمين.السطر الثالث:
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 /var btrfs rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@var 0 0
/var لفصل السجلات والبيانات المتغيرة عن لقطات النظام.السطر الرابع (EFI):
UUID=A004-9F0A /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
vfat لأنه المتوافق مع UEFI، ونضع خيارات mask لضبط الصلاحيات.السطر الأخير (NTFS):
UUID=01DC93E1699B43A0 /mnt/data ntfs-3g defaults,uid=1000,gid=1000,windows_names,locale=en_US.utf8 0 0
ntfs-3g ونحدد uid=1000 لضمان أن المستخدم الحالي يمتلك صلاحية التعديل على الملفات القادمة من ويندوز.ماذا لو كان الـ volume بنظام ext4؟
UUID=fdd2e0dc-2814-4202-8fc4-f7d237d4de59 / ext4 defaults 0 0
الأمر أبسط بكثير، نستخدم
defaults فقط، ولكن نفقد مزايا الـ Snapshots المنفصلة.مثال آخر: قرص بيانات بنظام Btrfs بسيط
UUID=01DC93E1699B43A0 /mnt/data btrfs defaults 0 0
defaults,nofail لمنع توقف النظام إذا لم يكن القرص موصولاً.كيفية التعديل والاختبار (هام جدًا):
لتعديل الملف استخدم:
sudo nano /etc/fstab
sudo mount -a
النهاية:
sudo mount -a قبل ما تعمل Restart؛ لأن الغلطة هنا ممكن تخلي النظام ميرضاش يفتح، وإحنا طبعاً مش عايزين ندخل في دوامة إصلاح الـ Booting.