پارتیشنبندی LVM در لینوکس
ظرفیت ذخیره سازی سرور برای چندین دهه از طریق اندازه دیسک و تنظیمات پارتیشن مدیریت شده است. واضح است که این استراتژیها به خوبی کار کرده و قابل اعتماد هستند. با این حال، بازنگری در مدیریت ذخیره سازی در سرورها مزایای زیادی دارد. در این مطلب مدیریت استاندارد ذخیره سازی و پارتیشن بندی را با Logical Volume Manager (LVM) مقایسه میکنیم و برخی از دستورات پایه را برای هر کدام از رویکردها نشان میدهیم.
مدیریت ذخیره سازی سنتی
در این مطلب از عبارت مدیریت ذخیره سازی سنتی برای توصیف فرآیند پارتیشن بندی، فرمت و مونت (mounting) ظرفیت ذخیره سازی از یک درایو دیسک استفاده نموده و پارتیشن بندی استاندارد را با یک روش جایگزین به نام Logical Volume Manager یا LVM مقایسه میکنیم.
فضای ذخیره سازی معمولا بر اساس حداکثر ظرفیت درایوهای هارد دیسک جداگانه مدیریت میشود. نتیجه این است که وقتی یک sysadmin به ذخیره سازی فکر میکند، این کار را بر اساس هر درایو انجام میدهد. به عنوان مثال، اگر یک سرور دارای سه هارد دیسک 1 ترابایتی باشد، sysadmin فضای ذخیره سازی را به معنای واقعی کلمه در نظر می گیرد، من سه درایو یک ترابایتی برای کار دارم.
بیایید خیلی سریع یک سناریو نمونه مدیریت ذخیره سازی سنتی را مرور کنیم:
-
یک هارد دیسک جدید نصب کنید
یک درایو دیسک یک ترابایتی (1 ترابایتی) خریداری و سپس آن را به صورت فیزیکی در سرور نصب کنید.
-
درایو را پارتیشن بندی کنید
برای ایجاد یک یا چند پارتیشن از fdisk یا gparted استفاده کنید. توجه به این نکته مهم است که پارتیشنها نمیتوانند بیش از مجموع 1 ترابایت ظرفیت دیسک مصرف کنند.
مثال دستور fdisk:
# fdisk /dev/sdb
در این مطلب به سینتکس fdisk نمیپردازیم، اما فرض کنید یک پارتیشن ایجاد کردهایم که کل دیسک 1 ترابایتی را مصرف میکند. پارتیشنdev/sdb1/ است.
نمایش ظرفیت با استفاده از proc/partitions/ و محتوای lsblk:
# cat /proc/partitions
# lsblk
-
یک فایلسیستم ایجاد کنید
با استفاده از دستور mkfs یک فایلسیستم روی پارتیشن جدید ایجاد نموده که میتوانید از ext4 یا فایلسیستم پیش فرض XFS استفاده کنید.
# mkfs.ext4 /dev/sdb1
در حالی که XFS پیش فرض Red Hat است، ممکن است در ترکیب با LVM مانند ext4 انعطاف پذیر نباشد. فایل سیستمهای XFS را میتوان به راحتی گسترش داد اما کاهش نمییابد.
-
یک نقطه اتصال (mount point) ایجاد کنید
بقیه این فرآیند نسبتا استاندارد است. ابتدا یک دایرکتوری ایجاد کنید تا به عنوان نقطه اتصال عمل کند. در مرحله بعد، پارتیشن را به صورت دستی در محل نصب قرار دهید.
# mkdir /newsstorage
# mount /dev/sdb1 /newstorage
-
ظرفیت ذخیره سازی را تایید کنید
از دستور du برای تایید دسترسی به فضای ذخیره سازی و اندازه مورد انتظار استفاده کنید.
# du -h /newsstorage
نکته : گزینه h- خروجی du را با ظرفیتی که برای انسان آسان است، مانند GB یا TB نمایش می
-
فضا را برای نصب در هنگام بوت پیکربندی کنید
فایل etc/fstab/ را ویرایش کرده تا فایل سیستم را در هنگام بوت مونت کنید.
Logical Volume Manager یا LVM
LVM مخفف Logical Volume Manager است و ابزاری برای مدیریت پارتیشن ها است. سطحی از انتزاع را بین دیسکها، پارتیشنها و فایل سیستمها اضافه میکند و همچنین به پارتیشنها اجازه میدهد تا چندین درایو را در بر گیرند.
علاوه بر پارتیشنهای سنتی، LVM یک لایه منطقی جدید بین جدول پارتیشن و فایل سیستم معرفی میکند. این لایه جدید امکان تغییر آسان پارتیشنها را پس از آن فراهم میکند.
معماری LVM
-
Physical Volumes چیست؟
Physical Volumes در LVM نشان دهنده یک دستگاه ذخیره سازی فیزیکی متصل به دستگاه است. قبل از اینکه بتوانید از هارد درایوها در LVM استفاده کنید، ابتدا باید آنها را به عنوان Physical Volumes در LVM ثبت کنید.
-
Volume Groups چیست؟
Volume Groups یک یا چند Physical Volume را با هم ترکیب میکند. Volume Groups بخش مرکزی معماری LVM هستند زیرا Physical Volume را به logical volumes متصل میکنند.
-
Logical Volumes چیست؟
Logical Volumes بخشی از یک Volume Group هستند و می توان آنها را با پارتیشنهای معمولی مقایسه کرد. آنها حاوی فایل سیستم هستند و از طریق Volume Groups به Physical Volumes متصل میشوند.
به دلیل این معماری، ممکن است logical volume بزرگتر از هارد دیسکهای فیزیکی باشد. همراه با امکان افزودن و حذف Physical Volumes پس از آن، می توان یک فایل سیستم را در صورت نیاز با اضافه کردن هارد دیسکهای بیشتر و به روز رسانی پیکربندی LVM گسترش داد.
ظرفیت ذخیره سازی سنتی بر اساس ظرفیت دیسک فردی (individual disk) است. LVM از مفهوم متفاوتی استفاده میکند. فضای ذخیره سازی با ترکیب یا ادغام ظرفیت درایوهای موجود مدیریت میشود. با ذخیره سازی سنتی، سه دیسک 1 ترابایتی به صورت جداگانه مدیریت میشوند. با LVM، همان سه دیسک به عنوان 3 ترابایت ظرفیت ذخیره سازی در نظر گرفته خواهد شد. این کار با تعیین دیسکهای ذخیره سازی به عنوان Physical Volume (PV) یا ظرفیت ذخیره سازی قابل استفاده توسط LVM انجام میشود. سپس PVها به یک یا چند Volume Group (VG) اضافه شده و VGها در یک یا چند Logical Volume (LV) قرار میگیرند که به عنوان پارتیشنهای سنتی در نظر گرفته میشوند.
-
یک هارد دیسک جدید نصب کنید
بدیهی است که باید یک دیسک ذخیره سازی در دسترس باشد. همانطور که در بالا دیدیم، شما باید به صورت فیزیکی یک درایو را در سرور نصب کنید.
-
تعیین Physical Volume یا PV
Physical Volumes (PV) دیسکها یا پارتیشنهایی که به عنوان ظرفیت ذخیره سازی بالقوه در دسترس LVM هستند. آنها شناسهها و متادیتاهایی دارند که هر PV را توصیف میکند. جالب است بدانید که برخلاف RAID، PVها لازم نیست هم اندازه یا روی دیسکهایی با سرعت یکسان باشند. برای ایجاد PV میتوانید انواع درایو را ترکیب و مطابقت دهید. برای پیاده سازی LVM، ابتدا یک درایو را به عنوان Physical Volume تعیین کنید.
دستور ایجاد PV:
# pvcreate /dev/sdb1
# pvcreate /dev/sdc
این دو دستور کمی متفاوت هستند؛ دستور اول پارتیشن 1 را روی دیسک ذخیره سازی b به عنوان PV تعیین میکند و دستور دوم ظرفیت کل دیسک ذخیره سازی c را به عنوان PV تنظیم میکند.
نمایش ظرفیت PV و اطلاعات اضافی:
#pvdisplay
این دستور تمام Physical Volume های پیکربندی شده روی سرور را نمایش می دهد.
-
Volume Group را مدیریت کنید
هنگامی که یک یا چند دیسک به عنوان Volume Group در دسترس LVM قرار میگیرد، ظرفیت ذخیره سازی در Volume Group (VG) ترکیب می شود. ممکن است بیش از یک VG در یک سرور وجود داشته باشد و دیسکها ممکن است اعضای بیش از یک VG باشند (اما PVها ممکن است فقط اعضای یک VG باشند).
از دستور vgcreate برای ایجاد یک Volume Group جدید استفاده کنید. VG باید حداقل یک عضو داشته باشد. دستور عبارت است از:
vgcreate name-of-new-VG PV-Members
از دستور زیر برای ایجاد یک Volume Group با نام vg00 با /dev/sdb1 و /dev/sdc به عنوان اعضا استفاده کنید:
# vgcreate vg00 /dev/sdb1 /dev/sdc
نمایش اطلاعات برای VG با نام vg00:
# vgdisplay vg00
-
Logical Volume (LV) را مدیریت کنید
VG را میتوان به یک یا چند Logical Volume (LV) تقسیم کرد و از این LVها به عنوان پارتیشن های سنتی استفاده میشود. VG یک ظرفیت کلی دارد و سپس بخشی از آن ظرفیت به یک Logical Volume اختصاص مییابد.
دستور lvcreate ظرفیت ذخیره سازی را از VG جدا میکند. چند گزینه وجود دارد که باید از آنها آگاه باشید.
سینتکس دستور lvcreate به شرح زیر است:
lvcreate -L size -n lvname vgname
در اینجا دستور ایجاد یک Logical Volume 10 گیگابایتی به نام sales-lv درج شده از Vg00 Volume Group است:
# lvcreate -L 10G -n sales-lv vg00
همانطور که به یاد دارید، ما والیوم گروپ vg00 را از دو فیزیکال والیوم، /dev/sdb1 و /dev/sdc ایجاد کردیم. بنابراین، به طور خلاصه، ما ظرفیت /dev/sdb1 و /dev/sdc را در vg00 ترکیب و سپس یک Logical Volume به نام sales-lv را از آن فضای ذخیرهسازی جمعآوری کردیم.
می توانید از دستور lvdisplay برای مشاهده پیکربندی Logical Volume استفاده کنید.
# lvdisplay /dev/vg00/sales-lv
-
یک فایل سیستم را اعمال و یک نقطه اتصال را تنظیم کنید
هنگامی که LV ایجاد شد، مانند هر پارتیشن دیگری مدیریت می شود. به یک فایل سیستم و یک نقطه اتصال نیاز دارد، درست همانطور که در بخش مدیریت پارتیشن استاندارد در بالا پیکربندی کردیم.
- دستور mkfs.ex4 را روی LV اجرا کنید.
- با استفاده از mkdir یک نقطه اتصال ایجاد کنید.
- با استفاده از دستور mount، به صورت دستی volume را مونت کنید، یا فایل /etc/fstab را ویرایش نموده تا هنگام بوت شدن سیستم، volume را به صورت خودکار مونت کند.
- از دستور df -h برای بررسی موجود بودن ظرفیت ذخیره سازی استفاده کنید.
خرید وی پی اس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
ظرفیت مقیاس بندی (Scaling capacity)
در این مرحله، پیکربندی LVM را دیدهایم، اما واقعا هنوز نتوانستهایم مزایای زیادی را ببینیم. یکی از مزایای پیکربندیهای LVM، توانایی مقیاس بندی ظرفیت ذخیره سازی به راحتی و سریع است. البته مدیران سرور نیاز به افزایش مقیاس (افزایش ظرفیت) دارند. شایان ذکر است که میتوانید با LVM نیز ظرفیت ذخیره سازی را کاهش دهید. این بدان معناست که اگر ظرفیت ذخیره سازی بیش از حد تخصیص داده شود (شما خیلی بیشتر از مقدار مورد نیاز فضای ذخیره سازی را پیکربندی کرده اید)، می توانید آن را کوچک کنید
افزایش ظرفیت
میتوانید ظرفیت ذخیره سازی را به Logical Volume اضافه کنید. این در صورتی مفید است که کاربران فضای بیشتری از آنچه شما پیش بینی کردهاید مصرف کنند. روند بسیار منطقی است:
-
یک دیسک ذخیره سازی نصب و آن را به عنوان PV پیکربندی کنید
برای افزایش ظرفیت، یک دیسک جدید نصب و طبق مراحل بالا آن را به عنوان PV پیکربندی کنید. اگر قبلا دیسکی با فضای خالی موجود است، میتوانید از آن نیز استفاده کنید.
یادآوری از دستور ایجاد یک PV است:
# pvcreate /dev/sdb2
در این مورد، من پارتیشن 2 را روی دیسک /dev/sdb به عنوان PV جدید تعیین میکنم.
-
به VG فضا اضافه کنید
هنگامی که ظرفیت جدید برای LVM تعیین شد، میتوانید آن را به VG اضافه و اندازه استخر (pool) را افزایش دهید.
این دستور را اجرا کنید تا یک PV جدید به VG موجود اضافه کنید:
# vgextend vg00 /dev/sdb2
اکنون استخر ذخیره سازی (storage pool) بزرگتر شده است. مرحله بعدی اضافه کردن ظرفیت افزایش یافته به Logical Volume خاص است. شما میتوانید تمام یا هر یک از فضای ذخیره سازی PV را که به تازگی به استخر اضافه کرده اید به LV موجود اختصاص دهید.
-
فضا را به LV اضافه کنید
در مرحله بعد، مقداری یا تمام فضای ذخیره سازی VG جدید را به LV اضافه کنید که باید گسترش یابد.
دستور lvexend را اجرا کنید تا LV را به یک اندازه معین گسترش دهید:
# lvexend -L3T /dev/vg00/sales-lv
دستور lvexend را اجرا کنید تا 1 گیگابایت فضا به اندازه موجود اضافه کنید:
# lveextend -L+1G /dev/vg00/sales-lv
-
فایل سیستم را گسترش دهید تا ظرفیت ذخیره سازی در دسترس باشد
در نهایت فایل سیستم را گسترش دهید. هر دو ext4 و XFS از این توانایی پشتیبانی میکنند، بنابراین هر کدام از فایل سیستمها خوب هستند.
با استفاده از دستور umount فایل سیستم را جدا کنید:
# umount /newstorage
دستور اصلی برای ext4 آمده است:
# resize2fs /dev/vg00/sales-lv 3T
کاهش ظرفیت
کاهش فضای ذخیره سازی کمتر رایج است و این فرآیند مخالف گسترش فضای ذخیره سازی رخ میدهد.
# umount /dev/vg00/sales-lv
-
فایل سیستم را کوچک کنید
سپس از دستور resize2fs برای کاهش حجم فایل سیستم استفاده کنید. توصیه میشود قبل از کوچک کردن فایل سیستمهای ext4، fsck را اجرا کنید. همچنین توصیه میشود در صورت بروز اتفاق غیرمنتظره، از دادههای LV نسخه پشتیبان تهیه کنید.
در اینجا مثالی از کوچک کردن یک فایل سیستم ext4 آورده شده است:
# resize2fs /dev/vg00/sales-lv 3T
-
LV را کاهش دهید
از دستور lvreduce برای کوچک کردن فضای ذخیره سازی اختصاص داده شده به LV استفاده کنید که ظرفیت ذخیره سازی بالقوه را به VG برمی گرداند.
# lvreduce -L 2T vg00/sales-lv
بسیار مهم است که بدانیم دستور بالا sales-lv را روی 2T تنظیم نموده و دو ترابایت را از LV موجود حذف نمیکند. LV را در دو ترابایت پیکربندی میکند. می توان با استفاده از دستور بسیار مشابه به lvreduce گفت که مقداری از فضا را از ظرفیت موجود کم کند:
# lvreduce -L -2T vg00/sales-lv
در این مورد، یک - (خط تیره) را قبل از اندازه 2T اضافه کردم، که نشان میدهد میخواهم آن مقدار فضا از ظرفیت sales-lv موجود کم شود. تفاوت بین این دو دستور کوچک اما مهم است.
اکنون ظرفیت بازگشتی به VG برای استفاده در LV دیگر را دارید. برای تخصیص مجدد این ظرفیت میتوانید از دستورات گسترش که قبلا ذکر شد استفاده کنید. VG همچنین میتواند کوچک شود.
انعطاف پذیری
ظرفیت را میتوان به راحتی با LVM نیز تخصیص داد. میتوانید ظرفیت یک VG را کاهش دهید و آن را به دیگری اضافه کنید. این کار با کوچک کردن فایل سیستم و سپس حذف LV از VG انجام میشود. فرض کنید یک سرور با ظرفیت 10 ترابایت دارید. با استفاده از فرآیندهای فوق، شما دو LV هر کدام 5 ترابایتی ایجاد کردهاید. پس از چند هفته، متوجه میشوید که به جای آن باید LV های 7 ترابایتی و 3 ترابایتی ایجاد میکردید. میتوانید 2 ترابایت ظرفیت را از یکی از Volume Groups حذف و سپس آن ظرفیت را به VG دیگر اضافه کنید که انعطاف پذیری بسیار بیشتری نسبت به پیشنهادات پارتیشن بندی سنتی دارد.
LVM همچنین از تنظیمات RAID، Mirroring و سایر تنظیمات پیشرفته پشتیبانی میکند که آن را به راهکاری جذابتر تبدیل میکند.
جمع بندی
Logical Volume Manager یک راه عالی برای افزودن انعطافپذیری به نیازهای ذخیرهسازی است و واقعا از مدیریت سنتی درایو پیچیدهتر نیست. یکی از نکات مثبت LVM، ساختار فرمان منطقی است. اکثر دستورات مدیریت مرتبط هستند و بنابراین به خاطر سپردن آنها نسبتا آسان است. هدف جدول زیر فقط خلاصه کردن دستورات نیست، بلکه متوجه میشوید که همه دستورات بسیار مشابه و در نتیجه کاربر پسند هستند:
دستور | توضیحات |
---|---|
pvcreate | ایجاد physical volume |
pvdisplay | نمایش اطلاعات physical volume |
pvs | نمایش اطلاعات physical volume |
pvremove | حذف physical volume |
vgcreate | ایجاد volume group |
vgdisplay | نمایش اطلاعات volume group |
vgs | نمایش اطلاعات volume group |
vgremove | حذف volume group |
vgextend/vgreduce | افزایش یا کاهش volume group |
lvcreate | ایجاد logical volume |
lvdisplay | نمایش اطلاعات logical volume |
lvs | نمایش اطلاعات logical volume |
lvremove | حذف logical volume |
lvextend/lvextend | افزایش یا کاهش logical volume |