العمق في LVM: التوسع الديناميكي، اللقطات (Snapshots)، والترحيل


يا هلا بالجميع! اليوم راح ندخل في عمق LVM، ونتعلم كيف نستفيد منه صح في بيئات الإنتاج. LVM مو بس يجمع لك الأقراص، لا، هو يفتح لك أبواب للتوسع السريع، النسخ الاحتياطية الفورية (اللقطات)، وحتى نقل البيانات بدون توقف. يلا نبلش.

التوسع الديناميكي: كبر مساحتك وأنت مرتاح

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

إضافة قرص جديد إلى مجموعة الأقراص (VG)

أول شي، لازم تحضر القرص الجديد أو البارتيشن اللي تبغى تضيفه كـ Physical Volume (PV):

pvcreate /dev/sdb1

بعدين تضيفه لمجموعة الأقراص (Volume Group) اللي تبغاها، مثلاً myvg:

vgextend myvg /dev/sdb1

ملاحظة: تأكد إنك استخدمت fdisk أو parted لإنشاء بارتيشن على القرص الجديد وتغيير نوعه إلى LVM (Type 8e) قبل ما تسوي pvcreate.

توسيع وحدة تخزين منطقية (LV)

الحين صار عندك مساحة إضافية في الـ VG. تقدر توسع أي Logical Volume (LV) موجود فيها. مثلاً، إذا عندك LV اسمه mylv في الـ VG اللي اسمها myvg وتبغى تزودها بـ 10 غيغابايت:

lvextend -L +10G /dev/myvg/mylv

أو ممكن تخليها تستخدم كل المساحة الفاضية الجديدة:

lvextend -l +100%FREE /dev/myvg/mylv

توسيع نظام الملفات (Filesystem)

بعد ما توسع الـ LV، لازم توسع نظام الملفات اللي عليه عشان يستفيد من المساحة الجديدة. إذا كان ext4:

resize2fs /dev/myvg/mylv

وإذا كان xfs (تتطلب LV تكون mounted):

xfs_growfs /mount/point/of/mylv

اللقطات (Snapshots): حماية بياناتك بضغطة زر

اللقطات في LVM تسمح لك تاخذ "صورة" لحظية للـ LV بدون ما توقف التطبيقات. هذي ميزة رهيبة للنسخ الاحتياطي أو لتجربة تغييرات معينة مع إمكانية الرجوع.

إنشاء لقطة (Snapshot)

عشان تسوي لقطة، تحتاج تحدد الـ LV الأصلية وحجم للقطة (هذا الحجم هو للمساحة اللي راح تتغير في الأصلية بعد اللقطة). مثلاً، لقطة بحجم 5 غيغابايت للـ LV اللي اسمها mylv، واسم اللقطة mylv_snap:

lvcreate --size 5G --snapshot --name mylv_snap /dev/myvg/mylv

ملاحظة: حجم اللقطة لازم يكون كافي لاستيعاب التغييرات اللي راح تصير على الـ LV الأصلية بعد أخذ اللقطة. لو امتلت اللقطة، راح تتعطل الـ LV الأصلية.

الوصول إلى اللقطة

اللقطة تشتغل كأنها LV عادية، تقدر تسويلها Mount وتقرا منها البيانات اللي كانت موجودة وقت أخذ اللقطة:

mkdir /mnt/mylv_snap
mount /dev/myvg/mylv_snap /mnt/mylv_snap

الاستعادة من لقطة

إذا صار شي غلط وبغيت ترجع لحالة اللقطة، تقدر تسوي lvconvert --merge. لازم تكون الـ LV الأصلية غير mounted عشان العملية تتم:

umount /dev/myvg/mylv
lvconvert --merge /dev/myvg/mylv_snap

بعد ما تخلص عملية الدمج، اللقطة راح تختفي والـ LV الأصلية راح ترجع لحالتها وقت أخذ اللقطة.

حذف لقطة

إذا ما عاد تحتاج اللقطة، احذفها بـ lvremove:

lvremove /dev/myvg/mylv_snap

الترحيل (Migration): انقل بياناتك بدون توقف

ميزة الترحيل في LVM تسمح لك تنقل البيانات من Physical Volume (PV) إلى PV آخر داخل نفس Volume Group (VG) بدون ما توقف الخدمة. هذي مفيدة لو عندك قرص قديم وتبغى تستبدله بقرص جديد وأسرع.

ترحيل Logical Volume (LV)

أول شي، تأكد إن عندك PV جديد ومضاف للـ VG، زي ما سوينا في قسم التوسع. بعدين، تشوف وين الـ LV حقك موجود حالياً:

lvdisplay -m /dev/myvg/mylv

الآن، عشان تنقل الـ LV اللي اسمها mylv من الـ PV القديم (/dev/sdb1) إلى الـ PV الجديد (/dev/sdc1)، استخدم pvmove:

pvmove /dev/sdb1 /dev/sdc1

هذا الأمر راح ينقل كل الـ Extents من /dev/sdb1 إلى /dev/sdc1. لو تبغى تنقل LV معين، تحدد الـ LV:

pvmove -n mylv /dev/sdb1 /dev/sdc1

ملاحظة: عملية pvmove ممكن تاخذ وقت طويل حسب حجم البيانات وسرعة الأقراص. تقدر تتابع تقدمها باستخدام pvmove -i 10 (يحدث كل 10 ثواني).

إزالة قرص قديم بعد الترحيل

بعد ما تتأكد إن كل البيانات اللي تبغاها انتقلت من الـ PV القديم، تقدر تشيله من الـ VG:

vgreduce myvg /dev/sdb1

وبعدين تشيله كـ PV:

pvremove /dev/sdb1

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