تمهيد
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 على الجهاز لتخصيصه ليكون قابلا للإدارة.
-
السابقة في أداة LVM: المقطع
-
مجموعات وحدات التّخزين Volume Groups:
-
السابقة في أداة LVM: المقطع
vg...
- الوصف: يجمع LVM وحدات التّخزين الماديّة في مساحات تخزينيّة موحّدة تُسمى “مجموعات وحدات التّخزين”. تجرّد مجموعات التّخزين هذه أجهزة التّخزين التّابعة لها من مواصفاتها لتعمل على شكل جهاز تخزين منطقيّ واحد مع جمع المساحات التّخزينيّة الخاصّة بوحدات التّخزين التي تُكوّن المجموعة.
-
السابقة في أداة LVM: المقطع
-
وحدات التّخزين المنطقيّة Logical Volumes:
-
السابقة في أداة LVM: المقطع
lv...
(أدوات LVM العامّة تبدأ عادة بالمقطعlvm...
) - الوصف: يُمكن تقسيم مجموعة تخزين إلى أي عدد من وحدات التّخزين المنطقيّة. وحدات التّخزين المنطقيّة تُعادل وظيفيّا التجزئات Partitions في قرص ماديّ، لكنّها تتمتّع بمرونة أكثر. تعدّ وحدات التّخزين المنطقيّة المكوّن الأساسيّ الذي يتعامل معه المستخدمون والتّطبيقات.
-
السابقة في أداة LVM: المقطع
باختصار، يُمكن استعمال 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.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.