ربط القرص في Linux: lsblk والتقسيم وmkfs وmount وfstab
ربط القرص في Linux يعني توصيل نظام ملفات القسم بمجلد من شجرة النظام، مثل /data. يُعثر على القرص الجديد بالأمر lsblk، ويُقسَّم بـfdisk أو parted، ويُهيَّأ بـmkfs.ext4، ويُركَّب بـmount /dev/sdb1 /data، ولكي يبقى مربوطاً بعد إعادة التشغيل تُضاف سطر بمعرّف UUID الخاص به إلى /etc/fstab، ويُتحقق منه بالأمر mount -a.
لا توجد في Linux أحرف للأقراص: كل أجهزة التخزين تُدمج في شجرة واحدة من المجلدات تبدأ من /. وربط القرص في Linux هو عملية «تعليق» نظام ملفات القسم على مجلد فارغ هو نقطة الربط. والمسار دائماً واحد: تحديد الجهاز (lsblk)، ثم التقسيم (fdisk أو parted)، ثم إنشاء نظام الملفات (mkfs)، ثم الربط (mount)، وأخيراً التثبيت في /etc/fstab. وسنشرح كل خطوة، ونوضح كيف تعرف أين ذهبت المساحة باستخدام df وdu.
كيف تُنظَّم الأقراص والأقسام في Linux
تمثّل النواة كل قرص بملف جهاز في /dev. وتختلف الأسماء حسب نوع التوصيل:
| الاسم | ما هو | الأقسام |
|---|---|---|
/dev/sda، /dev/sdb | أقراص SATA وSAS وUSB، وكثير من الأقراص الافتراضية | /dev/sda1، /dev/sda2 |
/dev/vda | أقراص virtio في الأجهزة الافتراضية KVM | /dev/vda1 |
/dev/nvme0n1 | أقراص NVMe SSD | /dev/nvme0n1p1 |
/dev/mapper/... | وحدات LVM المنطقية، والأقراص المشفّرة | — |
يُقسَّم القرص إلى أقسام، وينشأ على القسم نظام ملفات (ext4 أو xfs أو btrfs)، ثم يُربط نظام الملفات بمجلد. وما دام القسم غير مربوط فلا يمكن الوصول إلى ملفاته، حتى لو كان القرص متصلاً مادياً.
كيف ترى الأقراص: lsblk وblkid
أول أمر عند التعامل مع الأقراص هو lsblk. يعرض شجرة الأجهزة والأحجام ونقاط الربط:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part /
sdb 8:16 0 100G 0 disk
هنا يظهر أن sdb قرص جديد بحجم 100 غيغابايت، دون أقسام ودون نقطة ربط. وخيارات مفيدة أخرى:
lsblk -f— نوع نظام الملفات والتسمية وUUID لكل قسم.lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL— الأعمدة المطلوبة فقط.sudo blkid— UUID ونوع نظام الملفات لكل الأقسام.sudo fdisk -l— جداول الأقسام لكل الأقراص مع القطاعات.
إذا أضفت القرص إلى جهاز افتراضي «أثناء التشغيل» ولم يظهر في lsblk، فاطلب من النواة إعادة فحص الناقل: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan.
تقسيم القرص: fdisk وparted
قبل التقسيم تأكد مرة أخرى من أنك اخترت الجهاز الصحيح: كتابة جدول الأقسام على القرص النظامي تمحو بياناته. اعتمد على الحجم وغياب نقاط الربط في مخرجات lsblk.
GPT أم MBR
للأقراص الجديدة استخدم GPT: فهي تدعم الأقراص الأكبر من 2 تيرابايت وحتى 128 قسماً. أما MBR (dos) فلا تُستخدم إلا مع الأنظمة القديمة التي تعتمد على تحميل BIOS، إذا كان المحمّل يتطلب ذلك.
التقسيم بـfdisk
يدعم fdisk الحديث كلاً من GPT وMBR. والعمل يتم في وضع تفاعلي:
$ sudo fdisk /dev/sdb
Command (m for help): g # إنشاء جدول GPT فارغ
Command (m for help): n # قسم جديد
Partition number (1-128, default 1): Enter
First sector: Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Enter # القرص كله
Command (m for help): w # كتابة التغييرات والخروج
ما لم تضغط w لا يُكتب شيء على القرص، لذلك يتيح لك q الخروج دون أي تغيير.
التقسيم بـparted في سطر واحد
في السكريبتات يكون parted أنسب، لأنه يعمل دون حوار:
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
تعطي الحدود بالنسب المئوية محاذاةً صحيحة للقسم. وإذا لم يظهر القسم الجديد، فنفّذ sudo partprobe /dev/sdb لتقرأ النواة جدول الأقسام من جديد.
إنشاء نظام الملفات: mkfs
القسم مجرد نطاق من الكتل. ولكي تُخزَّن فيه الملفات يجب إنشاء نظام ملفات عليه:
$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done
يحدد الخيار -L التسمية التي تسهّل التعرف على القسم لاحقاً. وهذا اختيار نظام الملفات:
| النظام | الأمر | متى يناسب |
|---|---|---|
| ext4 | mkfs.ext4 | الخيار العام الافتراضي، ويمكن تصغيره |
| XFS | mkfs.xfs | الملفات والأحجام الكبيرة، وهو المعيار في RHEL؛ يكبر فقط |
| Btrfs | mkfs.btrfs | اللقطات والضغط والأقسام الفرعية |
| vfat/exFAT | mkfs.vfat، mkfs.exfat | أقراص USB للتبادل مع Windows وmacOS |
mkfs يمسح كل ما كان على القسم. ولا يطلب الأمر تأكيداً للقسم الفارغ، لذلك تحقق من اسم الجهاز مرة أخرى.
كيف تربط القرص في Linux بالأمر mount
أنشئ مجلداً — نقطة الربط — ثم اربط القسم به:
$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 98G 24K 93G 1% /data
يحدد mount نوع نظام الملفات تلقائياً، لكن يمكن تحديده صراحةً بـmount -t xfs. وإذا كانت هناك ملفات في المجلد /data قبل الربط، فلا تُحذف بعده، بل تُخفى تحت نظام الملفات الجديد، وتعود عند فصله.
خيارات الربط
تُمرَّر الخيارات عبر -o مفصولة بفواصل:
ro/rw— قراءة فقط أو قراءة وكتابة.noatime— عدم تحديث وقت الوصول عند كل قراءة، فيقل عدد الكتابات الزائدة.noexec— منع تشغيل البرامج من هذا القسم (مفيد لـ/tmpومجلدات التنزيلات).nosuid،nodev— تجاهل بتات SUID وملفات الأجهزة.remount— تغيير الخيارات دون فصل:sudo mount -o remount,ro /data.
لمعرفة ما هو مربوط وبأي خيارات، يفيد الأمر findmnt: findmnt /data أو findmnt -t ext4.
صلاحيات القرص المربوط
جذر ext4 الجديد يملكه root، لذلك لن يستطيع المستخدم العادي الكتابة فيه. امنح المجلد للمستخدم المناسب بعد الربط: sudo chown alice:alice /data. أما في vfat وexFAT فلا توجد صلاحيات Unix، ويُحدَّد المالك بالخيارات uid= وgid= وumask= عند الربط.
كيف تفصل القرص: umount وخطأ target is busy
الفصل يتم بالأمر umount (بدون حرف n) مع الجهاز أو المجلد:
$ sudo umount /data
umount: /data: target is busy.
يعني الخطأ أن عملية ما تمسك ملفات على نظام الملفات هذا، أو تقف فيه بمجلد عملها الحالي، وغالباً تكون طرفيتك نفسها بعد cd /data. ويساعد في معرفة المتسبب:
$ sudo lsof +f -- /data
$ sudo fuser -vm /data
أوقف العملية أو اخرج من المجلد وأعد المحاولة. والحل الأخير هو umount -l (lazy): يُفصل نظام الملفات من الشجرة فوراً، ويتحرر فعلياً حين تغلق العمليات ملفاتها.
الربط التلقائي عند الإقلاع: /etc/fstab
الأمر mount يعمل حتى إعادة التشغيل فقط. ولكي يُربط القرص تلقائياً أضف سطراً إلى /etc/fstab. واذكر القسم بمعرّف UUID لا باسم /dev/sdb1: فالأسماء قد تتبادل مواقعها عند إضافة الأقراص، أما UUID فثابت.
$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."
يتكون السطر من ستة حقول:
# <الجهاز> <نقطة الربط> <النوع> <الخيارات> <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77 /data ext4 defaults,noatime 0 2
| الحقل | المعنى |
|---|---|
| الجهاز | UUID=... أو LABEL=... أو مسار |
| نقطة الربط | المجلد الذي يُربط عليه (يجب أن يكون موجوداً) |
| النوع | ext4 أو xfs أو swap أو nfs وغيرها |
| الخيارات | defaults مع ما يلزم، مثل noatime أو nofail |
| dump | 0 في الغالب |
| fsck | ترتيب الفحص: 1 للجذر، و2 للباقي، و0 لعدم الفحص |
تحقّق من fstab قبل إعادة التشغيل
الخطأ في /etc/fstab قد يترك الخادم في وضع الطوارئ عند الإقلاع، وهذا مزعج جداً على خادم سحابي بلا وحدة تحكم. فور التعديل نفّذ:
$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data
يركّب mount -a كل ما في fstab ولم يُربط بعد، ويعرض الخطأ مباشرةً. وللأقراص القابلة للنزع والشبكية أضف الخيار nofail: إذا لم يوجد الجهاز تستمر عملية الإقلاع دونه. وفي systemd يتحول كل سطر في fstab إلى وحدة .mount، مثلاً data.mount، ويمكن رؤية حالتها بـsystemctl status data.mount.
معرفة المساحة الفارغة: df
يعرض df مدى امتلاء أنظمة الملفات المربوطة:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 39G 37G 1.1G 98% /
/dev/sda1 974M 180M 727M 20% /boot
/dev/sdb1 98G 24K 93G 1% /data
-h— الأحجام بوحدات مقروءة.-T— إضافة عمود نوع نظام الملفات.-i— عرض الـinodes: قد ينفد القرص وفي الغيغابايتات مساحة متبقية، إذا أُنشئت ملفات صغيرة كثيرة جداً.-x tmpfs -x devtmpfs— إخفاء أنظمة الملفات الافتراضية.
لماذا لا يساوي Size المجموع Used + Avail: يحجز ext4 نحو 5% من المساحة للجذر، حتى يستطيع النظام العمل حين يمتلئ القرص. وفي قسم البيانات يمكن تقليل هذا الاحتياطي: sudo tune2fs -m 1 /dev/sdb1.
أين ذهبت المساحة: du
يخبرك df بأن القرص ممتلئ لكنه لا يخبرك بما يشغله. لهذا يوجد du، الذي يجمع أحجام الملفات داخل المجلدات:
$ sudo du -sh /var/log
4.2G /var/log
$ sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head
37G /
21G /var
9.8G /home
3.1G /usr
-s— المجموع فقط للمجلد، و-a— كل ملف على حدة.--max-depth=1(أو-d 1) — مستوى واحد من التداخل؛ انزل أعمق داخل أكبر مجلد.-x— عدم الانتقال إلى أنظمة ملفات أخرى، وإلا فستدخل في المجموع/dataو/procوالأقراص الشبكية.sort -rh— ترتيب حسب الأحجام المقروءة، والأكبر في الأعلى.
لإيجاد ملفات كبيرة بعينها يكون find أنسب: sudo find / -xdev -type f -size +1G -exec ls -lh {} +.
df يُظهر القرص ممتلئاً وdu لا يُظهر ذلك
حالة كلاسيكية: حذفت سجلاً ضخماً فلم تتحرر المساحة. الملف حُذف من المجلد، لكن عملية (مثل خادم الويب) ما زالت تمسكه مفتوحاً، فلا تتحرر الكتل. ابحث عن هذه الملفات:
$ sudo lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
nginx 812 www 5w REG 8,2 8589934592 0 13054 /var/log/nginx/access.log (deleted)
أعد تشغيل العملية أو اطلب منها إعادة فتح السجلات، فتعود المساحة. وفي المستقبل امسح السجل النشط دون حذفه: sudo truncate -s 0 /var/log/nginx/access.log. والسبب الثاني للفارق هو ملفات مخفية تحت نقطة ربط: تشغل مساحة على القرص الجذري، لكن du لا يراها ما دام نظام ملفات مربوطاً فوقها.
الأخطاء الشائعة وطرق معالجتها
| الرسالة | السبب | الحل |
|---|---|---|
mount point /data does not exist | المجلد غير موجود | sudo mkdir -p /data |
wrong fs type, bad option, bad superblock | لا يوجد نظام ملفات على القسم، أو النوع خاطئ، أو المشغّل غير مثبت | تحقق بـlsblk -f؛ ولـexFAT/NTFS ثبّت الحزم exfatprogs وntfs-3g |
only root can do that | الربط دون sudo | شغّل عبر sudo أو أضف الخيار user في fstab |
target is busy | المجلد مشغول بعملية | lsof أو fuser، واخرج من المجلد |
| الإقلاع في emergency mode | خطأ في fstab أو القرص غير موجود | ادخل كـroot، وأصلح fstab، وأضف nofail |
سيناريو خطوة بخطوة: قرص جديد للبيانات
lsblk— ابحث عن القرص الجديد، مثلاً/dev/sdb.sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%— قسّمه.sudo mkfs.ext4 -L data /dev/sdb1— أنشئ نظام الملفات.sudo mkdir -p /data— أنشئ نقطة الربط.sudo blkid /dev/sdb1— اعرف UUID وأضف سطراً إلى/etc/fstab.sudo mount -a && df -h /data— اربط وتحقق.sudo chown المستخدم: /data— امنح الصلاحيات.
إذا كنت ستحتاج إلى توسيع المساحة دون إيقاف الخدمة، أو دمج عدة أقراص، فبدلاً من القسم العادي استخدم LVM: يصبح القرص وحدة مادية تُقطَّع منها وحدات منطقية تكبر بالأمر lvextend -r.
الخلاصة
ربط القرص في Linux هو سلسلة: lsblk ثم التقسيم ثم mkfs ثم mount ثم /etc/fstab. حدّد الأقسام بـUUID، وتحقق من fstab بالأمر mount -a قبل إعادة التشغيل، واستخدم nofail للأقراص غير الإلزامية. وعندما تنفد المساحة يُظهر df -h القسم الممتلئ، ويكشف du -xh --max-depth=1 | sort -rh وlsof +L1 ما الذي يشغله. وقد جرى شرح الأقراص والأقسام وSWAP وLVM وRAID عملياً في درس Linux.
الأسئلة الشائعة
كيف أربط فلاشة في Linux؟
اعثر عليها بـlsblk (غالباً /dev/sdb1)، وأنشئ مجلداً ونفّذ sudo mount /dev/sdb1 /mnt/usb. وفي واجهات الرسوميات تُربط الفلاشات تلقائياً في /media/اسم_المستخدم أو /run/media.
كيف أربط صورة ISO؟
بالأمر sudo mount -o loop,ro image.iso /mnt/iso: يربط الخيار loop الملف كجهاز كتلي. ويُفصل الصورة بالأمر umount العادي.
كيف أربط مجلداً شبكياً عبر fstab؟
في NFS يكون السطر server:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0، وفي SMB هو //server/share /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0. والخيار _netdev ينتظر تشغيل الشبكة.
ما الفرق بين UUID وPARTUUID؟
UUID يخص نظام الملفات ويتغير عند إعادة mkfs، أما PARTUUID فيخص القسم في جدول GPT ويبقى عند إعادة التهيئة. ويُستخدم عادةً UUID في fstab.
كيف أفحص نظام الملفات بحثاً عن الأخطاء؟
افصل القسم ثم شغّل sudo fsck -f /dev/sdb1 لـext4، أو sudo xfs_repair /dev/sdb1 لـXFS. ولا يجوز فحص نظام ملفات مربوط للكتابة، لأن ذلك قد يُتلف البيانات.
يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Linux: с нуля до уверенного администрирования».
الانتقال إلى الدورة