lvm مدخل إلى مدير وحدات التّخزين المنطقيّة في نظام لينكس LVM


عبدالهادي الديوري

تمهيد

LVM اختصار لعبارة Logical Volume Management، عبارة عن تقنيّة لإدارة أجهزة التّخزين تُمكّن المُستخدمين من توحيد وتجريد التّخطيط الماديّ (الفعلي) لمكونات أجهزة التّخزين، لإدارتها بسهولة ومرونة. يُمكن استعمال النّسخة الحاليّة LVM2 بالاعتماد على إطار العمل الخاصّ بربط الأجهزة Device mapper في نواة لينكس لجمع أجهزة التّخزين المُتوفّرة في مجموعات وتخصيص وحدات منطقيّة Logical units من المساحة المُركّبة حسب الطّلب.

التّجريد، المرونة والتّحكم من الميزات الرّئيسيّة لاستخدام LVM. يُمكن لوحدات التّخزين Volumes أن تحمل أسماء ذات معنى واضح مثل “database” أو “root-backup”. يُمكن إعادة ضبط حجم وحدات التّخزين ديناميكيًّا حسب تغيّر متطلّبات المساحة، يُمكن كذلك تهجيرها بين الأجهزة الماديّة داخل مجمع التخزين Storage pool أو على نظام قيد التّنفيذ. يُوفّر LVM كذلك ميزات مُتقدّمة مثل أخذ اللقطات Snapshotting، الدّمج Striping والمُطابقة Mirroring.
في هذا الدّرس، سنتحدّث باختصار عن آليّة عمل LVM وبعدها سنستعرض بعضا من الأوامر التي ستحتاج إليها في البداية.

مبادئ ومُصطلحات LVM

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

بنيات مُدير التّخزين في LVM

يعمل LVM عبر إنشاء طبقات مُجرّدة فوق أجهزة التّخزين الماديّة. الطّبقات التي يستعملها LVM بدءا بأكثرها بدائيّة هي كالتّالي:

  • وحدات التّخزين الماديّة Physical Volumes:

    • السابقة في أداة LVM: المقطع pv...
    • الوصف: الأجهزة الماديّة أو الأجهزة التي تشبه الأقراص (مثلا، أجهزة تخزين أنشِئت باستعمال رابط الأجهزة Device Mapper مثل مصفوفات RAID)، وتعدّ المّادة الأساسيّة التي يستعملها LVM للطبقات العليا من التّجريد. وحدات التّخزين الماديّة عبارة عن أجهزة تخزين عاديّة. يكتب LVM ترويسة Header على الجهاز لتخصيصه ليكون قابلا للإدارة.
  • مجموعات وحدات التّخزين Volume Groups:

    • السابقة في أداة LVM: المقطع vg...
    • الوصف: يجمع LVM وحدات التّخزين الماديّة في مساحات تخزينيّة موحّدة تُسمى “مجموعات وحدات التّخزين”. تجرّد مجموعات التّخزين هذه أجهزة التّخزين التّابعة لها من مواصفاتها لتعمل على شكل جهاز تخزين منطقيّ واحد مع جمع المساحات التّخزينيّة الخاصّة بوحدات التّخزين التي تُكوّن المجموعة.
  • وحدات التّخزين المنطقيّة Logical Volumes:

    • السابقة في أداة LVM: المقطع lv... (أدوات LVM العامّة تبدأ عادة بالمقطع lvm...)
    • الوصف: يُمكن تقسيم مجموعة تخزين إلى أي عدد من وحدات التّخزين المنطقيّة. وحدات التّخزين المنطقيّة تُعادل وظيفيّا التجزئات Partitions في قرص ماديّ، لكنّها تتمتّع بمرونة أكثر. تعدّ وحدات التّخزين المنطقيّة المكوّن الأساسيّ الذي يتعامل معه المستخدمون والتّطبيقات.

باختصار، يُمكن استعمال LVM لجمع وحدات التّخزين الماديّة في مجموعات تخزين لتوحيد مساحة التّخزين المتواجدة على نظام ما. بعدها، يُمكن للمدراء تقسيم مجموعة التّخزين إلى وحدات تخزين منطقيّة تعمل على شكل تجزئات مرنة.

