Logical Volume Manager (LVM) هو نظام لإدارة القرص الصلب يتميز بتعدد وظائفه وبسهولة استخدامه في لينكس أو في أنظمة تشغيل مشابهة. من المعروف أنه يتم إنشاء الأقسام (partition) العادية بأحجام ثابتة، و محاولة القيام بتغيير أحجام هذه الأقسام تعتبر عملية شاقة. من ناحية أخرى، يقوم LVM بإنشاء و إدارة وحدات تخزين " افتراضية " ليس لها تأثير مباشر على الأقراص الصلبة الفعلية، ويوفر للمستخدمين مرونة كافية لتوسيع أو تقليص وحدات التخزين الافتراضية بسهولة, وهذا دون الحاق الضرر بالبيانات المخزنة عليها. كما يمكن للمستخدمين إضافة أقراص صلبة أخرى إلى LMV كيفما يشاؤون، وهذا يساعد في تعزيز وحدات التخزين الافتراضية القائمة, وطالما أن نواة نظام التشغيل (kernel) على بينة من وجود قسم ما، فإن LVM لا يكون في حاجة إلى إعادة التشغيل.
LVM يستخدم هيكل هرمي كما هو موضح في الرسم البياني أدناه.
نجد في الأعلى الأقراص الصلبة (Disk) ثم وحدات التخزين الفعلية (Physical Volume), ويمكن استخدام وحدة تخزين فعلية واحدة أو أكثر لإنشاء مجموعة وحدة تخزين (Volume group), بعد ذلك يتم إنشاء وحدات التخزين الافتراضية (Logical Volume) انطلاقا من مجموعات وحدة التخزين هاته. كلما تكون هناك مساحة متوفر على مجموعة وحدة التخزين، فإنه يمكننا إنشاء وحدات التخزين افتراضية انطلاقا من مجموعة وحدة التخزين. يتم تهيئة وحدات التخزين الافتراضية بنظام ملفات خاص، حتى يسهل تركيبها والوصول إليها عبر نظام التشغيل.
سيناريو اختبار LVM
ستجد في هذا الدرس وصف لكيفية استخدام LVM لإنشاء وإدارة وحدات التخزين على لينكس, وحتى نبسط الأمور قسمنا الدرس على مرحلتين. في المرحلة الأولى، سوف نقوم بإنشاء العديد من وحدات التخزين الافتراضية على قرص فعلي واحد، ثم نقوم بتركيبها في المجلد "/lvm-mount", بعد الانتهاء من ذلك سوف نقوم بتغيير حجم وحدات التخزين التي قمنا بإنشائها. في المرحلة الثانية، سنقوم بإضافة وحدات تخزين افتراضية أخرى, تم إنشاؤها على قرص صلب ثاني, إلى LVM.
إعداد أقسام القرص
يتم إنشاء أقسام القرص باستخدام الأمر fdisk. سوف نقوم بإنشاء ثلاثة أقسام من نوع '8e', لجعلها متوافقة مع LVM, بحجم 1 غيغابايت لكل واحد، وليس من الضروري أن تكون الأقسام متطابقة الحجم.
Command (m for help): n ## new Command action e extended p primary partition (1-4) p ## primary Partition number (1-4): 1 ## partition number First cylinder (1-1044, default 1): ## hit enter Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +1G ## size Command (m for help): t ## change type Selected partition 1 Hex code (type L to list codes): 8e ## code for LVM Changed system type of partition 1 to 8e (Linux LVM)
نكرر نفس الخطوات لإنشاء القسمين المتبقيين, بعد أن يتم إنشاء الأقسام كلها، يجب علينا الحصول على نتيجة مشابهة لهذه:
Device Boot Start End Blocks Id System /dev/sdb1 1 132 1060258+ 8e Linux LVM /dev/sdb2 133 264 1060290 8e Linux LVM /dev/sdb3 265 396 1060290 8e Linux LVM
إعداد وحدات التخزين الفعلية
وتستخدم الأقسام التي تم إنشاؤها حديثا لاستيعاب وحدات التخزين الفعلية. LVM يمكن أن يعمل مع وحدات التخزين الفعلية على اختلاف أحجامها.
# pvcreate /dev/sdb1
# pvcreate /dev/sdb2
# pvcreate /dev/sdb3
يمكن التحقق من وحدات التخزين الفعلية باستخدام الأمر التالي. يحتوي القسم الموالي على جزء من شاشة النتائج. "/dev/sdb2" هي وحدة تخزين فعلية جديدة حجمها 1.01 غيغابايت.
# pvdisplay
--- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 1.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID jszvzz-ENA2-g5Pd-irhV-T9wi-ZfA3-0xo092
يمكن حذف وحدات التخزين الفعلية باستخدام الأمر التالي.
# pvremove /dev/sdb1
إعداد مجموعات وحدة التخزين
الأمر التالي سيمكننا من إنشاء مجموعة وحدة التخزين اسمها 'volume-group', وهذا باستخدام وحدات التخزين الفعلية التالية: /dev/sdb1, /dev/sdb2 و /dev/sdb3.
# vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3
يمكننا التحقق من حجم مجموعة وحدة التخزين باستخدام الأمر التالي.
# vgdisplay
--- Volume group --- VG Name volume-group1 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 3.02 GiB PE Size 4.00 MiB Total PE 774 Alloc PE / Size 0 / 0 Free PE / Size 774 / 3.02 GiB VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK
يمكننا مشاهدة حجم مجموعة وحدة التخزين الإجمالي/المستخدم من خلال شاشة النتائج, كما نلاحظ أن وحدات التخزين الافتراضية تأخذ مساحة من حجم مجموعة وحدة التخزين, كما يبقى بالإمكان إنشاء وحدات التخزين افتراضية طالما هناك مساحة فارغة متاحة في مجموعة وحدة التخزين،.
يمكن حذف مجموعة وحدة التخزين باستخدام الأمر التالي.
# vgremove volume-group1
إنشاء وحدات التخزين الافتراضية
الأمر التالي يسمح بإنشاء وحدة تخزين افتراضية اسمها 'LV1' بحجم 100 ميجابايت. قمنا باستخدام أقسام صغيرة الحجم لتقليل وقت المعالجة. ستأخذ وحدة تخزين افتراضية جزء من حجم مجموعة وحدة التخزين المحددة سابقا.
# lvcreate -L 100M -n lv1 volume-group1
يمكن التحقق من وحدات التخزين الافتراضية باستخدام الأمر lvdisplay.
# lvdisplay
--- Logical volume --- LV Name /dev/volume-group1/lv1 VG Name volume-group1 LV UUID YNQ1aa-QVt1-hEj6-ArJX-I1Q4-y1h1-OFEtlW LV Write Access read/write LV Status available # open 0 LV Size 100.00 MiB Current LE 25 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2
بما أن وحدة التخزين الافتراضية جاهزة، فإنه يمكننا الآن تهيئتها وتركيبها مثل أي قسم آخر من نوع ext2/3/4.
# mkfs.ext4 /dev/volume-group1/lv1
# mkdir /lvm-mount
# mount /dev/volume-group1/lv1 /lvm-mount/
بعد الانتهاء من تركيب وحدة التخزين الافتراضية، يمكن الوصول إليه من خلال اجراء عمليات القراءة / الكتابة على نقطة التركيب /lvm-mount/. للقيام بإنشاء وتركيب وحدات تخزين افتراضية أخرى، يكفي تكرار هذه العملية.
يمكننا حذف أي وحدة تخزين افتراضية بكل بساطة عن طريق الأمر lvremove.
# umount /lvm-mount/
# lvremove /dev/volume-group1/lv1
كيفية توسيع حجم وحدة تخزين LVM
القدرة على تغيير أحجام وحدات التخزين الافتراضية تعتبر أفضل ميزة في استخدام LVM, وسنقوم في هذا القسم من الدرس بمناقشة كيفية القيام بتوسيع وحدة تخزين افتراضية قائمة, حيث سيتم توسيع وحدة التخزين الافتراضية 'LV1' والتي تم إنشاؤها سابقا إلى 200 ميغابايت.
ما يجب أن نأخذه بعين الاعتبار أنه بعد تغيير حجم وحدة تخزين افتراضية، سنكون بحاجة أيضا إلى تغيير حجم نظام الملفات ليكون مساو لحجم وحدة التخزين الافتراضية. هذه الخطوة الإضافية تختلف باختلاف نظام الملفات الذي يتم إنشاؤه على وحدة التخزين. في هذا الدرس، أنشأنا على 'LV1' نظام الملفات ext4، لذا سنركز على نظام الملفات ext4 ( وهو متوافق بشكل جيد مع أنظمة الملفات ext2/3), من المهم جدا تنفيذ الأوامر حسب التسلسل الآتي.
أولا نقوم بفصل وحدة التخزين.
# umount /lvm-mount/
ثم نقوم بتغيير حجم وحدة التخزين إلى 200 ميجابايت.
# lvresize -L 200M /dev/volume-group1/lv1
الأمر التالي يمكننا من فحص وحدة التخزين بحثا عن أخطاء محتملة.
# e2fsck -f /dev/volume-group1/lv1
بعد ذلك، يتم تحديث المعلومات الخاصة بنظام الملفات EXT4.
# resize2fs /dev/volume-group1/lv1
من المفروض الآن أنه قد تم توسيع وحدة التخزين الافتراضية إلى 200 ميجابايت, ويمكننا التحقق من هذا عن طريق فحص حالة LV.
# lvdisplay
--- Logical volume --- LV Name /dev/volume-group1/lv1 VG Name volume-group1 LV UUID 9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa LV Write Access read/write LV Status available # open 0 LV Size 200.00 MiB Current LE 50 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2
الآن يمكن إعادة تركيب وحدة التخزين المنطقية من جديد، ويمكن استخدامها مثل أي قسم (partition) تماما.
كيفية تقليص وحدة تخزين LVM
يشتمل هذا القسم على طريقة تقليص حجم وحدة تخزين LVM, ونذكر مرة أخرى أهمية تنفيذ الأوامر حسب التسلسل المطلوب، هذه التعليمات تعمل جيدا على نظام الملفات ext2/3/4.
ما يجب أن نأخذه بعين الاعتبار أن تقليص حجم وحدة التخزين الافتراضية إلى حجم أقل من الحجم الإجمالي للبيانات المخزنة على وحدة التخزين الافتراضية قد يتسبب في فقدان هذه البيانات.
أولا نقوم بفصل وحدة التخزين.
# umount /dev/volume-group1/lv1
الأمر التالي يمكننا من فحص وحدة التخزين بحثا عن أخطاء محتملة.
# e2fsck -f /dev/volume-group1/lv1
ثم يتم تحديث المعلومات الخاصة بنظام الملفات ext4.
# resize2fs /dev/volume-group1/lv1 100M
بعد ذلك، يتم تقليص وحدة التخزين الافتراضية.
# lvresize -L 100M /dev/volume-group1/lv1
WARNING: Reducing active logical volume to 100.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to 100.00 MiB Logical volume lv1 successfully resized
أخيرا، يتم التحقق من الحجم الجديد لوحدة التخزين الافتراضية.
# lvdisplay
--- Logical volume --- LV Name /dev/volume-group1/lv1 VG Name volume-group1 LV UUID 9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa LV Write Access read/write LV Status available # open 0 LV Size 100.00 MiB Current LE 25 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2
كيفية توسيع حجم مجموعة وحدة التخزين
يشمل هذا القسم من درسنا على كيفية توسيع حجم مجموعة وحدة التخزين عن طريق إضافة وحدة تخزين فعلية جديدة إلى مجموعة وحدة التخزين. لنفترض أن مجموعة وحدة التخزين 'volume-group1' قد امتلأت، وأصبح من الضروري توسيع حجمها. بما أن القرص الصلب الحالي (sdb) لا يوفر أي مساحة فارغة، قمنا بإضافة قرص صلب آخر (sdc), وسنرى كيف يمكننا توسيع حجم مجموعة وحدة التخزين قسم (partition) من sdc.
أكتب الأمر التالي للتحقق من الوضع الحالي لمجموعة وحدة التخزين VG.
# vgdisplay volume-group1
--- Volume group --- VG Name volume-group1 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 8 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 3.02 GiB PE Size 4.00 MiB Total PE 774 Alloc PE / Size 25 / 100.00 MiB Free PE / Size 749 / 2.93 GiB VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK
أولا، سنقوم بإنشاء قسم (partition) سنسميه sdc1 بحجم 2 جيغابايت من نوع LVM (8e) كما شرحنا في الدرس سابقا.
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1044, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +2G Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): w The partition table has been altered!
ثم، سنقوم بإنشاء وحدة تخزين فعلية /dev/sdc1.
# pvcreate /dev/sdc1
الآن وبعد أن أصبحت وحدة التخزين الفعلية جاهزة، يمكننا ببساطة إضافتها إلى المجموعة 'volume-group1'.
# vgextend volume-group1 /dev/sdc1
يمكننا من التحقق من ذلك باستخدام vgdisplay.
# vgdisplay
--- Volume group --- VG Name volume-group1 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 9 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 5.03 GiB PE Size 4.00 MiB Total PE 1287 Alloc PE / Size 25 / 100.00 MiB Free PE / Size 1262 / 4.93 GiB VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK
يمكنك أن تلاحظ أننا قد استخدمنا قرص منفصل من أجل الدرس، فإنه يبقى بالإمكان استخدام أي قرص من نوع 8e لتوسيع نطاق مجموعة وحدة التخزين.
لتلخيص كل هذا، يمكن القول أن LVM تعتبر أداة قوية جدا لإنشاء وإدارة أقسام (partitions) قابلة للتعديل, ولقد رأينا في هذا الدرس، كيف يمكننا إنشاء أقسام ديناميكية والتحكم فيها باستخدام LVM, كما تعرفنا أيضا على طريقة توسيع / تقليص وحدات التخزين الافتراضية و مجموعات وحدة التخزين، وأيضا كيفية إضافة أقراص صلبة جديدة إلى LVM.
ونأمل في الأخير أن ينال هذا الدرس المترجم إعجابكم