كيف تستخدم LVM على لينكس

نشره Fahad في

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 غيغابايت لكل واحد، وليس من الضروري أن تكون الأقسام متطابقة الحجم.

# fdisk /dev/sdb
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)

نكرر نفس الخطوات لإنشاء القسمين المتبقيين, بعد أن يتم إنشاء الأقسام كلها، يجب علينا الحصول على نتيجة مشابهة لهذه:

# fdisk -l
   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) كما شرحنا في الدرس سابقا.

# fdisk /dev/sdc
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.

ونأمل في الأخير أن ينال هذا الدرس المترجم إعجابكم