ما هي المداءات Extents؟

تُقسَّمُ كلّ وحدة تخزين ضمن مجموعة تخزين إلى قطع صغيرة ذات حجم ثابت تُسمّى المداءات (جمع مدى). تحدّد مجموعة التّخزين حجم المدى (جميع وحدات التّخزين بداخل المجموعة تحمل نفس حجم المدى).

المداءات في وحدة تخزين ماديّة تُسمّى بالمداءات الماديّة، أمّا المداءات في وحدات التّخزين المنطقيّة فتُسمّى مداءات منطقيّة. وحدة تخزين منطقيّة عبارة ببساطة عن رابط يصونه LVM بين المداءات المنطقيّة و الماديّة. بسبب هذه العلاقة، يُمثّل حجم المداءات أصغر مقدار من المساحة التي يُمكن لـLVM تخصيصها.
المداءات سبب رئيسيّ للمرونة والقوّة اللتان يتمتّع بهما LVM. إذ ليس من الضّروريّ على المداءات الماديّة الارتباط بالمداءات المنطقيّة المُمثّلة على شكل جهاز تخزين موحّد بواسطة LVM. يُمكن لـLVM نسخ وإعادة ترتيب المداءات الماديّة التي تُكوّن وحدة تخزين منطقيّة دون إعاقة سير الأمور بالنّسبة للمُستخدم. يُمكن كذلك توسيع أو تقليص وحدات التّخزين المنطقيّة ببساطة عبر إضافة أو إزالة المداءات من وحدة التّخزين.

حالة الاستخدام البسيطة

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

تنبيه: تأكّد من أنّ الأجهزة التّي ترغب باستعمالها مع LVM لا تحتوي على أيّة بيانات مُهمّة. استخدام هذه الأجهزة مع LVM سيؤدّي إلى الكتابة فوق المحتويات الحاليّة. إذا كانت لديك بيانات مهمّة على خادومك فأنشئ نسخا احتياطية قبل الاستمرار في تطبيق الدّرس. إن كنت تريد استكشاف آلية العمل بأمان فالأفضل أن تستخدم آلة افتراضية للتطبيق عليها.

تحديد الأجهزة الماديّة Physical Devices لتُشكّل وحدات تخزين ماديّة Physical Volumes

أول خطوة هي فحص النّظام للوصول إلى الأجهزة التّي يُمكن لـLVM رؤيتها وإدارتها. يُمكنك القيام بهذه الخطوة عبر كتابة ما يلي في الطّرفيّة:

sudo lvmdiskscan

المُخرَج سيكون عبارة عن قائمة بجميع الأجهزة التّي يُمكن لـLVM التّعامل معها:

  /dev/ram0  [      64.00 MiB] 
  /dev/sda   [     200.00 GiB] 
  /dev/ram1  [      64.00 MiB] 

  . . .

  /dev/ram15 [      64.00 MiB] 
  /dev/sdb   [     100.00 GiB] 
  2 disks
  17 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes

من المُخرج أعلاه، يُمكننا أن نرى بأنّنا نتوفّر على قرصين و17 تجزئة. مُعظم التجزئات عبارة عن قرص ذاكرة عشوائيّة /dev/ram* لزيادة الأداء. الأقراص في هذا المثال هي /dev/sda الذي يحتوي على 200G من المساحة، و /dev/sdb ذي المساحة 100G.

بعد تحديد الأجهزة الماديّة التي نريد استخدامها، يُمكننا الآن تخصيصها لتكون وحدات تخزين ماديّة داخل LVM باستخدام الأمر pvcreate:

sudo pvcreate /dev/sda /dev/sdb

المُخرَج:

Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created

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

يُمكنك التّحقّق من أنّ وحدات التّخزين الماديّة قد سُجّلت بنجاح من طرف LVM عبر كتابة الأمر التّالي:

sudo pvs

المُخرج:

PV         VG   Fmt  Attr PSize   PFree  
/dev/sda        lvm2 ---  200.00g 200.00g
/dev/sdb        lvm2 ---  100.00g 100.00g

كما ترى، كلا الجهازان مُتواجدان تحت عمودPV (اختصار لـPhysical Volume).

