لنفرض أنك قمت بزيادة حجم قرص السيرفر من 40 إلى 80 غيغابايت في Proxmox أو من لوحة مزود الخادم الافتراضي VPS، ثم دخلت إلى السيرفر ونفذت الأمر df -h / لترى المساحة الجديدة، فسوف تجد أن الحجم القديم ما زال كما هو وكأنك لم تفعل شيئاً، والسبب أن المساحة الجديدة أصبحت موجودة فعلاً على القرص، ولكن الطبقات التي تقع فوقه داخل النظام لا تعرف عنها شيئاً حتى الآن، وبالتالي عليك أن توصلها إليها بنفسك طبقة بعد طبقة.
وهذه الحالة تتكرر كثيراً مع Ubuntu Server، حيث يستخدم التثبيت الموجه Guided Install فيه LVM بشكل افتراضي، وكثيراً ما يترك المجلد المنطقي Logical Volume الخاص بالنظام أصغر من القرص نفسه، لذلك سوف نوصل في هذا الدليل المساحة الجديدة إلى نظام الملفات Filesystem على Ubuntu 24.04 LTS والسيرفر يعمل، دون إعادة تشغيل ودون أن تفقد أي بيانات.
وسوف نناقش في هذا المقال ما يلي:
- لماذا لا يظهر الحجم الجديد، وما هي الطبقات التي تقع بين القرص ونظام الملفات.
- كيف تتعرف على أسماء الأجهزة في سيرفرك قبل أن تنفذ أي أمر، حتى لا تعمل على القرص الخطأ.
- توسيع القسم Partition بالأمر
growpart، ثم المجلد الفعلي Physical Volume بالأمرpvresize، ثم المجلد المنطقي ونظام الملفات بالأمرlvextend. - الحالة الأسهل التي تكون فيها المساحة موجودة أصلاً داخل المجموعة Volume Group، والتحقق من النجاح، وأشهر المشكلات وحلولها، وما تفعله إذا لم يكن نظامك مبنياً على LVM.
المتطلبات
- سيرفر أو جهاز افتراضي VM يعمل بنظام Ubuntu Server 24.04 LTS، وقرص النظام فيه مبني على LVM، ونفس الخطوات تصلح مع 22.04 ومع أغلب توزيعات Linux.
- مستخدم يملك صلاحية
sudo، وجلسة SSH أو طرفية مباشرة إلى السيرفر. - أن تكون قد قمت بزيادة حجم القرص فعلاً من منصة الافتراضية Hypervisor أو من لوحة المزود، ففي Proxmox تفعل ذلك من Hardware ثم Disk Action ثم Resize أو بالأمر
qm resize، وإذا لم تنشئ الجهاز بعد فراجع دليل إنشاء أول VM في Proxmox بعنوان IP ثابت.
لماذا لا يظهر الحجم الجديد؟
بين القرص ونظام الملفات عدة طبقات، ولكل طبقة منها حجمها الخاص الذي لا يتغير إلا إذا غيرته أنت، وعندما تزيد حجم القرص من الخارج فأنت تغير الطبقة الأولى فقط، والجدول التالي يبين هذه الطبقات والأداة التي توسع كل واحدة منها:
| الطبقة | مثال | أداة التوسيع |
|---|---|---|
| القرص (Disk) | /dev/sda | Proxmox أو لوحة المزود |
| القسم (Partition) | /dev/sda3 | growpart |
| المجلد الفعلي (Physical Volume) | /dev/sda3 | pvresize |
| المجموعة (Volume Group) | ubuntu-vg | تكبر تلقائياً مع المجلد الفعلي |
| المجلد المنطقي (Logical Volume) | ubuntu-vg/ubuntu-lv | lvextend |
| نظام الملفات | ext4 أو XFS على / | resize2fs أو xfs_growfs |
لذلك سوف نمر على هذه الطبقات بنفس الترتيب من الأسفل إلى الأعلى، والسبب أن كل طبقة لا ترى إلا ما أعطته لها الطبقة التي تحتها، فإذا تخطيت طبقة واحدة فلن تصل المساحة إلى أي طبقة فوقها.
قبل أن تبدأ
خذ Snapshot أو نسخة احتياطية
توسيع الأقسام عملية مألوفة وآمنة إذا نفذتها على الجهاز الصحيح، ولكن خطوة growpart تعيد كتابة جدول الأقسام Partition Table، وخطأ واحد في اسم القرص قد يكلفك النظام كله، لذلك خذ Snapshot للجهاز من Proxmox أو من لوحة المزود، أو نسخة احتياطية Backup حديثة، قبل أن تنفذ أي أمر في هذا الدليل، والسبب أن الرجوع من Snapshot يأخذ دقائق، أما إصلاح جدول أقسام تالف فقد يأخذ يومك كله إن نجح أصلاً.
تعرف على أسماء الأجهزة في سيرفرك
لا تفترض أن القسم هو sda3 وأن المجلد المنطقي هو ubuntu-vg/ubuntu-lv لمجرد أنها الأسماء التي تراها في الأمثلة، والسبب أن الأسماء تختلف بحسب نوع القرص، فهي /dev/sda لأقراص SCSI وSATA، و/dev/vda لأقراص VirtIO الشائعة عند المزودين، و/dev/nvme0n1 لأقراص NVMe، ولاحظ أن الحرف p يسبق رقم القسم في NVMe، فيصبح القسم الثالث /dev/nvme0n1p3. ابدأ بالأمر lsblk كما يلي:
df -hT /
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTSوالمخرج سوف يكون كما يلي:
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 19G 15G 3.1G 83% /
NAME SIZE TYPE FSTYPE MOUNTPOINTS
sda 80G disk
├─sda1 1M part
├─sda2 2G part ext4 /boot
└─sda3 38G part LVM2_member
└─ubuntu--vg-ubuntu--lv 19G lvm ext4 /في المخرج أعلاه لاحظ التالي:
- القرص
sdaأصبح 80G، ولكن القسمsda3ما زال 38G، والمجلد المنطقي الذي يحمل/حجمه 19G فقط. - العمود
FSTYPEيخبرك بنوع نظام الملفات، سواءً كانext4أوxfs، وهو الذي يحدد الأداة التي سوف تستخدمها لاحقاً. - القسم الذي سوف توسعه هو القسم الذي تجد في عموده
FSTYPEالقيمةLVM2_memberوتحته مباشرة جهاز من نوعlvm، وليس بالضرورة آخر رقم في القائمة.
إذن عليك أن تأخذ من هذا المخرج ثلاثة أشياء وتكتبها أمامك: اسم القرص، ورقم القسم الذي يحمل LVM، ونوع نظام الملفات. بعد ذلك اعرض طبقات LVM بالأوامر pvs وvgs وlvs:
sudo pvs
sudo vgs
sudo lvs PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <38.00g 19.00g
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <38.00g 19.00g
LV VG Attr LSize
ubuntu-lv ubuntu-vg -wi-ao---- <19.00gالأمر pvs يعرض القسم الذي يعمل كمجلد فعلي والمجموعة التي ينتمي إليها، والأمر vgs يعرض في العمود VFree المساحة الحرة Free Space غير المخصصة داخل المجموعة، أما lvs فيعرض اسم المجلد المنطقي وحجمه. وفي هذا المثال سوف تجد أن هناك 19G حرة أصلاً داخل المجموعة، وهذا ما يتركه التثبيت الموجه في Ubuntu عادة كما سيأتي، وفوقها نحو 40G جديدة على القرص لم يصل إليها القسم بعد.
/dev/<VG>/<LV>، أي /dev/ubuntu-vg/ubuntu-lv في هذا المثال، ويشير إليه أيضاً المسار /dev/mapper/ubuntu--vg-ubuntu--lv الذي يظهر في df، والسبب في الشرطة المزدوجة أن Device Mapper يضاعف الشرطة الموجودة داخل الأسماء، وفي النهاية فالمساران يشيران إلى نفس الجهاز.خطوات التوسيع
الأوامر التالية تستخدم أسماء المثال، أي القرص /dev/sda والقسم رقم 3 والمجلد /dev/ubuntu-vg/ubuntu-lv، لذلك ضع مكانها ما ظهر لك أنت في الخطوة السابقة، ولا تنسخ الأوامر كما هي قبل أن تقارن كل اسم فيها بمخرج lsblk على سيرفرك.
تأكد من أن النظام يرى الحجم الجديد للقرص
إذا عرض lsblk الحجم الجديد للقرص فانتقل مباشرة إلى الخطوة التالية، والسبب أن النواة Kernel تلتقط التغيير تلقائياً في أغلب الحالات، ووثائق Proxmox تذكر أن أقراص VirtIO تظهر بحجمها الجديد دون إعادة تشغيل. ولكن إذا بقي الحجم القديم على قرص SCSI أو SATA، فاطلب من النواة أن تعيد فحص القرص كما يلي:
echo 1 | sudo tee /sys/class/block/sda/device/rescan
sudo dmesg | tail -n 5
lsblk /dev/sdaوقد يتساءل البعض: لماذا نستخدم tee هنا بدلاً من الصيغة الأقصر sudo echo 1 > …؟ والإجابة أن هذه الصيغة تفشل، لأن ال Shell هو الذي ينفذ إعادة التوجيه بصلاحيات المستخدم العادي وليس بصلاحيات sudo، أما tee فيعمل هو نفسه بصلاحيات sudo ويكتب في الملف. بعد التنفيذ يجب أن ترى في dmesg سطراً من نوع detected capacity change، وإذا لم يتغير الحجم رغم ذلك فأعد تشغيل السيرفر في وقت مناسب.
توسيع القسم بالأمر growpart
الأداة growpart جزء من الحزمة cloud-guest-utils، وسوف تجدها مثبتة غالباً على الصور السحابية Cloud Images، ووظيفتها أن تمد القسم حتى نهاية القرص أو حتى بداية القسم الذي يليه، ولاحظ أنها تزيد حجم القسم فقط ولا تستطيع أن تنقصه. ابدأ بتشغيلها مع الخيار --dry-run حتى ترى ما سوف تفعله دون أن تكتب شيئاً على القرص:
sudo apt update
sudo apt install -y cloud-guest-utils
sudo growpart --dry-run /dev/sda 3لاحظ أن growpart يأخذ القرص ورقم القسم منفصلين بمسافة: /dev/sda 3، ومع NVMe /dev/nvme0n1 3. والمخرج يبدأ بسطر CHANGE ثم يعرض جدول الأقسام قبل التغيير وبعده، فتأكد من أن رقم البداية start للقسم لم يتغير وأن الحجم الجديد فقط هو الذي كبر، ولأن الخيار --dry-run لا يكتب أي شيء على القرص، فهذه هي اللحظة المناسبة لاكتشاف أي خطأ في اسم القرص أو رقم القسم. وإذا بدا المخرج صحيحاً فنفذ التوسيع ثم تحقق:
sudo growpart /dev/sda 3
lsblk /dev/sdaوالمخرج سوف يكون كما يلي:
CHANGED: partition=3 start=4198400 old: size=79691776 end=83890175 new: size=163573727 end=167772126توسيع المجلد الفعلي بالأمر pvresize
الآن كبر القسم، ولكن LVM ما زال يرى المجلد الفعلي بحجمه القديم، وهنا يأتي دور الأمر pvresize الذي يقرأ الحجم الجديد للقسم ويضيف الفرق إلى المجموعة، ويعمل والمجلدات المنطقية نشطة والنظام يعمل عليها:
sudo pvresize /dev/sda3
sudo vgsوالمخرج سوف يكون كما يلي:
Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <78.00g <59.00gتوسيع المجلد المنطقي ونظام الملفات
أصبحت المساحة كلها حرة داخل المجموعة، وبقي أن تعطيها للمجلد المنطقي بالأمر lvextend، حيث يضيف الخيار -l +100%FREE كل المساحة الحرة في المجموعة، ويوسع الخيار -r (أو --resizefs) نظام الملفات في نفس الخطوة عبر الأداة fsadm، وهو يعمل مع ext4 وXFS، وبالتالي لا تحتاج لتذكر أداة كل نظام ملفات:
sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lvوإذا أردت أن تبقي جزءاً من المساحة لمجلد منطقي آخر أو لـ Snapshot من LVM، فحدد مقدار الزيادة بدلاً من ذلك، مثل -L +20G.
توسيع نظام الملفات يدوياً
إذا وسعت المجلد المنطقي دون الخيار -r، فسوف يبقى نظام الملفات بحجمه القديم حتى توسعه بأداته، وتستطيع أن تفعل ذلك ونظام الملفات مركب Mounted والسيرفر يعمل، حيث توسع الأداة resize2fs نظام ext4 وهو مركب، أما الأداة xfs_growfs فلا توسع XFS أصلاً إلا وهو مركب.
مع ext4 مرر مسار المجلد المنطقي:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lvومع XFS مرر نقطة التركيب Mount Point كما في صفحة الدليل الرسمية للأداة:
sudo xfs_growfs /resize2fs على نظام XFS، ولا xfs_growfs على ext4، وتحقق من النوع في العمود FSTYPE أو بالأمر df -hT / قبل التنفيذ. وتذكر أن التوسيع هنا في اتجاه واحد عملياً، والسبب أن XFS لا يدعم التصغير Shrink إلا في حدود ضيقة جداً في إصداراته الحديثة، وتصغير ext4 يتطلب فك تركيبه، لذلك لا تضف إلى المجلد المنطقي أكثر مما تحتاج إذا كنت تخطط لاستخدام المساحة في شيء آخر.إذا كانت المساحة الحرة موجودة في المجموعة أصلاً
لا تحتاج دائماً إلى المرور بكل الطبقات، فإذا لم تقم بزيادة حجم القرص ولكن sudo vgs يعرض مساحة في العمود VFree، فهذه حالة التثبيت الموجه الذي ترك جزءاً من المجموعة غير مخصص، ويكفيك أمر واحد:
sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lvولكن لماذا يترك Ubuntu هذه المساحة دون استخدام أصلاً؟ والإجابة أن المثبت يعمل افتراضياً بسياسة الحجم sizing-policy: scaled، والتي تعطي المجلد المنطقي للنظام نصف المجموعة فقط إذا كان حجمها بين 20 و200 GiB، و100 GiB فقط إذا زادت على ذلك، والهدف أن تبقى مساحة لل Snapshots ولأي توسعة لاحقة، لذلك افحص هذا أولاً على أي سيرفر جديد مثبت بـ Ubuntu Server، فقد تجد نصف القرص غير مستخدم دون أن تحتاج إلى تكبير شيء، ثم قرر بنفسك هل تعطيه كله للنظام أم تبقي جزءاً منه بالخيار -L.
كيف تتأكد أن المساحة وصلت فعلاً
df -hT /
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo vgsFilesystem Type Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 77G 15G 58G 21% /- يعرض
df -hT /الحجم الجديد، وتكون قيمةSizeقريبة من حجم المجلد المنطقي. - يعرض
lsblkالقسم والمجلد المنطقي بالحجم المتوقع. - تكون قيمة
VFreeصفراً، أو المقدار الذي قررت الاحتفاظ به.
بعد أن تتأكد أن السيرفر وخدماته تعمل بشكل طبيعي، احذف ال Snapshot الذي أخذته من Proxmox أو من لوحة المزود، والسبب أنه إذا بقي مدة طويلة فسوف يستهلك مساحة التخزين، وقد يبطئ القرص على بعض أنواع التخزين.
مشكلات شائعة وحلولها
رسالة NOCHANGE من growpart
الرسالة NOCHANGE: partition 3 is size … it cannot be grown تعني أن الأداة لم تجد أي مساحة بعد القسم، ولها ثلاثة أسباب شائعة: إما أن النظام لم ير الحجم الجديد للقرص بعد (راجع خطوة إعادة الفحص)، أو أن القسم موسع من قبل، أو أن بعده مباشرة قسماً آخر. وهناك رسالة قريبة منها تبدأ أيضاً بـ NOCHANGE وتقول إن القسم could only be grown by عدد صغير من القطاعات، ومعناها أن الزيادة المتاحة أقل من الحد الأدنى الذي تتجاهله الأداة، وهو 1 MiB في الإصدار 0.33 الموجود في Ubuntu 24.04.
القسم ليس الأخير على القرص، أو بعده قسم Swap
الأداة growpart تمد القسم حتى بداية القسم التالي فقط ولا تستطيع تجاوزه، وسوف تجد هذا الترتيب أحياناً في الأنظمة القديمة أو في تثبيت يدوي وضع قسم Swap بعد قسم النظام الرئيسي Root Partition، والحل الأسلم هنا هو العمل والجهاز متوقف Offline كما تشرحها وثائق Proxmox، أي أن تقلع الجهاز من أداة مثل GParted، وتنقل القسم المعترض أو تحذفه وتعيد إنشاءه، ثم توسع القسم المطلوب. وإذا كان القسم المعترض Swap فأوقفه أولاً بالأمر swapoff، وحدث /etc/fstab إذا تغير معرفه UUID، والسبب أن السيرفر سوف ينتظر عند الإقلاع قسماً لم يعد موجوداً بنفس المعرف.
تحذيرات GPT بعد زيادة حجم القرص
يحفظ جدول GPT نسخة احتياطية من ال Header الخاص به (Backup GPT Header) في آخر القرص، وبعد زيادة الحجم تبقى هذه النسخة في موضعها القديم، فترى في fdisk أو parted رسائل مثل GPT PMBR size mismatch أو Not all of the space available … appears to be used، وهذا متوقع ولا يعني أن هناك تلفاً، وgrowpart يصلحه عادة عندما يعيد كتابة الجدول. وإذا بقي التحذير فانقل هذه النسخة إلى آخر القرص بالأمر sgdisk -e:
sudo sgdisk -e /dev/sdaرسالة matches existing size أو Insufficient free space من lvextend
معناها أن المجموعة ليس فيها مساحة حرة، فإما أنك لم تنفذ pvresize بعد توسيع القسم، وإما أن المساحة أضيفت من قبل إلى المجلد المنطقي، وفي الحالة الثانية يكفيك أن توسع نظام الملفات بالأداة المناسبة لنوعه.
الأمر growpart غير موجود
ثبت الحزمة cloud-guest-utils كما في خطوة التوسيع، وإذا لم يكن لديك اتصال بالإنترنت فاستخدم الأمر resizepart داخل parted، وهو نفس الأمر الذي تستخدمه وثائق Proxmox في مثالها.
إذا لم يكن النظام مبنياً على LVM
بعض المزودين يسلمون صوراً لا تستخدم LVM، فيكون / مركباً مباشرة على قسم مثل /dev/vda1، وتعرف ذلك من lsblk عندما لا تجد تحت القسم أي جهاز من نوع lvm، وفي هذه الحالة تسقط طبقتا LVM وتكفيك خطوتان:
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1ومع XFS استبدل الأمر الثاني بـ sudo xfs_growfs /. ويجدر الإشارة هنا إلى أن كثيراً من الصور السحابية تجري هذا التوسيع تلقائياً عند الإقلاع Boot عبر cloud-init، لذلك افحص df -h / بعد إعادة التشغيل قبل أن تبدأ، فقد تجد أن العمل قد تم بالفعل. وإذا كنت ما زلت تبحث عن مزود مناسب، فراجع دليل كيف تختار خادماً افتراضياً VPS.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- زيادة حجم القرص من Proxmox أو من لوحة المزود تغير الطبقة الأولى فقط، وعليك أن توصل المساحة بنفسك إلى القسم ثم المجلد الفعلي ثم المجلد المنطقي ثم نظام الملفات.
- خذ Snapshot قبل أي أمر، وتعرف على اسم القرص ورقم القسم ونوع نظام الملفات من
lsblk، وشغلgrowpartأولاً بالخيار--dry-runقبل التنفيذ. - الأوامر الثلاثة
growpartوpvresizeوlvextend -rتعمل والسيرفر يعمل، ولا تحتاج إلى إعادة تشغيل. - افحص
VFreeعلى كل سيرفر Ubuntu جديد، فالمثبت يترك عمداً جزءاً من المجموعة غير مخصص.
سجل التحديثات
- أكتوبر 2026: كتابة الدليل.
- أكتوبر 2026: مراجعة تقنية للأوامر على lvm2 2.03.16 وcloud-guest-utils 0.33 في Ubuntu 24.04، وتصحيح مخرج
growpartوpvresizeوحد الزيادة الأدنى فيgrowpart، وإضافة سبب المساحة الحرة التي يتركها مثبت Ubuntu.