إضافة وحدات التّخزين الماديّة إلى مجموعة تخزين

بعد أن أنشأنا وحدات تخزين ماديّة من أجهزتنا، يُمكننا الآن إنشاء مجموعة تخزين. سيتوجّب علينا اختيار اسم لمجموعة التّخزين، سنختار اسما عامّا لتبسيط الأمور. في معظم الأوقات، ستجد مجموعة واحدة فقط لكل نظام من أجل الحصول على أقصى درجة من المرونة في التّخصيص. سنُسمّي مجموعة التّخزين الخاصّة بنا بالاسم LVMVolGroup لتبسيط الأمور.

لإنشاء مجموعة تخزين وإضافة وحدتي التّخزين الماديّتين إليها في أمر واحد، اكتب ما يلي:

sudo vgcreate LVMVolGroup /dev/sda /dev/sdb

المُخرج:

Volume group "LVMVolGroup" successfully created

إن اطّلعنا على مُخرج الأمر pvs مُجدّدا، يُمكننا أن نرى بأنّ وحدتي التّخزين الماديّتين أصبحتا مرتبطتين بمجموعة التّخزين الجديدة:

sudo pvs

المُخرَج:

PV         VG          Fmt  Attr PSize   PFree  
/dev/sda   LVMVolGroup lvm2 a--  200.00g 200.00g
/dev/sdb   LVMVolGroup lvm2 a--  100.00g 100.00g

يُمكننا الحصول على خلاصة موجزة لمجموعة التّخزين عبر الأمر التّالي:

sudo vgs

المُخرَج:

VG          #PV #LV #SN Attr   VSize   VFree  
LVMVolGroup   2   0   0 wz--n- 299.99g 299.99g

كما ترى، مجموعة التّخزين الخاصّة بنا تمتلك وحدتي تخزين ماديّتين، دون أية وحدات تخزين منطقيّة، كما لها مساحة تخزين تُساوي مجموعة مساحتي الجهازيْن المُستخدمين.

إنشاء وحدات تخزين منطقيّة من مجموعة التّخزين المُوحّدة

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

سننشئ أربعة وحدات تخزين منطقيّة من مجموعة التّخزين الخاصّة بنا:

  • وحدة تخزين باسم projects بمساحة 10G،
  • وحدة تخزين www بمساحة 5G لمحتوى الوِب،
  • وحدة تخزين db بمساحة 20G لقاعدة البيانات،
  • وحدة تخزين workspace للاستفادة من باقي المساحة.

لإنشاء وحدات تخزين منطقيّة، نستعمل الأمر lvcreate. سيتوجّب علينا تمرير اسم مجموعة التّخزين، ويُمكننا تسميّة وحدة التّخزين المنطقيّة باستخدام الخيار n-. ولتحديد حجم المساحة مُباشرة، يُمكنك استخدام الخيار L-. إن أردت تحديد الحجم حسب عدد النّطاقات، يُمكنك استعمال الخيار l-.

يُمكننا إنشاء أول ثلاثة وحدات تخزين منطقيّة باستخدام الخيار L- كالتّالي:

sudo lvcreate -L 10G -n projects LVMVolGroup
sudo lvcreate -L 5G -n www LVMVolGroup
sudo lvcreate -L 20G -n db LVMVolGroup

المُخرَج:

Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.

يُمكننا الاطّلاع على وحدات التّخزين المنطقيّة وعلاقتها بمجموعة التّخزين عبر تحديد مُخرج مُخصّص من الأمر vgs كما يلي:

sudo vgs -o +lv_size,lv_name

المُخرج:

  VG          #PV #LV #SN Attr   VSize   VFree   LSize  LV      
  LVMVolGroup   2   3   0 wz--n- 299.99g 264.99g 10.00g projects
  LVMVolGroup   2   3   0 wz--n- 299.99g 264.99g  5.00g www     
  LVMVolGroup   2   3   0 wz--n- 299.99g 264.99g 20.00g db

أضفنا آخر عمودين لنرى الحجم المُخصّص لكلّ وحدة تخزين منطقيّة.

الآن، يُمكننا إسناد بقيّة المساحة في مجموعة التّخزين إلى وحدة التّخزين workspace باستعمال الخيار -l، التي تعمل حسب مبدأ المداءات. يُمكننا أيضا توفير نسبة مئويّة ووحدة قياس لإيصال الفكرة على نحو أوضح. في حالتنا، نريد أن نُخصّص باقي المساحة الفارغة، لذا سنُمرّر القيمة 100%FREE:

sudo lvcreate -l 100%FREE -n workspace LVMVolGroup

المُخرج:

  Logical volume "workspace" created.

إذا أعدنا التّحقّق من معلومات مجموعة التّخزين، سنُلاحظ بأنّنا قد استعملنا كافّة المساحة المُتوفّرة:

sudo vgs -o +lv_size,lv_name

المُخرَج:

  VG          #PV #LV #SN Attr   VSize   VFree LSize   LV       
  LVMVolGroup   2   4   0 wz--n- 299.99g    0   10.00g projects 
  LVMVolGroup   2   4   0 wz--n- 299.99g    0    5.00g www      
  LVMVolGroup   2   4   0 wz--n- 299.99g    0   20.00g db       
  LVMVolGroup   2   4   0 wz--n- 299.99g    0  264.99g workspace

كما ترى، فقد أُنشِئت وحدة التّخزين workspace ومجموعة التّخزين LVMVolGroup وقد خُصِّصتا بالكامل.

تهيئة وتركيب وحدات التّخزين المنطقيّة

أصبحت لدينا الآن وحدات تخزين منطقيّة جاهزة للاستعمال، يُمكننا استخدامها كما تُستَخدَم أجهزة التخزين العاديّة.

الأجهزة المنطقيّة متواجدة داخل المُجلّد /dev/ كأي جهاز تخزين آخر. يُمكنك الوصول إليها بطريقتين:

/dev/volume_group_name/logical_volume_name
/dev/mapper/volume_group_name-logical_volume_name

مع تغيير قيمة volume_group_name باسم مجموعة التّخزين، وتغيير قيمة logical_volume_name باسم وحدة التّخزين المنطقيّة.

لذا لتهيئة وحدات التّخزين المنطقيّة الخاصّة بنا باستخدام نظام الملفّات Ext4، يُمكن أن نكتب ما يلي:

sudo mkfs.ext4 /dev/LVMVolGroup/projects
sudo mkfs.ext4 /dev/LVMVolGroup/www
sudo mkfs.ext4 /dev/LVMVolGroup/db
sudo mkfs.ext4 /dev/LVMVolGroup/workspace

أو كما يلي:

sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace

بعد التّهيئة، يُمكننا إنشاء نقاط تركيب Mount points كما يلي:

sudo mkdir -p /mnt/{projects,www,db,workspace}

بعدها يُمكننا تركيب وحدات التّخزين المنطقيّة على المسار المُناسب:

sudo mount /dev/LVMVolGroup/projects /mnt/projects
sudo mount /dev/LVMVolGroup/www /mnt/www
sudo mount /dev/LVMVolGroup/db /mnt/db
sudo mount /dev/LVMVolGroup/workspace /mnt/workspace

لتركيب النّقاط بطريقة دائمة، أضفها إلى /etc/fstab كما لو كانت أجهزة تخزين عاديّة:

sudo nano /etc/fstab

نضيف ما يلي إلى نهاية الملفّ:

/dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0
/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0
/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0
/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0

يجب على نظام التّشغيل الآن أن يركّب وحدات التّخزين المنطقيّة الخاصّة بـLVM آليًّا عند التشغيل.

ختاما

نأمل أن يكون لديك الآن فهم جيّد لمُختلف المُكوّنات التّي يُديرها LVM لإنشاء نظام تخزين مرن. يجب كذلك أن تكون لديك قدرة على إنشاء أجهزة واستعمالها مع LVM.

هذا الدّرس مجرّد مُقدّمة وجيزة لما يُمكن لـLVM توفيره لمُدراء أنظمة Linux. للاستزادة حول كيفيّة العمل مع LVM، ألق نظرة على درس كيفيّة استخدام LVM مع Ubuntu 16.04.

ترجمة - بتصرّف - للمقال An Introduction to LVM Concepts, Terminology, and Operations لكاتبه Justin Ellingwood.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن